founderLine | R Documentation |
For every individual in a pedigree, the function identifies either the one female or male ancestor that is a founder (defined here as an individual identity in the pedigree for which both dam and sire information are missing).
founderLine(pedigree, sex)
pedigree |
A pedigree where the columns are ordered ID, Dam, Sire, Sex |
sex |
Character indicating the column name in pedigree identifying either the dam (for matriline) or sire (for patriline) identities |
Missing parents (e.g., base population) should be denoted by either 'NA', '0', or '*'.
Individuals with a missing parent for the column identified by the 'sex' argument are assigned themselves as their founder line. Thus, the definition of the founder population from a given pedigree is simply all individuals with missing parents (and in this case just a single missing parent classifies an individual as a founder).
A vector of length equal to the number of rows in the pedigree
founderLine(FG90, sex = "dam") # matriline from this example pedigree #Create random pedigree, tracking the matrilines ## Then compare with founderLine() output K <- 8 # No. individuals per generation (KEEP and even number) gen <- 10 # No. of generations datArr <- array(NA, dim = c(K, 5, gen)) dimnames(datArr) <- list(NULL, c("id", "dam", "sire", "sex", "matriline"), NULL) # initialize the data array datArr[, "id", ] <- seq(K*gen) datArr[, "sex", ] <- c(1, 2) femRow <- which(datArr[, "sex", 1] == 2) # assume this is same each generation # (Why K should always be an even number) datArr[femRow, "matriline", 1] <- femRow # males have overlapping generations, BUT females DO NOT for(g in 2:gen){ datArr[, "sire", g] <- sample(c(datArr[femRow-1, "id", 1:(g-1)]), size = K, replace = TRUE) gdams <- sample(femRow, size = K, replace = TRUE) datArr[, c("dam", "matriline"), g] <- datArr[gdams, c("id", "matriline"), g-1] } ped <- data.frame(apply(datArr, MARGIN = 2, FUN = function(x){x})) nrow(ped) #Now run founderLine() and compare ped$line <- founderLine(ped, sex = "dam") stopifnot(identical(ped$matriline, ped$line), sum(ped$matriline-ped$line, na.rm = TRUE) == 0, range(ped$matriline-ped$line, na.rm = TRUE) == 0)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.