Synbreed与rrBLUP

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

你可能感兴趣的:(Synbreed与rrBLUP)