大家好,我是邓飞。
今天介绍一下如何根据亲本基因型,生成杂交F1的基因型数据。
应用场景:
玉米等物种中常见的步骤,其中只对父母(纯合系列)进行基因型分型,然后利用这些信息来生成/推测每个杂交后代的基因型数据。这个函数也可以用于混合DNA分析,以获得只对父母进行基因型分型的全同胞个体的混合分子矩阵。
R包:ASRgenomics,最新的版本为1.1.4。
安装命令:
install.packages("ASRgenomics")
也可以在Rstudio中,鼠标点击形式,进行安装
函数说明:
synthetic.cross(
M = NULL,
ped = NULL,
indiv = NULL,
mother = NULL,
father = NULL,
heterozygote.action = c("useNA", "exact", "fail", "expected"),
na.action = c("useNA", "expected"),
message = TRUE
)
A matrix with marker data of full form (�×�n×p), with �n individuals (mothers and fathers) and �p markers. Individual and marker names are assigned to rownames and colnames, respectively. Data in matrix is coded as 0, 1, 2 (integer or numeric) (default = NULL).
主要参数:
M:为0-1-2编码的基因型数据,正常来说,都为0或者2,不应该有杂合的位点
ped:需要杂交的系谱,ID,亲本1,亲本2
注意事项:
亲本不允许有缺失值,不允许有杂合位点,这样生成的F1才是靠谱的。否则就会有推算,有错误的概率。
函数:synthetic.cross 有根据频率推算的方法,不建议使用。最好的方法是提取把数据处理好,不要有缺失值,不要有杂合位点,转为0-1-2的编码形式,然后用这个函数就可以生成了。
举个栗子:
library(ASRgenomics)
set.seed(123)
xx = sample(c(0,2),size=100,replace = T)
M012 = matrix(xx,5,20)
M012 = as.data.frame(M012)
names(M012) = paste0("SNP",1:20)
row.names(M012) = paste0("ID",1:5)
M012 = as.matrix(M012)
M012
模拟的基因型数据:
5个个体,每个个体有20个SNP分型,0是主等位基因纯合,2是次等位基因纯合。
假定ID1,ID2,ID3作为母本,ID4和ID5作为父本,一共生成6个个体,想要得到这6个个体的基因型数据:
ped = data.frame(P1 = rep(c("ID1","ID2","ID3"),each=2), P2 = rep(c("ID4","ID5"),3))
ped
library(tidyverse)
ped = ped %>% mutate(ID = str_c(P1,"_",P2)) %>% select(ID,P1,P2)
ped
生成F1的代码:
synthetic.cross(M012,ped = ped,indiv = "ID",mother = "P1",father = "P2",heterozygote.action = "exact")
synthetic.cross(M012,ped = ped,indiv = "ID",mother = "P1",father = "P2",heterozygote.action = "exact")
M012是0-1-2编码的基因型数据,ped是系谱数据,然后分别是ID的名称、母本的名称、父本的名称,以及杂交种处理的方式,这里为“exact”,即无法准确推测的设置为缺失,还有其它的选项可以选择。
结果文件: