BLUP值是育种中最重要的概念,在实际的计算中我们往往需要计算多个性状的Blup值,为了提高效率,之前我们介绍过如何批量分析多个性状的遗传力,今天小编再给大家介绍一下如何使用ASReml 软件批量计算多个性状的育种值,并保存到本地。
模拟数据
使用asreml包中的harvey数据,另外模拟7个数据,合并一起,构成10个性状的数据,用于分析演示。
library(asreml)
data("harvey")
dat = harvey
head(dat)
dd = as.data.frame(matrix(rnorm(7*65,10,5),65))
names(dd) = paste0("y",4:10)
head(dd)
dat1 = cbind(dat,dd)
head(dat1)
这里,先对y1性状进行分析,将Line和ageOfDam作为固定因子,将Sire作为随机因子,进行模型拟合。模型跑通后,再写程序进行批量处理:
m1 = asreml(y1 ~ Line + ageOfDam,
random = ~ Sire,
residual = ~ idv(units),
data=dat1)
summary(m1)$varcomp
vpredict(m1,h2~4*V1/(V1+V2))
结果中保存了方差组分和遗传力,以及育种值BLUP。
library(asreml)
data("harvey")
dat = harvey
head(dat)
set.seed(123)
dd = as.data.frame(matrix(rnorm(7*65,10,5),65))
names(dd) = paste0("y",4:10)
dat1 = cbind(dat,dd)
head(dat1)
m1 = asreml(y1 ~ Line + ageOfDam,
random = ~ Sire,
residual = ~ idv(units),
na.action = na.method(x = "include",y = "include"),
data=dat1)
summary(m1)$varcomp
vpredict(m1,h2~4*V1/(V1+V2))
blup = as.data.frame(coef(m1)$random)
blup$ID = rownames(blup)
blup = blup[,c(2,1)]
head(blup)
nn = paste0("y",1:10)
nn
status1 = NULL
h2 = NULL
vc = NULL
blup_re = NULL
for(i in seq_along(nn)){
# i = 1
mod = asreml(formula(paste0(nn[i],"~ Line + ageOfDam")),
random = ~ Sire,
residual = ~ idv(units),
data=dat1)
vc[[i]] = summary(mod)$varcomp
status1[[i]] = mod$converge
h2[[i]] = vpredict(mod,h2 ~ 4*V1/(V1+V2))
blup = as.data.frame(coef(m1)$random)
blup$ID = rownames(blup)
blup = blup[,c(2,1)]
blup_re[[i]] = blup
}
names(status1) = nn
names(h2) = nn
names(vc) = nn
names(blup_re) = nn
re1 = do.call("rbind",h2)
re2 = do.call("rbind",status1)
re3 = do.call("rbind",vc)
re3
h2_result = cbind(re1,Converged = re2)
library(openxlsx)
write.xlsx(h2_result,"h2_result.xlsx")
write.xlsx(blup_re,"blup_result.xlsx")
结果文件
* 遗传力结果:h2_result.xsx
* 育种值结果:blup_result.xsx
上面的代码,也可以修改为对个体动物模型进行多个性状的批量处理。
ASReml-R近期提供免费试用活动,感兴趣的老师私聊小编了解更多软件试用详情。
留言与评论(共有 0 条评论) “” |