2

我正在处理 R 中blme 包中的 blmer() 函数,我的 sim 数据的 sigma.epsilon 不等于 1。但是,当我使用 blmer() 进行估计时,我发现在所有情况下输出残差方差都是 1。这与我最初的情况相反,因此结果并不好。我想知道是否有任何方法可以在这里调整剩余设置?例如通过设置任何先验信息?提前致谢!

我的代码在这里:

# create sim data
N <- 200
n.each <- rep(5,N)
id <- rep(1:N,n.each)
M <- sum(n.each)
intercept <- rep(1, M)
t <- rnorm(M,0,1)
X <- cbind(intercept, t)
Z <- X
p <- ncol(X)
s <- ncol(Z)
true.beta <- c(1,-1)
epsilon <- rnorm(M,0,0.5)
true.theta.mu <- rep(0,s)
onev <- rep(1, s)
true.theta.cov <- rho*onev%*%t(onev)+(1-rho)*diag(1,s)
theta <- mvrnorm(N,true.theta.mu,true.theta.cov)
Theta <- apply(theta,2,rep,n.each)
Y <- X%*%true.beta + rowSums(Z*Theta) + epsilon

# estimation
library(blme)
fm1 <- blmer(Y ~ 1 + t + (1 + t|id), var.prior = "point", cov.prior = "inverse.wishart(df = 99.5, inverse.scale = diag(100,2))", fixef.prior = "normal(cov = diag(1,2))",REML = F,verbose = T)

我的结果(见残差方差为 1.0000):

> summary(fm1)@REmat
 Groups     Name          Variance  Std.Dev.  Corr      
 "id"       "(Intercept)" "0.88994" "0.94337" ""      ""
 ""         "t"           "0.90242" "0.94996" "0.207" ""
 "Residual" ""            "1.00000" "1.00000" ""      ""
4

1 回答 1

3

想我已经从作者那里得到了答案:问题在于选择 var.prior = "point"。

每当我输入 var.prior = "point" 时,它会自动将 sigma.residual 修复为 1。

如果我们想要一个平坦的先验,即不了解信息,我们最好将其设置为 NULL。

感谢作者Dorie先生的热心帮助:)

于 2013-08-01T07:43:51.823 回答