从统计上看,这略有些深.基于重采样的推理有两种基本方法:
- bootstrapping(参数或非参数)模拟所需数量的采样分布,从中可以计算confidence intervals.(您还可以通过倒置置信度区间来计算双尾p值,其结果为
prob_lt_0 = mean(bootsamp<0); p_val = 2*min(prob_lt_0, 1-prob_lt_0)
.)事后比较稍微复杂一些,因为它们不仅涉及比较测试,还涉及某种多重比较校正(Tukey等).
- permutation tests模拟检验统计量在零假设下的抽样分布,得到p值.
ParametricBootstrapping是一种方便的重采样方法,特别是如果我们有复杂的分组 struct (空间/时间或交叉随机效应),这使得重采样独立组变得困难,或者如果我们正在判断GLMM,其中剩余Bootstrapping不起作用.然而,它假设模型是"正确的",这在这里失败了,因为您不想依赖条件分布的正态分布.
library(lmerTest)
library(lmeresampler)
ss <- transform(sleepstudy, oddsub = factor((as.numeric(Subject) %% 2 == 1)))
fm1 <- lmer(Reaction ~ Days + oddsub + (Days | Subject), ss)
set.seed(101)
boot1 <- reb_bootstrap(fm1,
.f = fixef,
B = 1000,
reb_type = 2)
## not sure why reb_bootstrap seems to ignore the .f specification?
## but we get something useful anyway
confint(boot1, type = "perc")
## 1 beta1 253. 232. 273. perc 0.95
## 2 beta2 10.5 7.24 13.5 perc 0.95
## 3 beta3 -3.56 -32.3 26.0 perc 0.95
pval <- function(x) { plt0 <- mean(x<0); 2*min(plt0, 1-plt0) }
apply(boot1$replicates[,1:3], 2, pval)
## beta1 beta2 beta3
## 0.000 0.000 0.802
您可以进行置换测试,但您必须通过比较嵌套模型(例如,完整模型与没有Days
效果的模型),一次一个项目地进行测试:
library(predictmeans)
fm0 <- update(fm1, . ~ . - Days)
p1 <- permlmer(fm0, fm1)
Data: ss
Models:
lmer0: Reaction ~ oddsub + (Days | Subject)
lmer1: Reaction ~ Days + oddsub + (Days | Subject)
npar AIC BIC logLik deviance Chisq Df Pr(>Chisq) Perm-p
lmer0 6 1787.4 1806.6 -887.70 1775.4
lmer1 7 1765.9 1788.2 -875.94 1751.9 23.537 1 1.2256e-06 0.003
对于权力,我可能只会假设正态分布进行分析,然后将其视为略微乐观的估计;无论如何,权力分析总是猜测/近似.
另外,人们建议其他 Select (稳健的LMM、序数模型等)的部分原因是,这些都是一种麻烦.