R中的多项Logistic多层模型

Rap*_*ael 25 r multi-level multinomial

问题:我需要估计一组多项逻辑多级模型,但找不到合适的R包.评估此类模型的最佳R包是什么?STATA 13最近将这个功能添加到他们的多级混合效果模型中 - 所以估计这些模型的技术似乎是可用的.

细节:许多研究问题需要估计多项Logistic回归模型,其中结果变量是分类的.例如,生物学家可能有兴趣研究哪种树木(例如松树,枫树,橡树)受酸雨影响最大.市场研究人员可能会对客户的年龄与Target,Safeway或沃尔玛的购物频率之间是否存在关系感兴趣.这些情况的共同点是结果变量是分类的(无序的),而多项逻辑回归是优选的估计方法.就我而言,我正在调查人类迁移类型的差异,结果变量(mig)编码0 =未迁移,1 =内部迁移,2 =国际迁移.这是我的数据集的简化版本:

migDat=data.frame(hhID=1:21,mig=rep(0:2,times=7),age=ceiling(runif(21,15,90)),stateID=rep(letters[1:3],each=7),pollution=rep(c("high","low","moderate"),each=7),stringsAsFactors=F)

   hhID mig age stateID pollution
1     1   0  47       a      high
2     2   1  53       a      high
3     3   2  17       a      high
4     4   0  73       a      high
5     5   1  24       a      high
6     6   2  80       a      high
7     7   0  18       a      high
8     8   1  33       b       low
9     9   2  90       b       low
10   10   0  49       b       low
11   11   1  42       b       low
12   12   2  44       b       low
13   13   0  82       b       low
14   14   1  70       b       low
15   15   2  71       c  moderate
16   16   0  18       c  moderate
17   17   1  18       c  moderate
18   18   2  39       c  moderate
19   19   0  35       c  moderate
20   20   1  74       c  moderate
21   21   2  86       c  moderate
Run Code Online (Sandbox Code Playgroud)

我的目标是估计年龄(自变量)对(1)内部迁移与非迁移,(2)国际迁移与非迁移,(3)国内迁移与国际迁移的可能性的影响.另一个复杂因素是我的数据在不同的聚合水平上运行(例如,污染在州一级运行),我也有兴趣预测空气污染(污染)对开始某种特定类型运动的可能性的影响.

笨重的解决方案:人们可以通过将每个模型的数据集减少到仅两种迁移类型来估计一组单​​独的逻辑回归模型(例如,模型1:仅编码mig = 0和mig = 1的情况;模型2:仅编码mig的情况= 0且mig = 2;模型3:仅编码mig = 1且mig = 2的情况.这样一个简单的多级逻辑回归模型可以用lme4估算,但这种方法不太理想,因为它没有适当考虑遗漏情况的影响.第二种解决方案是使用R2MLwiN包在MLWiN到R中运行多项逻辑多级模型.但由于MLWiN不是开源的,并且生成的对象难以使用,我宁愿避免使用此选项.基于全面的互联网搜索,似乎对这些模型有一些需求,但我不知道一个好的R包.因此,如果运行此类模型的一些专家可以提供建议并且如果有多个包可能表明某些优点/缺点,那将是很好的.我相信这些信息对于多个R用户来说将是一个非常有用的资源.谢谢!!

最好,拉斐尔

Rap*_*ael 27

通常有两种方法可以将分类变量的多项式模型与J组拟合:(1)同时估计J-1对比度; (2)估算每个对比度的单独logit模型.

产生这两种方法效果相同吗?不,但结果往往相似

哪种方法更好?同时拟合更精确(见下文解释原因)

为什么有人会使用单独的logit模型呢?(1)lme4包装没有同时装配多项式模型的程序,也没有其他多级R包可以做到这一点.因此,如果有人想要估计R中的多级多项式模型,那么单独的logit模型是目前唯一可行的解​​决方案.(2)正如一些强大的统计学家所论证的那样(Begg和Gray,1984; Allison,1984,p.46-47),单独的logit模型更加灵活,因为它们允许每个对比度的模型方程的独立规范.

使用单独的logit模型是否合法?是的,有一些免责声明.该方法称为"Begg和灰色近似".Begg和Gray(1984,p.16)表明,这种"个性化方法非常有效".然而,存在一些效率损失,并且Begg和灰色近似产生更大的标准误差(Agresti 2002,第274页).因此,使用该方法获得显着结果更加困难,并且结果可以被认为是保守的.当参考类别很大时,这种效率损失最小(Begg和Gray,1984; Agresti,2002).采用Begg和灰度近似(不是多级)的R包包括mlogitBMA(Sevcikova和Raftery,2012).


为什么一系列单独的logit模型不精确? 在我的初始示例中,我们有一个变量(migration),它可以有三个值A(无迁移),B(内部迁移),C(国际迁移).只有一个预测变量x(年龄),多项式模型被参数化为一系列二项式对比如下(Long and Cheng,2004 p.277):

Eq. 1:  Ln(Pr(B|x)/Pr(A|x)) = b0,B|A + b1,B|A (x) 
Eq. 2:  Ln(Pr(C|x)/Pr(A|x)) = b0,C|A + b1,C|A (x)
Eq. 3:  Ln(Pr(B|x)/Pr(C|x)) = b0,B|C + b1,B|C (x)
Run Code Online (Sandbox Code Playgroud)

对于这些对比,必须遵循以下等式:

Eq. 4: Ln(Pr(B|x)/Pr(A|x)) + Ln(Pr(C|x)/Pr(A|x)) = Ln(Pr(B|x)/Pr(C|x))
Eq. 5: b0,B|A + b0,C|A = b0,B|C
Eq. 6: b1,B|A + b1,C|A = b1,B|C
Run Code Online (Sandbox Code Playgroud)

问题在于这些方程式(公式4-6)在实践中不能完全保持,因为系数是基于略微不同的样本估计的,因为仅使用来自两个对比组的情况而来自第三组的情况被省略.同时估计多项式对比的程序确保方程式.持有4-6(Long和Cheng,2004,第277页).我不确切知道这种"同时"模型的解决方式是什么 - 也许有人可以提供解释?同时拟合多级多项式模型的软件包括MLwiN(Steele 2013,第4页)和STATA(xlmlogit命令,Pope,2014).


参考文献:

Agresti,A.(2002).分类数据分析(第2版).新泽西州霍博肯:John Wiley&Sons.

Allison,PD(1984).事件历史分析.加利福尼亚州千橡市:Sage出版社.

Begg,CB,&Gray,R.(1984).使用个性化回归计算多重逻辑回归参数.Biometrika,71(1),11-18.

Long,SJ,&Cheng,S.(2004).分类结果的回归模型.在M. Hardy和A.Bryman(Eds.),Handbook of data analysis(pp.258-285)中.伦敦:SAGE Publications,Ltd.

教皇,R.(2014年).在聚光灯下:满足Stata的新xlmlogit命令.Stata News,29(2),2-3.

Sevcikova,H.,&Raftery,A.(2012).使用Begg和Gray近似估计多项Logit模型.

Steele,F.(2013).模块10:标称响应概念的单级和多级模型.英国布里斯托尔:多级建模中心.

  • 这是正确的并且非常有用。单独运行模型的两个额外好处是:(1)每个对比的计算到输出时间更短(特别有助于更大的数据集和更复杂的模型)和 (2) 运行单独的模型鼓励检查可能被忽略的对比(而不是使用单个参考类别)。 (2认同)

Way*_*yne 12

一个较老的问题,但我认为最近出现了一个可行的选项brms,它使用贝叶斯Stan程序来实际运行模型例如,如果您想对数据运行多项逻辑回归iris:

b1 <- brm (Species ~ Petal.Length + Petal.Width + Sepal.Length + Sepal.Width,
           data=iris, family="categorical",
           prior=c(set_prior ("normal (0, 8)")))
Run Code Online (Sandbox Code Playgroud)

并且要获得序数回归 - iris当然不适合- 你可以切换family="categorical"family="acat"(cratio或者sratio,取决于你想要的序数回归的类型)并确保因变量是ordered.

根据Raphael的评论澄清:此brm调用将您的公式和参数编译成Stan代码.Stan将其编译为C++并使用您的系统的C++编译器 - 这是必需的.例如,在Mac上,您可能需要安装免费的开发人员工具来获取C++.关于Windows不确定.Linux默认情况下应该安装C++.)

根据Qaswed的评论澄清:brms使用R公式轻松处理多级模型,为(1 | groupvar)组添加组(随机)拦截,(1 + foo | groupvar)添加随机拦截和斜率等.


Hen*_*ugh 0

这是一个实现(不是我自己的)。我只是解决这个代码。另外,这样您就能真正了解幕后发生的事情。

http://www.nhsilbert.net/docs/rcode/multilevel_multinomial_logistic_regression.R