41

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

细节:许多研究问题需要估计结果变量是分类的多项逻辑回归模型。例如,生物学家可能有兴趣调查哪种树木(例如松树、枫树、橡树)受酸雨的影响最大。市场研究人员可能会对客户年龄与在 Target、Safeway 或 Walmart 购物的频率之间是否存在关系感兴趣。这些案例的共同点是结果变量是分类的(无序的),多项逻辑回归是首选的估计方法。就我而言,我正在调查人类迁移类型的差异,结果变量 (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

我的目标是估计年龄(自变量)对(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 用户来说将是一个非常有用的资源。谢谢!!

最好的,拉斐尔

4

7 回答 7

32

用 J 组拟合分类变量的多项式模型一般有两种方法:(1)同时估计 J-1 对比;(2)为每个对比估计一个单独的 logit 模型。

这两种方法产生相同的结果吗?不,但结果通常相似

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

那么为什么有人会使用单独的 logit 模型呢?(1) 该lme4包没有同时拟合多项式模型的例程,并且没有其他多级 R 包可以做到这一点。因此,如果有人想在 R 中估计多级多项式模型,那么单独的 logit 模型是目前唯一实用的解决方案。 (2) 正如一些强大的统计学家所说的 (Begg and Gray, 1984; Allison, 1984, p. 46-47),单独的 logit模型更加灵活,因为它们允许为每个对比独立指定模型方程。

使用单独的 logit 模型是否合法?是的,有一些免责声明。这种方法称为“Begg 和 Gray Approximation”。Begg 和 Gray (1984, p. 16) 表明这种“个性化方法非常有效”。但是,存在一些效率损失,并且 Begg 和 Gray 近似会产生更大的标准误差(Agresti 2002,第 274 页)。因此,使用这种方法更难获得显着的结果,结果可以被认为是保守的。当参考类别很大时,这种效率损失最小(Begg 和 Gray,1984;Agresti 2002)。采用 Begg 和 Gray 近似(不是多级)的 R 包包括mlogitBMA(Sevikova 和 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)

对于这些对比,以下等式必须成立:

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

问题是这些方程(方程 4-6)在实践中并不完全成立,因为系数是根据稍微不同的样本估计的,因为只使用了两个对比组的案例,而省略了第三组的案例。同时估计多项式对比的程序确保方程。4-6 保持 (Long 和 Cheng, 2004 p. 277)。我不知道这种“同时”模型求解是如何工作的——也许有人可以提供解释?同时拟合多级多项模型的软件包括 MLwiN(Steele 2013,第 4 页)和 STATA(xlmlogit 命令,Pope,2014)。


参考:

Agresti, A. (2002)。分类数据分析(第 2 版)。新泽西州霍博肯:约翰威利父子公司。

艾莉森,PD (1984)。事件历史分析。加利福尼亚州千橡市:Sage Publications。

Begg, CB 和 Gray, R. (1984)。使用个性化回归计算多分类逻辑回归参数。生物计量学,71(1),11-18。

Long, SJ, & Cheng, S. (2004)。分类结果的回归模型。在 M. Hardy & A. Bryman (Eds.),数据分析手册 (pp. 258-285)。伦敦:SAGE Publications, Ltd.

教皇,R.(2014 年)。聚光灯下:了解 Stata 的新 xlmlogit 命令。统计新闻,29(2),2-3。

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

斯蒂尔,F.(2013 年)。模块 10:名义响应概念的单级和多级模型。英国布里斯托尔:多层次建模中心。

于 2014-05-21T22:44:53.643 回答
17

一个较老的问题,但我认为最近出现了一个可行的选择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)")))

并且为了得到一个序数回归——当然不适合iris——你需要切换family="categorical"family="acat"(或cratiosratio,取决于你想要的序数回归的类型)并确保因变量是ordered

根据 Raphael 的评论进行澄清:此brm调用将您的公式和参数编译为Stan代码。Stan 将其编译成 C++ 并使用您系统的 C++ 编译器——这是必需的。例如,在 Mac 上,您可能需要安装免费的开发者工具才能获得 C++。不确定Windows。Linux 应该默认安装 C++。)

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

于 2016-06-18T01:17:03.460 回答
2

我很困惑这种技术被描述为“标准”和“等效”,尽管它很可能是一个很好的实用解决方案。(我想我最好看看 Allison 和 Dobson & Barnett 的参考资料)。对于简单的多项式情况(无聚类、重复测量等),Begg 和 Gray (1984) 建议在许多情况下使用针对参考类别的 k-1 二项式 logit 作为近似值(尽管是一个很好的),以达到成熟的多项式 logit。他们在使用单个参考类别时表现出一些效率损失,尽管对于使用单个高频基线类别作为参考的情况来说,效率损失很小。Agresti (2002: p. 274) 提供了一个例子,即使基线类别占 5 个类别示例中 219 个案例的 70% 以上,标准误差也会小幅增加。

也许这没什么大不了的,但是我看不出添加第二层随机性会如何使近似值变得更好。

参考
Agresti, A. (2002)。分类数据分析。新泽西州霍博肯:威利。

Begg, CB 和 Gray, R. (1984)。使用个性化回归计算多分类逻辑回归参数。生物计量学,71(1),11-18。

于 2014-11-23T23:40:31.900 回答
1

我会推荐你​​使用包“mlogit”

于 2014-05-17T16:29:52.820 回答
1

我正在处理同样的问题,我发现的一种可能的解决方案似乎求助于多项式逻辑模型的泊松(对数线性/计数),如本邮件列表、这些漂亮的幻灯片或 Agresti (2013: 353-356) 中所述。因此,应该可以glmer(... family=poisson)将包中的函数lme4与一些数据聚合一起使用。

参考:
Agresti, A. (2013) 分类数据分析。新泽西州霍博肯:威利。

于 2015-06-11T09:36:44.023 回答
1

由于我有同样的问题,我最近遇到了这个问题。我发现这个包叫做ordinal有这个累积链接混合clmm2模型函数brm

基本上,您需要设置链接函数(例如作为 logit),您可以选择具有名义变量(意思是那些不满足比例赔率假设的变量),如果您想将阈值设置为“灵活”允许具有非结构化的切点,最后添加参数“random”以指定您希望具有随机效应的任何变量。

我还找到了《使用R、W. Holmes Finch Jocelyn E. Bolin、Ken Kelley

于 2021-03-30T21:02:35.710 回答
0

这是一个实现(不是我自己的)。我只想处理这段代码。另外,通过这种方式,您将真正了解引擎盖下发生了什么。

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

于 2014-01-13T06:27:01.120 回答