下面给出了使用R
包asreml
分析可解析alpha设计(alpha点阵设计)的代码。
# load the data
library(agridat)
data(john.alpha)
dat <- john.alpha
# load asreml
library(asreml)
# model1 - random `gen`
#----------------------
# fitting the model
model1 <- asreml(yield ~ 1 + rep, data=dat, random=~ gen + rep:block)
# variance due to `gen`
sg2 <- summary(model1 )$varcomp[1,'component']
# mean variance of a difference of two BLUPs
vblup <- predict(model1 , classify="gen")$pred$avsed ^ 2
# model2 - fixed `gen`
#----------------------
model2 <- asreml(yield ~ 1 + gen + rep, data=dat, random = ~ rep:block)
# mean variance of a difference of two adjusted treatment means (BLUE)
vblue <- predict(model2 , classify="gen")$pred$avsed ^ 2
# H^2 = .803
sg2 / (sg2 + vblue/2)
# H^2c = .809
1-(vblup / 2 / sg2)
我正在尝试使用R
包lme4
复制上述内容。
# model1 - random `gen`
#----------------------
# fitting the model
model1 <- lmer(yield ~ 1 + (1|gen) + rep + (1|rep:block), dat)
# variance due to `gen`
varcomp <- VarCorr(model1)
varcomp <- data.frame(print(varcomp, comp = "Variance"))
sg2 <- varcomp[varcomp$grp == "gen",]$vcov
# model2 - fixed `gen`
#----------------------
model2 <- lmer(yield ~ 1 + gen + rep + (1|rep:block), dat)
如何计算相当于vblup
的{{1}} vblue
的{{1}}和lme4
(差异均值差异)?
答案 0 :(得分:2)
我对这种差异划分的东西并不熟悉,但我会小心翼翼。
library(lme4)
model1 <- lmer(yield ~ 1 + rep + (1|gen) + (1|rep:block), john.alpha)
model2 <- update(model1, . ~ . + gen - (1|gen))
## variance due to `gen`
sg2 <- c(VarCorr(model1)[["gen"]]) ## 0.142902
获取BLUP的条件差异:
rr1 <- ranef(model1,condVar=TRUE)
vv1 <- attr(rr$gen,"postVar")
str(vv1)
## num [1, 1, 1:24] 0.0289 0.0289 0.0289 0.0289 0.0289 ...
这是一个1x1x24数组(实际上只是一个方差向量;如果需要,我们可以使用c()
进行折叠)。它们并非完全相同,但它们非常接近......我不知道它们是否都是相同的(这是一个临时问题)< / p>
(uv <- unique(vv1))
## [1] 0.02887451 0.02885887 0.02885887
相对变化约为5.4e-4 ......
如果这些都是相同的,那么任何两个差异的均值方差将只是方差的两倍(Var(x-y)= Var(x)+ Var(y);通过构造,BLUP都是独立的)。我会继续使用它。
vblup <- 2*mean(vv1)
对于gen
作为固定效应拟合的模型,让我们提取与基因型相关的参数的差异(这是与第一级的预期值的差异):
vv2 <- diag(vcov(model2))[-(1:3)]
summary(vv2)
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.06631 0.06678 0.07189 0.07013 0.07246 0.07286
我将采用这些值的方法(不将值加倍,因为这些已经是差异的差异)
vblue <- mean(vv2)
sg2/(sg2+vblue/2) ## 0.8029779
1-(vblup/2/sg2) ## 0.7979965
H^2
估算看起来正确,但H^2c
估算略有不同(0.797对0.809,相对差异为1.5%);我不知道这是否足以引起关注。