我想使用线性混合模型使用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)
的结果:
答案 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章。