如何拟合响应变量在0到1之间的混合模型?


15

我正在尝试使用lme4::glmer()二项式广义混合模型(GLMM)来拟合因变量,该因变量不是二进制的,而是介于零和一之间的连续变量。可以将这个变量视为一种可能性;实际上,这人类受试者报告的概率(在我帮助分析的实验中)。也就是说,它不是 “离散”分数,而是连续变量。

我的glmer()电话无法正常工作(请参阅下文)。为什么?我能做什么?

稍后编辑:我的以下回答比该问题的原始版本更笼统,因此我也将该问题修改为更笼统。


更多细节

显然,不仅可以对二进制DV使用逻辑回归,而且还可以对零和一之间的连续DV使用逻辑回归。的确,当我跑步时

glm(reportedProbability ~ a + b + c, myData, family="binomial")

我收到警告消息

Warning message:
In eval(expr, envir, enclos) : non-integer #successes in a binomial glm!

但是非常合理的拟合(所有因素都是分类的,因此我可以轻松地检查模型预测是否接近跨学科平均水平,并且接近)。

但是,我实际要使用的是

glmer(reportedProbability ~ a + b + c + (1 | subject), myData, family="binomial")

它给了我同样的警告,返回了一个模型,但是这个模型显然有很大的缺陷。固定效应的估计值与固定效应的估计值相距甚远glm()。(而且我需要包含glmerControl(optimizer="bobyqa")glmer通话中,否则它根本不会收敛。)


1
首先转换概率如何?用logit变换可以得到更接近正态分布的东西吗?还是arcsin-sqrt?那将是我的偏好,而不是使用glmer。或者在黑客解决方案中,您也可以尝试为每个观察值添加随机效果,以解决由于权重选择而导致的色散不足。
Aaron

谢谢。是的,我可以登录DV,然后使用高斯混合模型(lmer),但这也是一种技巧,我读过,不建议这样做。每次观察我都会尝试随机效果!目前,我正在尝试Beta混合模型;lme4无法处理,但是glmmadmb可以。运行时glmmadmb(reportedProbability ~ a + b + c + (1 | subject), myData, family="beta"),我得到正确的拟合度和合理的置信区间,但是收敛失败警告:-/试图弄清楚如何增加迭代次数。Beta版可能对我有用,因为我没有DV = 0或DV = 1的情况。
变形虫说恢复莫妮卡

我不知道,但对于glm,这可能会有所帮助:stats.stackexchange.com/questions/164120/…

1
@Aaron:我尝试添加+ (1 | rowid)到glmer调用中,这会产生稳定的估计值和稳定的置信区间,而与我的体重选择无关(我尝试了100和500)。我还尝试在logit(reportedProbability)上运行lmer,得到的东西几乎完全相同。因此,这两种解决方案似乎都能很好地工作!带有glmmadmb的Beta MM也提供了非常接近的结果,但是由于某些原因无法完全收敛并且需要永远运行。考虑发布列出这些选项的答案,并解释一些区别和优点/缺点!(我提到的置信区间全是Wald。)
变形虫说莫妮卡(Reonica)Monica

1
他们绝对确定自己的值(如0.9),还是“误差容限”呢?您可以假设不同主题所报告的置信度同样精确吗?

Answers:


21

从没有随机效应的简单情况开始是有意义的。

有四种方法可以处理表现为分数或概率的连续零对一响应变量(这是我们在该主题上最典型/最受赞誉的主题,但不幸的是,此处未讨论全部四个选项):

  1. p=/ññnñ

    glm(p ~ a+b+c, myData, family="binomial", weights=n)
  2. pp01

    betareg(p ~ a+b+c, myData)
  3. Logit转换响应并使用线性回归。通常不建议这样做。

    lm(log(p/(1-p)) ~ a+b+c, myData)
  4. 拟合二项式模型,然后考虑过度分散来计算标准误差。可以通过多种方式计算标准误差:

    • (a)通过过度分散估计(一个两个)来缩放标准误差。这称为“准二项式” GLM。

    • (b)通过夹心估计器()得出的鲁棒标准误差。在计量经济学中,这称为“分数对数”。


    (a)和(b)是不相同的(请参阅此评论以及本书的3.4.1和3.4.2节,以及本SO帖子以及本节本节),但倾向于给出相似的结果。选项(a)的实现glm方式如下:

    glm(p ~ a+b+c, myData, family="quasibinomial")

随机效果可以使用相同的四种方法。

  1. 使用weights参数():

    glmer(p ~ a+b+c + (1|subject), myData, family="binomial", weights=n)

    根据上面的第二个链接,对过度分散进行建模可能是一个好主意,请参见此处(以及下面的#4)。

  2. 使用Beta混合模型:

    glmmadmb(p ~ a+b+c + (1|subject), myData, family="beta")

    要么

    glmmTMB(p ~ a+b+c + (1|subject), myData, 
            family=list(family="beta",link="logit"))

    如果响应数据中存在精确的零或一,则可以在中使用零/一膨胀的beta模型glmmTMB

  3. 使用响应的logit转换:

    lmer(log(p/(1-p)) ~ a+b+c + (1|subject), myData)
  4. 在二项式模型中考虑过度分散。这使用了不同的技巧:为每个数据点添加随机效果:

    myData$rowid = as.factor(1:nrow(myData))
    glmer(p ~ a+b+c + (1|subject) + (1|rowid), myData, family="binomial",
          glmerControl(optimizer="bobyqa"))

    由于某些原因,这会因为glmer()抱怨非整数p而无法正常工作,并产生无用的估计。我想出的一个解决方案是使用伪常量weights=k,并确保该常量p*k始终为整数。这需要四舍五入,p但是通过选择k足够大的值就没关系了。结果似乎并不取决于的值k

    k = 100
    glmer(round(p*k)/k ~ a+b+c + (1|subject) + (1|rowid), myData, 
          family="binomial", weights=rowid*0+k, glmerControl(optimizer="bobyqa"))

    以后的更新(2018年1月):这可能是无效的方法。请参阅此处的讨论。我必须对此进行更多调查。


在我的特定情况下,选项#1不可用。

选项2的速度非常慢,并且存在收敛问题:运行glmmadmb需要五到十分钟(并且仍然抱怨它没有收敛!),而lmer工作瞬间却glmer要花几秒钟。 更新:glmmTMB按照@BenBolker的评论中的建议进行了尝试,它的运行速度几乎与一样glmer,而没有任何收敛问题。这就是我将要使用的。

选项#3和#4产生非常相似的估计值和非常相似的Wald置信区间(通过获得confint)。我不是#3的忠实拥though,因为它有点作弊。#4感觉有些。

非常感谢@Aaron,他在评论中将我指向了#3和#4。


1
答案很好,解释得很好,并且与无随机效应模型有关。我不会称其为#3(转换)作弊,但是这类转换在此类分析中非常普遍。我要说的是,#3和#4都对数据分布的关系以及均值和方差之间的关系都作了假设,而只是因为#4在数据的规模上建模被收集并不意味着这些假设会更好。
亚伦(Aaron)

1
#3假定概率的对数是正常的,且方差恒定,而#4假定方差与p(1-p)成正比。从适合性的描述来看,它们似乎足够相似,没有太大关系。#3几乎可以肯定是更标准的(取决于您的听众),因此,如果诊断合理,那是我希望使用的诊断方法。
亚伦(Aaron)

1
另一种可能性是使用glmmTMB ; devtools::install_github("glmmTMB/glmmTMB",sub="glmmTMB")使用安装后,glmmTMB(p ~ a+b+c + (1|subject), myData, family=list(family="beta",link="logit"))应该可以使用...
Ben Bolker

@BenBolker谢谢!是否有理由更喜欢glmmTMB而不是glmmADMB(对于Beta版)?反之亦然?这些软件包之一是更新或更积极的?除此之外,我想问一下答案中列出的方法中的哪种方法(logit变换后的高斯glmm,βglmm或具有(1 | rowid)项的二项式glmm),您发现通常更可取吗?
变形虫说恢复莫妮卡

1
如果可行的话,我更喜欢beta GLMM-这是一种统计模型,旨在衡量协变量/组之间的比例变化。尽管还不那么成熟,但它glmmTMB比更快,更稳定glmmADMB,并且(稍微)处于更活跃的开发环境。
本·博克
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.