随机影响因子的最小建议组数是多少?


26

我在Rlme4)中使用了混合模型来分析一些重复的度量数据。我有一个反应变量(粪便中的纤维含量)和3种固定作用(体重等)。我的研究只有6位参与者,每位参与者都有16次重复测量(尽管两个只有12次重复)。受试者是蜥蜴,它们在不同的“治疗”中被给予不同的食物组合。

我的问题是:我可以将主体ID用作随机效果吗?

我知道这是纵向混合效应模型中的通常做法,要考虑到受试者的随机采样性质以及以下事实:受试者内部的观察比受试者之间的观察更紧密相关。但是,将受试者ID视为随机效应涉及估计此变量的均值和方差。

  • 由于我只有6个科目(该因子的6个水平),这是否足以准确表征均值和方差?

  • 我对每个主题都进行了多次重复测量的事实在这方面是否有所帮助(我不认为这很重要)?

  • 最后,如果我不能将主体ID用作随机效果,是否可以将其作为固定效果来控制我重复测量的事实?

编辑:我想澄清一下,当我说“我可以”使用主体ID作为随机效果时,我的意思是“这样做是个好主意”。我知道我可以只用2个级别的因子来拟合模型,但是肯定可以辩护吗?我问在什么时候考虑将对象视为随机效应变得明智?似乎文献建议5-6级是一个下限。在我看来,直到有15个以上的因子水平,对随机效应的均值和方差的估计才非常精确。

Answers:


21

简短的回答:是的,您可以将ID用作6个级别的随机效果。

稍长一点的答案:@BenBolker的GLMM常见问题(除其他事项外)在标题“ 我应将因子xxx视为固定因子还是随机因子? ”下说以下内容:

与“现代”混合模型估计(而不是“经典”矩量估计)特别相关的一点是,出于实际目的,必须有合理数量的随机效应级别(例如,块)-大于至少5或6。

因此,您位于下限,但位于其右侧。


12

为了弄清楚多层次模型的最小组数,我看了Gelman和Hill(2007)的《使用回归进行数据分析和多重层次/层次模型》

他们似乎在第11章第5节(第247页)中解决了该主题,他们写道,当组数少于5个时,多层模型通常比经典模型增加的很少。但是,他们似乎写道,应用多级模型几乎没有风险。

同样的作者似乎在第12章第9节(第275-276页)中回到了这一主题。他们在那里写道,关于多级模型的最小组数的建议是错误的。他们再次说,当组的数量很小时,多级模型通常不会比经典模型增加多少。但是,他们还写道,多级模型的表现应不比无池回归好(在这种情况下,无池似乎意味着在古典回归中使用了群体指标)。

在第275-276页,作者针对一组或两组(例如,男性对女性)进行了专门的分节。他们在这里写道,他们通常以经典形式表达模型。但是,他们指出,即使只有一组或两组,多级建模也可能有用。他们写道,使用一两个小组进行多级建模可以简化为经典回归。

由此给我的印象是,经典回归是一系列模型的终结,即多级模型的一种特殊情况。

基于以上所述,我的印象是,当只有两个组时,经典回归和多级建模将返回几乎相同的估计值,并且只使用一个,两个,三个,四个,五个或六个组的多级模型是可以的。

将来,我将尝试使用R代码和少量数据集来修改此答案,以比较使用两组时两种方法获得的估计值。


10

值得的是,我做了一些模拟研究,以查看相对简单的LMM(使用sleepstudy通过提供的数据集lme4)的方差估计的稳定性。第一种方法为主题的ngroups数量生成所有可能的主题组合,并为每种可能的组合重新拟合模型。第二部分采用几个随机的主题子集。

library(lme4)
library(ggplot2)
library(tidyr)

m0 <- lmer(Reaction ~ Days + (1|Subject), data = sleepstudy,
           control = lmerControl(optimizer = "nloptwrap"))
# set the number of factor levels
ngroups <- 3:18 
# generate all possible combinations
combos <- lapply(X = ngroups, 
                 FUN = function(x) combn(unique(sleepstudy$Subject), x)) 

# allocate output (sorry, this code is entirely un-optimized)
out <- list(matrix(NA, ncol(combos[[1]]), 1), matrix(NA, ncol(combos[[2]]), 1),
            matrix(NA, ncol(combos[[3]]), 1), matrix(NA, ncol(combos[[4]]), 1),
            matrix(NA, ncol(combos[[5]]), 1), matrix(NA, ncol(combos[[6]]), 1),
            matrix(NA, ncol(combos[[7]]), 1), matrix(NA, ncol(combos[[8]]), 1),
            matrix(NA, ncol(combos[[9]]), 1), matrix(NA, ncol(combos[[10]]), 1),
            matrix(NA, ncol(combos[[11]]), 1), matrix(NA, ncol(combos[[12]]), 1),
            matrix(NA, ncol(combos[[13]]), 1), matrix(NA, ncol(combos[[14]]), 1),
            matrix(NA, ncol(combos[[15]]), 1), matrix(NA, ncol(combos[[16]]), 1))
# took ~ 2.5 hrs on my laptop, commented out for safety
#system.time(for(ii in 1:length(combos)) {
#    for(jj in 1:ncol(combos[[ii]])) {
#    sls <- sleepstudy[sleepstudy$Subject %in% combos[[ii]][,jj],]
#    out[[ii]][jj] <- attr(VarCorr(update(m0, data = sls))$Subject, 'stddev')
#        }
#    })

# pad with zeros, not all were equal
# from http://stackoverflow.com/questions/11148429/r-convert-asymmetric-list-to-matrix-number-of-elements-in-each-sub-list-diffe
max.len <- max(sapply(out, length))
corrected.list <- lapply(out, function(x) {c(x, rep(NA, max.len - length(x)))})
mat <- do.call(rbind, corrected.list)
mat <- data.frame(t(mat))
names(mat) <- paste0('s',3:18)
mat <- gather(mat, run, value)

ggplot(mat, aes(x = value, fill = run)) + 
    geom_histogram(bins = 60) +
    geom_vline(xintercept = 37.12, linetype =  'longdash', 
               aes(colour = 'original')) +
    facet_wrap(~run, scales = 'free_y') +
    scale_x_continuous(breaks = seq(0, 100, by = 20)) + 
    theme_bw() + 
    guides(fill = FALSE)

黑色虚线是方差的原始点估计,并且各个方面代表不同数量的主题(s3三个主题组成的组,四个主题s4,等等)。 在此处输入图片说明

以及另一种方式:

ngroups <- 3:18
reps <- 500
out2<- matrix(NA, length(ngroups), reps)

for (ii in 1:length(ngroups)) {
    for(j in 1:reps) {
        sls <- sleepstudy[sleepstudy$Subject %in% sample(unique(sleepstudy$Subject), ngroups[i], replace = FALSE),]
        out2[i,j] <- attr(VarCorr(update(m0, data = sls))$Subject, 'stddev')
    }
}
out2 <- data.frame(t(out2))
names(out2) <- paste0('s',3:18)
out2 <- gather(out2, run, value)

ggplot(out2, aes(x = value, fill = run)) + 
    geom_histogram(bins = 60) +
    geom_vline(xintercept = 37.12, linetype =  'longdash', 
               aes(colour = 'original')) +
    facet_wrap(~run, scales = 'free_y') +
    scale_x_continuous(breaks = seq(0, 100, by = 20)) + 
    theme_bw() + 
    guides(fill = FALSE)

在此处输入图片说明

似乎(对于本示例而言)方差直到至少14个主题(如果不是以后)才真正稳定下来。


1
+1。当然,对象数越少,方差估计量的方差越大。但是我不认为这是重要的。问题是,有多少科目可以取得有意义的成绩?如果我们将“不明智”的结果定义为获得零方差,那么在您的仿真中,n = 5或更小情况经常发生。从n = 6或n = 7开始,您几乎永远不会获得精确的0方差估计,即模型正在收敛到非退化解。我的结论是,n = 6是可接受的边界。
变形虫说恢复莫妮卡

1
顺便说一句,这符合rpubs.com/bbolker/4187
变形虫说恢复莫妮卡

8

安格里斯特和皮施克(Angrist and Pischke)的“最无害的计量经济学”一节的标题是“少于42个簇”,他们半开玩笑地说,

因此,按照……关于生命,宇宙和万物的答案是42的格言,我们认为问题是:使用标准聚类调整[类似于GEE中的方差估计量],多少个聚类足以进行可靠的推断?

我的计量经济学讲师用来回答类似您的问题的方式是:“美国是一个自由的国家,您可以做任何您想做的事。但是,如果您想发表论文,则需要能够捍卫自己所做的一切。 ” 换句话说,您可能可以运行具有6个主题的R或Stata或HLM或Mplus或SAS PROC GLIMMIX代码(如果您选择的一个不运行此程序,则切换到这些替代软件包),但您可能会捍卫这种方法和证明渐近测试的困难时期。

我认为默认情况下,将变量包括为随机斜率也意味着将其包括为固定效果,并且如果您只想将其作为具有平均值的随机效果,则需要跳过很多语法箍零。这是软件开发人员为您选择的明智选择。


1
我认为,问题的答案在一定程度上是“一根绳子有多长时间”。但是,我不会对不足15至20的样本估算均值或方差充满信心,因此同一经验法则不适用于随机效应的水平。我从未见过有人在纵向研究中将科目ID作为固定的随机的作用-这是常见的做法吗?
克里斯

除了少数几个混合模型中的对象之外,还没有观察到它们的随机影响,因此您必须从数据中挑出它们,并且可以说,与仅估计均值和均值相比,您需要相对更多的数据来可靠地做到这一点观察到一切时的差异。因此42 vs. 15-20 :)。我想我的意思是随机斜率,因为您在主题ID中正确无误,只不过是随机效果,否则将无法识别。顺便说一句,经济学家不相信随机效应,而是几乎专门发表他们所谓的“固定效应”,即受试者内部估计。
StasK 2012年

2
+1 @StasK很好地回答了一个很难处理的问题。我认为虽然有一些不必要的讽刺,但您可以考虑编辑答案,以便对OP更加尊重。
Michael R. Chernick 2012年

@Michael,您可能是正确的,这是一个喜怒无常的答案,而且可能不必要。但是,OP接受了他们想听到的答案,因此他得到了解决方案。一个更严肃的答案将指向一个好的模拟证据或一个更高阶的渐近分析,但是不幸的是,我不知道这些参考文献。
StasK 2012年

3
就其价值而言,我认为“ 42”幻数并不是关于随机效应是否合理的问题,而是什么时候人们可以不用担心有限大小的校正(例如,考虑有效的分母自由度/ Kenward-Roger校正/其他类似方法)。
本·博克

7

您也可以使用贝叶斯混合模型-在这种情况下,在计算95%预测可信区间时会充分考虑随机效应估计中的不确定性。例如,新的R包brms和函数brm可以很容易地从lme4频繁混合模型过渡到贝叶斯模型,因为它具有几乎相同的语法。


4

我不会使用只有6个级别的随机效果模型。有时可以使用许多统计程序来运行使用6级随机效应的模型,并且有时给出无偏估计,但是:

  1. 我认为在统计界中有一个任意的共识,即10-20是最小数字。如果您想发表研究成果,建议您在没有统计评论的情况下寻找期刊(或使用相当复杂的语言证明您的决定是正确的)。
  2. 由于集群太少,集群之间的方差很可能估算不佳。聚类方差之间的差估计通常会转化为对感兴趣系数的标准误差的差估计。(随机效应模型依赖于理论上达到无穷大的簇数)。
  3. 通常,这些模型根本无法收敛。您是否尝试过运行模型?我对模型收敛的每个主题只有12-16个度量感到惊讶。当我设法使这种模型收敛时,我每个群集都有数百次测量。

该问题在该领域的大多数标准教科书中都得到了解决,您已经在问题中解决了这些问题。我认为我没有给您任何新信息。


是否出于与技术含量相关的原因而否决了该投票?
N Brouwer

您正在处理哪种类型的数据?我不确定为什么您会惊讶地发现该模型将以每个人12-16个度量收敛。我无法评论结果模型中的偏差,但是我从来没有在lme4混合模型中遇到收敛问题,而且我经常以与OP相似的样本大小来运行它们(我也在研究生物学数据集)。
RTbecard

1

自原始问题以来已经有很长时间了,但是我想我可能会增加一些与模型选择有关的观点。

1-只要确定了模型(即您在参数空间中具有自由度),您就可以尝试进行拟合。根据优化方法,模型可能会收敛,也可能不会收敛。无论如何,我都不会尝试包含超过1或2个随机效果,并且绝对不会包含超过1个跨层交互。在这里提出的问题的特定情况下,如果我们怀疑蜥蜴的特定特征(例如年龄,大小等)与治疗/测量特征组6的相互作用可能不足以进行足够精确的估计。

2-几个答案提到,收敛可能是一个问题。但是我的经验是,尽管社会科学数据由于测量问题而具有巨大的收敛性问题,但生命科学,尤其是生物化学重复测量的标准误差要小得多。这完全取决于数据生成过程。在社会和经济数据中,我们必须在各种抽象级别上进行工作。在生化和最肯定的天文数据测量中,误差较小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.