BLUP值是育种中最重要的概念,在实际的计算中我们往往需要计算多个性状的Blup值,为了提高效率,之前我们介绍过如何批量分析多个性状的遗传力,今天小编再给大家介绍一下如何使用ASReml 软件批量计算多个性状的育种值,并保存到本地。
模拟数据
使用asreml包中的harvey数据,另外模拟7个数据,合并一起,构成10个性状的数据,用于分析演示。
library(asreml)data("harvey")dat = harveyhead(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)$varcompvpredict(m1,h2~4*V1/(V1+V2))
结果中保存了方差组分和遗传力,以及育种值BLUP。
library(asreml)data("harvey")dat = harveyhead(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)$varcompvpredict(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)nnstatus1 = NULLh2 = NULLvc = NULLblup_re = NULLfor(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) = nnnames(h2) = nnnames(vc) = nnnames(blup_re) = nnre1 = do.call("rbind",h2)re2 = do.call("rbind",status1)re3 = do.call("rbind",vc)re3h2_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近期提供免费试用活动,感兴趣的老师私聊小编了解更多软件试用详情。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!