在lme4包中使用混合模型引导失败

时间:2015-05-14 11:04:47

标签: r

我想使用线性混合模型使用bootMer()包的lme4功能,并使用boot.ci通过参数化自举获得95%CI,并且已经获得了类型的警告"In bootMer(object, bootFun, nsim = nsim, ...) : some bootstrap runs failed (30/100)”。 我的代码是:

> lmer(LLA ~ 1 +(1|PopID/FamID), data=fp1) -> LLA
> LLA.boot <- bootMer(LLA, qst, nsim=999, use.u=F, type="parametric")
Warning message:
In bootMer(LLA, qst, nsim = 999, use.u = F, type = "parametric") :
  some bootstrap runs failed (3/999)
> boot.ci(LLA.boot,   type=c("norm", "basic", "perc"))
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 996 bootstrap replicates

CALL : 
boot.ci(boot.out = LLA.boot, type = c("norm", "basic", "perc"))

Intervals : 
Level      Normal              Basic              Percentile     
95%   (-0.2424,  1.0637 )   (-0.1861,  0.8139 )   ( 0.0000,  1.0000 )  
Calculations and Intervals on Original Scale

我的问题是为什么Bootstrap失败了几个值?使用boot.ci在95%时估计的置信区间显示负值,但bootstrap生成的值数组中没有负值。'

plot(LLA.boot)的结果:

enter image description here

1 个答案:

答案 0 :(得分:3)

对于稍微困难或不稳定的模型而言,由于数值原因,一些参数自举运行可能无法收敛,这并不奇怪。您应该能够通过attr(LLA.boot,"boot.fail.msgs")检索特定的错误消息(这确实应该记录在案,但不是......)一般来说,如果失败分数,我不会担心它太多非常小(在这种情况下);如果很大(比如说> 5-10%)我会重新访问我的数据和模型,并试着看看是否有其他错误以这种方式表现出来。

至于置信区间:"basic""norm"方法分别使用法线和偏差校正的法线近似值,因此间隔应超出范围的范围并不奇怪计算值。由于你的功能是

Qst <- function(x){
   uu <- unlist(VarCorr(x))
   uu[2]/(uu[3]+uu[2])}
}

其可能的范围是0到1,并且您的百分位引导CI显示此范围已达到。如果你的模型完全没有信息,那么Qst的分布将是均匀的(平均值= 0.5,sd = sqrt(1/12)= 0.288)并且CI的正态近似值

> 0.5+c(-1,1)*1.96*sqrt(1/12)
[1] -0.06580326  1.06580326

上端与您的正常CI位于同一位置,但您的下限甚至更小,这表明您的估算的采样分布中甚至可能存在一些双峰性(这可以通过您发布的分布图确认)。无论如何,我怀疑底线是您的置信区间(无论如何计算)是如此之宽以至于它们告诉您,您的数据几乎没有提供有关Qst的值的实用信息......特别是,看起来你的大多数bootstrap重复都找到单数拟合,其中一个或另一个方差估计为零。我猜你的数据集不够大,无法准确估计这些差异。

有关如何计算法线和偏差校正的正态近似的更多信息,请参阅boot:::basic.ci中引用的boot:::norm.ci?boot.ci或Davison和Hinkley的第5章。