随机效应截距方差为零

4
我正在使用R中的正常的LMM运行功率分析。我有七个输入参数,其中两个我不需要测试(年数和地点数量)。另外5个参数是截距、斜率以及残差、截距和斜率的随机效应标准差。
考虑到我的响应数据(年份是模型中唯一的解释变量)被限制在(-1,+1)之间,截距也落在这个范围内。然而,我发现如果我运行1000次模拟,并给定一个截距和斜率(在10年中被视为恒定),那么如果随机效应截距标准差低于某个值,就会出现很多模拟中随机效应截距标准差为零的情况。如果我增加截距标准差,则似乎可以正确进行模拟(请参见下面的代码,在其中我使用残差SD = 0.25,截距SD = 0.10和斜率SD = 0.05;如果我将截距SD增加到0.2,则可以正确模拟;或者如果我将残差SD降至0.05,则方差参数得到正确模拟)。
这个问题是由我的范围强制转换为(-1,+1)引起的吗?
如果需要,我会附上我的函数和模拟处理的代码:
normaldata <- function (J, K, beta0, beta1, sigma_resid,
                      sigma_beta0, sigma_beta1){
  year <- rep(rep(0:J),K)      # 0:J replicated K times
  site <- rep (1:K, each=(J+1)) # 1:K sites, repeated J years

  mu.beta0_true <- beta0
  mu.beta1_true <- beta1
  # random effects variance parameters:
  sigma_resid_true <- sigma_resid
  sigma_beta0_true <- sigma_beta0
  sigma_beta1_true <- sigma_beta1
  # site-level parameters:
  beta0_true <<- rnorm(K, mu.beta0_true, sigma_beta0_true)
  beta1_true <<- rnorm(K, mu.beta1_true, sigma_beta1_true)

  # data
  y <<- rnorm(n = (J+1)*K, mean = beta0_true[site] + beta1_true[site]*(year),
              sd = sigma_resid_true)
  # NOT SURE WHETHER TO IMPOSE THE LIMITS HERE OR LATER IN CODE:
  y[y < -1] <- -1       # Absolute minimum
  y[y > 1] <- 1         # Absolute maximum

  return(data.frame(y, year, site))
}

处理模拟代码:
vc1 <- as.data.frame(VarCorr(lme.power))
vc2 <- as.numeric(attributes(VarCorr(lme.power)$site)$stddev)


n.sims = 1000
sigma.resid <- rep(0, n.sims)
sigma.intercept <- rep(0, n.sims)
sigma.slope <- rep(0,n.sims)
intercept <- rep(0,n.sims)
slope <- rep(0,n.sims)
signif <- rep(0,n.sims)
for (s in 1:n.sims){
  y.data <- normaldata(10,200, 0.30, ((0-0.30)/10), 0.25, 0.1, 0.05)
  lme.power <- lmer(y ~ year + (1+year | site), data=y.data)   
  summary(lme.power)
  theta.hat <- fixef(lme.power)[["year"]]
  theta.se <- se.fixef(lme.power)[["year"]]
  signif[s] <- ((theta.hat + 1.96*theta.se) < 0) | 
    ((theta.hat - 1.96*theta.se) > 0)        # returns TRUE or FALSE
  signif[s]
  betas <- fixef(lme.power)
  intercept[s] <- betas[1]
  slope[s] <- betas[2]
  vc1 <- as.data.frame(VarCorr(lme.power))
  vc2 <- as.numeric(attributes(VarCorr(lme.power)$site)$stddev)
  sigma.resid[s] <- vc1[4,5]
  sigma.intercept[s] <- vc2[1]
  sigma.slope[s] <- vc2[2]
  cat(paste(s, " ")); flush.console()
}  

power <- mean (signif) # proportion of TRUE
power

summary(sigma.resid)
summary(sigma.intercept)
summary(sigma.slope)
summary(intercept)
summary(slope)

提前感谢您能提供的任何帮助。
1个回答

4
这实际上更像是一个统计问题而不是计算问题,但简短的答案是:你没有犯任何错误,这正如所预期的那样。 rpubs上的这个例子运行了一些正态分布反应的模拟(即它完全对应于LMM软件所假定的模型,因此您担心的约束不是问题)。
左侧直方图是来自具有5组中25个样本,组内和组间方差相等(为1)的模拟;右侧直方图是来自具有3组中15个样本的模拟。
无真实组间变异的空值情况下方差的抽样分布已知具有零点质量或“尖峰”;当样本之间非零但很小和/或样本很小和/或嘈杂时,方差的抽样分布也应在零处具有尖峰,这不足为奇(虽然据我所知还没有理论上的解释)。 这个主题有更多相关信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接