一个简单示例如下:
由于AFEchidna包的AGH.inv函数分别生成A矩阵、G矩阵和H矩阵的逆矩阵id会与Echidna存在差异。因此,我们可以先运行一个简单模型生成id先:
// get id from .aif file
ablup <- echidna(fixed=yield~1+Rep,
random=~ nrm(Genotype),
residual=~ units ,
delf=F,
es0.file='MET1.es0')
dat<-read.table('temp_NRM.aif',header=F)
idn<-dat[,1]
接下来,通过AFEchidna包的AGH.inv函数分别生成A矩阵、G矩阵和H矩阵的逆矩阵,并输出为相应文件,注意文件名后缀为giv。
// A simple case
library(AFfR)
data("ugped")
data("gped")
data("gmarker")
# get A-matrix, G-matrix and H-matrix
AGH1<-AFEchidna::AGH.inv(option=1,ugped,gped,gmarker, tidn=idn)
mN<-paste0(c('A','G','H'),'.giv',sep='')
for(i in 1:3) write.csv(AGH1[[i]],file=mN[[i]],row.names=F)
其次,通过AFEchidna包来运行SS-GBLUP。
// hblup
ablup <- echidna(fixed=yield~1+Rep,
random=~ nrm(Genotype),
residual=~ units ,
es0.file='MET1.es0')
hblup <- update(ablup,random=~grm1(Genotype))
MET1.es0的示例如下:
#!WORK 2 !REN !ARG
TITLE: MET1 #!DOPART $1
# "Genotype","Loc","Loc2","Row","Col","Rep","Block","Plot","yield" ...
# "175","3","CSuarez","1","1","1","1","1",17.52 ...
Genotype !P # 175
Loc !I # 3
Loc2 !A # CSuarez
Row !I # 1
Col !I # 1
Rep !I # 1
Block !I # 1
Plot !I # 1
yield # 17.52
# Verify data fields are as factors (!A !I !P *) or variates
tped.csv !SKIP 1 !SAVE 1
H.giv # giv2
MET1.csv !SKIP 1
注意:
- 使用AFEchidna进行SS-GBLUP分析时,无法同时进行普通的GBLUP,原因是SS-GBLUP所用的谱系文件,整合了未基因分型个体和基因分型个体,但GBLUP谱系文件仅有基因分型个体(由于G矩阵缘故)。此外,理论上SS-GBLUP所用的数据集会大于普通GBLUP的数据集,因为其可纳入未基因分型个体的表型数据。
- 在使用训练群体所建立的GBLUP模型对候选个体进行GEBV估计时,需要将候选个体id放入训练群体的谱系中。
- 在每次分析时,要注意谱系文件id与所有涉及的矩阵行列名须一致。