###### Description

ainverse generates an inverse relationship matrix in sparse triplet form from a pedigree data frame.

###### Usage

ainverse(pedigree, fgen = list(character(0), 0.01), gender = character(0),groups = 0, groupOffset = 0, selfing = NA, inBreed = NA, mgs = FALSE, mv = c("NA", "0", "*"), psort = FALSE)

###### Arguments

`pedigree` |
A data frame where the first three columns correspond to the identifiers for the individual, male parent and female parent, respectively. The row giving the pedigree of an individual must appear before any row where that individual appears as a parent. Founders use 0 (zero) or NA in the parental columns. |

`fgen` |
An optional list of length 2 where `fgen[[1]]` is a character string naming the column in `pedigree` that contains the level of selfing or the level of inbreeding of an individual. In `pedigree[,fgen[[1]]]` , 0 indicates a simple cross, 1 indicates selfed once, 2 indicates selfed twice, etc. A value between 0 and 1 for a base individual is taken as its inbreeding value. If the pedigree has implicit individuals (they appear as parents but not as individuals), they will be assumed base non-inbred individuals unless their inbreeding level is set with `fgen[[2]]` , , where 0 < `fgen[[2]]` < 1 is the inbreeding level of such individuals. |

`gender` |
An optional character string naming the column of `pedigree` that codes for the gender of an individual. `pedigree[,gender]` is coerced to a factor and must only have two (arbitrary) levels, the first of which is taken to mean “male”. An inverse relationship matrix is formed for the X chromosome as described by Fernando and Grossman, 1990 for species where the male is XY and the female is XX. |

`groups` |
An integer scalar (g) indicating genetic groups in the pedigree. The first g lines of the pedigree identify the genetic groups (with zero in both the male and female parent columns). All other rows must specify one of the genetic groups as the male or female parent if the actual parent is unknown. The default is g = 0. |

`groupOffset` |
A numeric scalar e > 0 added to the diagonal elements of A^{−1} pertaining to `groups` , shrinking the group effects by e. When a constant is added, no adjustment of the degrees of freedom is made for genetic groups. Set to -1 to add no offset but to suppress insertion of constraints where empty groups appear; the empty groups are then not counted in the degrees of freedom adjustment. The default is e = 0. |

`selfing` |
A numeric scalar (s) allowing for partial selfing when the third field of `pedigree` is unknown. It indicates that progeny from a cross where the male parent is unknown is assumed to be from selfing with probability s and from outcrossing with probability (1-s). This is appropriate in some forestry tree breeding studies where seed collected from a tree may have been pollinated by the mother tree or pollinated by some other tree (Dutkowski and Gilmour, 2001). Do not use the `selfing` argument in conjunction with `inBreed` or `mgs` . |

`inBreed` |
A numeric scalar (default `NA` ) giving the inbreeding coefficient for base individuals. This argument generates the numerator relationship matrix for inbred lines. Each cross is assumed to be selfed several times to stabilize as an inbred line as is usual for cereal crops, for example, before being evaluated or crossed with another line. Since inbreeding is usually associated with strong selection, it is not obvious that a pedigree assumption of covariance of 0.5 between parent and offspring actually holds. The `inBreed` argument cannot be used in conjunction with `selfing` or `mgs` . |

`mgs` |
If `TRUE` (default `FALSE` ), the third identity in the pedigree is the male parent of the female parent (maternal grand-sire) rather than the female parent. |

`mv` |
A character vector of missing value indicators; elements of `pedigree` that exactly match any of the members of mv are treated as missing. |

`psort` |
If `TRUE` (default `FALSE` ), the pedigree data frame is returned in founder order after any insertions and permutations. |

###### Details

Uses the method of *Meuwissen and Luo, 1992* to compute the inverse relationship matrix directly from the pedigree.

###### Value

A three-column matrix with class `ginv`

holding the lower triangle of the inverse relationship matrix in sparse form. The first 2 columns are the *row* and *column* indices, respectively, and the third column holds the inverse matrix element itself. Sort order is columns within rows, that is, the lower triangle row-wise. This matrix has attributes:

`rowNames` |
A character vector of identifiers for the rows of the matrix. |

`inbreeding` |
A numeric vector containing the inbreeding coefficient for each individual, calculated as `diag(A-I)` . |

`geneticGroups` |
A numeric vector of length 2 containing the `groups` and `groupOffset` arguments. |

`logdet` |
The log determinant. |

###### References

Dutkowski GW and Gilmour AR (2001). “Modification of the Additive Relationship Matrix for

Open Pollinated Trials.” In *Developing the Eucalypt of the Future*, pp. 71. Instituto Forestal Chile, Valdivia.

Fernando R and Grossman M (1990). “Genetic Evaluation with Autosomal and X-Chromosomal Inheritance.” *Theoretical and Applied Genetics*, **80**, pp. 75-80.

Meuwissen THE and Luo Z (1992). “Computing Inbreeding Coefficients in Large Populations.”

*Genetics Selection Evolution*, **24**, pp. 305-313.

###### Examples

## Not run: # Simple pedigree ped <- data.frame(me = c(1,2,3,4,5,6,7,8,9,10), dad = c(0,0,0,1,1,2,4,5,7,9), mum = c(0,0,0,1,1,2,6,6,8,9)) p.ai <- ainverse(ped) # Known filial generation pdfg <- data.frame(me = c(1,2,3,4,5,6,7), dad = c(0,0,1,1,1,1,1), mum = c(0,0,0,2,2,2,2), fgen = c(NA,0.8,0.0,2.0,0.0,2.0,3.0)) pdfg.ai <- ainverse(pdfg,fgen=list('fgen',0.4)) pdfg.mat <- sp2mat(pdfg.ai) zapsmall(solve(pdfg.mat)) zapsmall(cbind(pdfg.a$inbreeding,diag(pdfg.mat))) ## End(Not run)