knitr::opts_chunk$set(echo = FALSE, results = 'asis') ### # load functions defined in this package devtools::load_all()
r6obj_docstat <- rmddochelper::R6ClassDocuStatus$new() r6obj_docstat$set_current_status(psVersion = "0.0.901", psStatus = "Initialisation", psProject = "[REPLACE_WITH_PROJECT]") r6obj_docstat$include_doc_stat(psTitle = "## Document Status")
r6ob_abbrtable <- rmddochelper::R6ClassTableAbbrev$new() ### # include table of abbreviations only, if there are any if (!r6ob_abbrtable$is_empty_abbr()) r6ob_abbrtable$include_abbr_table(psAbbrTitle = "## Abbreviations")
Bei der Selektion von Eltern der kommenden Generation werden Tiere mit positiven Allelen gemäss unserem Zuchtziel ausgewählt. Dadurch sind diese Tiere genetisch untereinander ähnlicher als eine zufällige Stichprobe aus der gesamten Population. Genetische Ähnlichkeit bedeutet hier, dass die Anzahl positiver Allele in den selektierten Inidividuen grösser ist im Vergleich zur zufälligen Stichprobe aus der gesamten Population.
Wir unterscheiden zwei Arten der Ähnlichkeit.
Das folgende Diagramm soll den Unterschied zwischen den beiden Ähnlichkeitsarten veranschaulichen.
rmddochelper::insertOdgAsPdf(psOdgFileStem = "ibd_ibs")
Die oben gezeigte Abbildung entspricht einer graphischen Darstellung eines Stammbaums (Pedigree). Die ovalen Symbole stellen die weiblichen Tiere dar und die Rechtecke stehen für die männlichen Tiere. Die horizontalen grauen Linien verbinden ein weibliches und ein männliches Tier zu einem Elternpaar. Die zu den horizontalen Linien senkrecht stehenden Linien führen zum jeweiligen Nachkommen der entsprechenden Elternpaarung.
Die Bezeichnungen in den Knoten stehen für die Genotypen der Tiere an einem bestimmten Locus. Die roten Pfeile zeigen den Pfad für zwei $A_1$-Allele, welche Kopien des gleichen Allels eines gemeinsamen Ahnen sind. Diese Allele werden somit als identical by descent (IBD) bezeichnet. Die grünen Pfeile zeigen den Pfad von zwei zustandsgleichen Allelen (IBS) diese Allele sind nicht Kopien eines Allels aus einem gemeinsamen Vorfahren.
Definition: Zwei Tiere $x$ und $y$ sind miteinander verwandt, falls die Wahrscheinlichkeit, dass sie an einem beliebigen Locus herkunftsgleiche Allele (IBD) haben, grösser $0$ ist.
Als Mass für die Verwandtschaft wird der sogenannte Verwandtschaftsgrad $a_{xy}$ verwendet. Der Verwandtschaftsgrad entspricht der mittleren Wahrscheinlichkeit über alle Loci, dass diese IBD sind. Für ein gegebenes Pedigree und zwei Tiere $x$ und $y$ wird der Verwandtschaftsgrad $a_{xy}$ berechnet als
\begin{equation} a_{x,y} = \sum_{i=1}^P\left({1\over 2}\right)^{t_1^{(i)}+t_2^{(i)}}(1+F_{Z_i}) \label{eq:RelationshipCoefficient} \end{equation}
wobei $i$ über alle möglichen Verbindungen im Pedigree zwischen den Tieren $x$ und $y$ läuft und $Z_i$ der gemeinsame Ahne von $x$ und $y$ auf der Verbindung $i$ darstellt. Für die Verbindung $i$ wird die Anzahl Generationen zwischen $x$ und dem gemeinsamen Ahnen $Z_i$ mit $t_1^{(i)}$ bezeichnet. Analog dazu steht $t_2^{(i)}$ für die Anzahl Generationen zwischen $y$ und $Z_i$. Aufgrund der Definition von $a_{x,y}$ erkennen wir eine Symmetrieeigenschaft des Verwandtschaftsgrades. Das bedeutet, dass $a_{x,y} = a_{y,x}$
rmddochelper::insertOdgAsPdf(psOdgFileStem = "ComputeRelationshipCoeff", pnPaperWidthScale = 0.6)
Der Term $F_{Z_i}$ steht für den Inzuchtgrad des gemeinsamen Ahnen $Z_i$. Inzucht wird im nächsten Abschnitt besprochen.
Ein Tier $x$ ist ingezüchtet, falls seine Eltern $m(x)$ und $v(x)$ miteinander verwandt sind. Inzucht beschreibt somit, ob ein Tier an einem Locus herkunftsgleiche Allele (IBD) hat. Der Inzuchtkoeffizient $F_x$ eines Tieres $x$ ist definiert als der halbe Verwandtschaftskoeffizient der Eltern von $x$.
\begin{equation} F_x = {1\over 2}a_{m(x),v(x)} = {1\over 2}\sum_{i=1}^P\left({1\over 2}\right)^{t_1^{(i)}+t_2^{(i)}}(1+F_{Z_i}) = \sum_{i=1}^P\left({1\over 2}\right)^{t_1^{(i)}+t_2^{(i)}+1}(1+F_{Z_i}) \label{eq:InbreedingCoefficient} \end{equation}
Zur Berechnung der Verwandtschaftsgrade und der Inzuchtgrade für eine ganze Population sind die in (\ref{eq:RelationshipCoefficient}) und (\ref{eq:InbreedingCoefficient}) gezeigten Formeln nicht geeignet. Da die Verwandtschaftsgrade und die Inzuchtkoeffizienten für ein bestimmtes Tier in der Population immer von den jeweiligen Werten der Eltern abhängen, ist eine rekursive Berechnung viel einfacher. Dieser rekursive Ansatz heisst Matrixmethode. Dabei werden die Verwandtschaftsgrade und die Inzuchtkoeffizienten mit folgendn Schritten bestimmt.
NA
eingetragen.\begin{equation} a_{xy} = {1\over 2}(a_{x,m(y)} + a_{x,v(y)}) \label{eq:RelCoeffRecursive} \end{equation}
\pagebreak
Gegeben sei das folgende Pedigree.
rmddochelper::insertOdgAsPdf(psOdgFileStem = "MatMethPedigree", pnPaperWidthScale = 0.5)
Alternative zur graphischen Darstellung kann ein Pedigree auch als Liste mit drei Kolonnen gegeben sein. In den drei Kolonnen werden die Tiere, die Väter (sire) und die Mütter (dam) aufgelistet. Für unser Bespielpedigree sieht die Listenform wie folgt aus:
nNrAni <- 10 suppressPackageStartupMessages(library(pedigreemm)) pedEx1 <- pedigree(sire = as.integer(c(NA,NA,NA,NA,1,3,3,6,6,8)), dam = as.integer(c(NA,NA,NA,NA,2,2,4,5,7,9)), label = as.character(1:nNrAni)) ### # show the pedigree print(pedEx1) ### # compute relationship matrix matApedEx1 <- as.matrix(getA(pedEx1))
Unbekannte Eltern werden mit <NA>
gekennzeichnet. Aufgrund des gegebenen Pedigrees können wir nun schrittweise die Verwandtschaftsmatrix aufstellen.
Bei der Sortierung nach Alter ist es wichtig, dass die Eltern vor den Nachkommen aufgelistet werden. Für unser Beispiel haben wir keine konkreten Altersangaben. Bei der Sortierung geht es auch nicht um die Auflistung nach dem absoluten Alter, sondern es ist einfach wichtig, dass Eltern vor Nachkommen erscheinen, sonst funktioniert die rekursive Berechnung der Verwandtschaftsgrade nicht. Innerhalb einer Generation spielt die Reihenfolge der Tiere keine Rolle.
Im Beispiel wurden die Tiere schon nach dem Alter nummeriert, so dass die ältesten Tiere die tiefsten Nummern haben. Somit sieht das Resultat des ersten Schrittes wie folgt aus.
relMat <- matrix(data = "", nrow = nNrAni+2, ncol = nNrAni+2) relMat[1,] <- c(NA,"NA",as.character(1:nNrAni)) relMat[,1] <- c(NA,"NA",as.character(1:nNrAni)) relMat[2,2] <- "1"
cat("$$\\left[") cat(paste(sGetTexMatrix(pmatAMatrix = relMat), collapse = "\n")) cat("\\right]\n") cat("$$\n")
Bekannte Eltern werden eine Zeile über den Tieren eingetragen
vecParentRow <- sGetParentRow(pPed = pedEx1) relMat <- rbind(c(NA,NA,vecParentRow),relMat)
cat("$$\\left[") cat(paste(sGetTexMatrix(pmatAMatrix = relMat), collapse = "\n")) cat("\\right]\n") cat("$$\n")
Die Zeile und die Kolonnen, welche zum unbekannten Tier "NA" gehören, werden mit $0$ initialisiert.
relMat[3,3:(ncol(relMat))] <- 0 relMat[4:nrow(relMat),2] <- 0 relMat[3,2] <- "1"
cat("$$\\left[") cat(paste(sGetTexMatrix(pmatAMatrix = relMat), collapse = "\n")) cat("\\right]\n") cat("$$\n")
\pagebreak
Auf der Diagonalen für Tier 1 wird $1+F_1$ eingetragen. $F_1$ steht für den Inzuchtkoeffizienten von Tier $1$. Dieser wird berechnet aus dem Verwandtschaftsgrad der Eltern. Da die Eltern von Tier $1$ unbekannt sind, wird $F_1=0$ gesetzt.
relMat[4,3] <- matApedEx1[1,1]
cat("$$\\left[") cat(paste(sGetTexMatrix(pmatAMatrix = relMat), collapse = "\n")) cat("\\right]\n") cat("$$\n")
Auf der Offdiagonalen wird auf der Zeile für Tier 1 und in Kolonne $i$ der Verwandtschaftsgrad zwischen den Tieren $1$ und $i$ eingetragen. Dieser berechnen wir mit der rekursiven Formel aus Gleichung (\ref{eq:RelCoeffRecursive}).
relMat[4,4:ncol(relMat)] <- matApedEx1[1,2:ncol(matApedEx1)]
cat("$$\\left[") cat(paste(sGetTexMatrix(pmatAMatrix = relMat), collapse = "\n")) cat("\\right]\n") cat("$$\n")
\pagebreak
Da die Verwandtschaftsmatrix symmetrisch sein muss, können wir die Zeile von Tier 1 in die entsprechende Kolonne übertragen
relMat[5:nrow(relMat),3] <- matApedEx1[2:nrow(matApedEx1),1]
cat("$$\\left[") cat(paste(sGetTexMatrix(pmatAMatrix = relMat), collapse = "\n")) cat("\\right]\n") cat("$$\n")
Die Schritte 4, 5 und 6 wiederholen wir bis die ganze Matrix aufgefüllt ist. Anschliessend streichen wir die ersten drei Zeilen und die ersten zwei Kolonnen. Das Resultat ist dann die Verwandtschaftsmatrix, welche mit $A$ bezeichnet wird.
cat("$$A = \\left[") cat(paste(sGetTexMatrix(pmatAMatrix = matApedEx1, pnDigits = 4), collapse = "\n")) cat("\\right]\n") cat("$$\n")
Die Diagonalelemente $a_{ii}$ der Matrix $A$ entsprechen den Werten $1 + F_i$, wobei $F_i$ der Inzuchtkoeffizient von Tier $i$ ist. Somit sind alle Tiere, die auf der Dianognalen von $A$ einen Wert $>1$ haben ingezüchtet. Die Offdiagonalelemente $a_{ij}$ für $i \ne j$ entsprechen dem Verwandtschaftsgrad zwischen Tier $i$ und $j$.
r6ob_abbrtable$writeToTsvFile()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.