Synbreed中的RRBLUP模型(用函数gpMod实现)与rrBLUP包中的kin.blup:若使用同一个数据集,同一个relationship矩阵,则得出的结果相近。
区别:
1.gpMod中使用的kin矩阵为kin.blup中kin矩阵的一半。
2.kin.blup结果中的Vg为gpMod结果中fit的分量sigma的第一个值kinTS的1000倍。
Vg:遗传方差
Ve:剩余方差
方差组分可用于crossVal函数进行CV,方法:将VC.est参数设为commit,在varComp中指定遗传方差(除以1000后的结果值)和剩余方差
例子:
library(synbreed)
library(rrBLUP)
load("blued_pheno.RData")
load("dart_markers.RData")
#将基因型数据转换为synbreed的格式:{0,1,2}分别表示{AA,Aa,aa}
is.heter<-function(x){
substr(x,1,1)!=substr(x,3,3)
}
genotype<-dart_markers
genotype[genotype==0]<-"A/A"
genotype[genotype==1]<-"T/T"
phenotype<-pheno
rownames(genotype)<-rownames(phenotype)<-1001:1254
mygp<-create.gpData(pheno=phenotype,geno=genotype)
mygpC<-codeGeno(mygp,label.heter=is.heter,impute=TRUE,impute.type="random")
#realized relationship matrix from markers
U<-kin(mygpC,ret="realized")/2
#将基因型数据转换为rrBLUP的格式:{1,0,-1}分别表示{AA,Aa,aa}
x<-mygpC$geno
x[x==0]<-3
x[x==1]<-0
x[x==3]<-1
x[x==2]<--1
A<-A.mat(x)
A1<-U
n<-nrow(A)
for(i in 1:n)
for(j in 1:n)
A1[i,j]<-A[i,j]
#必须指定关系矩阵的行名,kin.blup函数中与geno指定值对应,作为基因型的identity
rownames(A)<-1:254
traits<-2
#Statistical Model: RRBLUP
mygpRRBLUP<-gpMod(mygpC,model="BLUP",kin=A1/2,trait=traits,markerEffects=TRUE)
data1<-data.frame(y=pheno[,traits],gid=1:254)
RRBLUP<-kin.blup(data1,K=A,geno="gid",pheno="y")
cv.mygpC1<-crossVal(mygpC,cov.matrix=list(U),trait=traits,k=5,Rep=1,Seed=123,sampling="random",varComp=mygpRRBLUP$fit$sigma,VC.est="commit")
cv.mygpC2<-crossVal(mygpC,cov.matrix=list(U),trait=traits,k=5,Rep=1,Seed=123,sampling="random",varComp=c(RRBLUP$Vg/1000,RRBLUP$Ve),VC.est="commit")
cv.mygpC1$PredAbi
cv.mygpC2$PredAbi