在confint选项中使用配置文件和引导方法,使用glmer模型

时间:2016-05-26 16:48:11

标签: r lme4 mixed-models

我正在使用带有logit链接的glmer来获得高斯误差模型。

当我尝试使用配置文件或使用confint选项的启动方法获取置信区间时,我获得了使用配置文件可能性的错误,并使用自举:

> Profile: Computing profile confidence intervals ... Error in
> names(opt) <- profnames(fm, signames) :    'names' attribute [2] must
> be the same length as the vector [1]
> 
> Boot: Error in if (const(t, min(1e-08, mean(t, na.rm = TRUE)/1e+06)))
> { :    missing value where TRUE/FALSE needed In addition: Warning
> message: In bootMer(object, FUN = FUN, nsim = nsim, ...) :   some
> bootstrap runs failed (9999/10000)

我已经查看了有关如何克服配置文件问题的在线建议,通过安装lme4开发工具,我也从数据集中删除了所有NA。但是,在这两种情况下,我仍然收到相同的两条错误消息。

是否有人能够就这是否是lme4问题提供任何帮助,或者它是否更为基础。

以下是生成前20个观测值和模型格式的代码:

df2 <- data.frame(
prop1 = c(0.46, 0.471, 0.458, 0.764, 0.742, 0.746, 0.569, 0.45,    0.491,    0.467, 0.464, 
        0.556, 0.584, 0.478, 0.456, 0.46, 0.493, 0.704, 0.693, 0.651), 
prop2 = c(0.458, 0.438, 0.453, 0.731, 0.738, 0.722, 0.613, 0.498, 0.452, 0.451, 0.447,
        0.48, 0.576, 0.484, 0.473, 0.467, 0.467, 0.722, 0.707, 0.709),
site = c(1,1,2,3,3,3,4,4,4,4,4,5,5,5,6,6,7,8,8,8)
)
df2$site <- factor(df2$site)

model <- glmer(prop2 ~ prop1 + (1|site), 
           data=df2, family=gaussian(link="logit"))
summary(model)

响应是比例(0,1),协变量也是如此。我已经使用logit链接来保持响应的预期值绑定在(0,1)之间,而不是与正常绑定,尽管这个数据非常适合LMM。

我还将分析两个比例之间的差异,我期望一些差异(和拟合值)违反(0,1)边界 - 所以我将使用高斯误差的身份链接对此进行建模,或者缩放差异上的logit链接(将其强制为(0,1))。

另外,考虑到每个站点可能只有1-5个记录,我自然会考虑运行线性回归或GLM(比例),并在建模过程中将站点视为固定效果,如果估计随机效应方差为零(或非常小)。

2 个答案:

答案 0 :(得分:0)

对于您的示例,它适用于bootstrap:

confint(model, method = "boot")
#                   2.5 %      97.5 %
# .sig01      12.02914066 44.71708844
# .sigma       0.03356588  0.07344978
# (Intercept) -5.26207985  1.28669024
# prop1        1.01574201  6.99804555

考虑到在您提出的模型下,虽然您的估计值始终在0到1之间,但预计会观察到低于0且大于1的值。

答案 1 :(得分:0)

您已经确定了当前版本的lme4的错误,现在部分修复了Github(它适用于method="boot")。如果安装了开发工具,(devtools::install_github("lme4/lme4")应该可以安装它。)

library(lme4)
fit_glmer <- glmer(prop2 ~ prop1 + (1|site), 
       data=df2, family=gaussian(link="logit"))

分析/配置文件置信区间仍然不起作用,但有一个更有意义的错误:

try(profile(fit_glmer))
## Error in profile.merMod(fit_glmer) : 
##   can't (yet) profile GLMMs with non-fixed scale parameters

Bootstrapping确实有效。有很多警告,很多改装尝试都失败了,但我希望这是因为提供的数据集很小。

bci <- suppressWarnings(confint(fit_glmer,method="boot",nsim=200))

我想提出其他几个选择。您可以使用glmmADMBglmmTMB,这些平台还允许您使用Beta分布来建模比例。我会考虑通过“融合”数据来建模比例类型之间的差异(以便有一个prop列和一个prop_type列)并包含prop_type作为预测器(可能有一个个体水平的随机效应,确定哪个比例是在同一个体上测量的)...

library(glmmADMB)
fit_ADMB <- glmmadmb(prop2 ~ prop1 + (1|site), 
       data=df2, family="gaussian",link="logit")
## warning message about 'sd.est' not defined -- only a problem
## for computing standard errors of predictions, I think?

library(glmmTMB)
fit_TMB <- glmmTMB(prop2 ~ prop1 + (1|site), 
       data=df2, family=list(family="gaussian",link="logit"))

听起来您的数据可能更适合Beta模型吗?

fit_ADMB_beta <- glmmadmb(prop2 ~ prop1 + (1|site), 
       data=df2, family="beta",link="logit")
fit_TMB_beta <- glmmTMB(prop2 ~ prop1 + (1|site), 
       data=df2,
       family=list(family="beta",link="logit"))

比较结果(比它需要的更漂亮)

library(broom)
library(plyr)
library(dplyr)
library(dwplot)

tab <- ldply(lme4:::namedList(fit_TMB_beta,
                        fit_ADMB_beta,
                        fit_ADMB,
                        fit_TMB,
                        fit_glmer),
      tidy,.id="model") %>%
    filter(term != "(Intercept)")
dwplot(tab) + 
    facet_wrap(~term,scale="free",
                       ncol=1)+theme_set(theme_bw())

enter image description here