The function previously had an internal call to the kindepth function in order to provide the parameter pdepth (the generation number). This version requires the generation number to be calculated elsewhere and passed into the function.
Usage
kinship(
id,
father.id,
mother.id,
pdepth,
sparse = FALSE,
twinRelations = NULL,
chrtype = "autosome",
sex = NULL
)Arguments
- id
character vector of IDs for a set of animals.
- father.id
character vector or NA for the IDs of the sires for the set of animals.
- mother.id
character vector or NA for the IDs of the dams for the set of animals.
- pdepth
integer vector indicating the generation number for each animal.
- sparse
logical flag. If
TRUE,Matrix::Diagnol()is used to make a unit diagonal matrix. IfFALSE,base::diag()is used to make a unit square matrix.- twinRelations
NULL(default, no-op) or a data.frame with columnsid1,id2,codedeclaring twin pairs (seecheckTwinRelations). Onlycode == "MZ twin"rows affect the computed matrix –"DZ twin"/"UZ twin"rows are accepted but get zero special treatment, matching kinship2's ownrelationmechanism. A declared MZ-twin pair's coefficient is corrected to equal their shared self-kinship (genetic identity), and the correction is propagated transitively (chained MZ declarations, e.g. A-B and B-C, also correct the undeclared A-C pair) and to every relative computed at a later pedigree depth through either twin – not just the declared pair's own cell.twinRelationsis trusted as already validated bycheckTwinRelations(this function has nosexparameter of its own and so cannot re-run that validator's full rule set itself); only a cheap self-contained check (both ids present inid) is performed here. Seedocs/planning/twin-relations-kinship-computation-plan.mdfor the full design rationale.- chrtype
"autosome"(default) or"x". When"autosome", behavior is unchanged from every prior version of this function –sexis not required and is ignored if supplied. When"x", computes X-chromosome kinship instead: a male's X comes from his mother only (self-kinship 1, since he carries a single copy); a female's X-linked kinship follows the same average-of-parents formula as the autosomal case (self-kinship 0.5, as usual). An individual with unrecognizedsexgetsNAkinship with everyone, including their own self-kinship value. The MZ-twin correction (twinRelations) applies inside this branch identically to the autosomal branch. Ported from kinship2's ownkinship.default()X-linked branch; seedocs/planning/kinship2-supplement-full-reproduction-plan.md§3 for the full design rationale.- sex
NULL(default) or a character vector, the same length asid, using this package's own internal sex codes (sexCodes):"M"/"F"; any other value, includingNA, is treated as unknown). Required whenchrtype = "x"; ignored (may be omitted) whenchrtype = "autosome".
Details
The rows (cols) of founders are just 0.5 * identity matrix, no further processing is needed for them. Parents must be processed before their children, and then a child's kinship is just a sum of the kinship's for his or her parents.
The code for the kinship function was written by Terry Therneau at the Mayo clinic and taken from his website. This function is part of a package written in S (and later ported to R) for calculating kinship and other statistics.
References
https://cran.r-project.org/package=kinship2
The chrtype = "x" branch is ported from kinship2's own X-chromosome
kinship algorithm, described and worked (Table S2) in its supplementary
material:
Sinnwell JP, Therneau TM, Schaid DJ (2014). "The kinship2 R Package for Pedigree Data." Human Heredity, 78(2), 91-93.
$Id: kinship.s,v 1.5 2003/01/04 19:07:53 therneau Exp $
Create the kinship matrix, using the algorithm of K Lange, Mathematical and Statistical Methods for Genetic Analysis, Springer, 1997, p 71-72.
Author
Terry M. Therneau, Mayo Clinic (mayo.edu), original version
All of the code on the original S-Plus kinship function (originally hosted on Terry Therneau's Mayo Clinic software page, offline since at least 2019) was stated to be released under the GNU General Public License (version 2 or later).
The R version became the kinship2 package available on CRAN:
as modified by M Raboin, 2014-09-08 14:44:26
Examples
library(nprcgenekeepr)
ped <- nprcgenekeepr::lacy1989Ped
ped$gen <- findGeneration(ped$id, ped$sire, ped$dam)
kmat <- kinship(ped$id, ped$sire, ped$dam, ped$gen)
ped
#> id sire dam gen population
#> 1 A <NA> <NA> 0 TRUE
#> 2 B <NA> <NA> 0 TRUE
#> 3 C A B 1 TRUE
#> 4 D A B 1 TRUE
#> 5 E <NA> <NA> 0 TRUE
#> 6 F D E 2 TRUE
#> 7 G D E 2 TRUE
kmat
#> A B C D E F G
#> A 0.500 0.000 0.250 0.25 0.00 0.125 0.125
#> B 0.000 0.500 0.250 0.25 0.00 0.125 0.125
#> C 0.250 0.250 0.500 0.25 0.00 0.125 0.125
#> D 0.250 0.250 0.250 0.50 0.00 0.250 0.250
#> E 0.000 0.000 0.000 0.00 0.50 0.250 0.250
#> F 0.125 0.125 0.125 0.25 0.25 0.500 0.250
#> G 0.125 0.125 0.125 0.25 0.25 0.250 0.500
