【问题标题】:Run nested logit regression in R在 R 中运行嵌套的 logit 回归
【发布时间】:2013-03-17 02:58:23
【问题描述】:

我想在 R 中运行嵌套逻辑回归,但我在网上找到的示例并没有太大帮助。我从这个网站(Step by step procedure on how to run nested logistic regression in R)阅读了一个与我的问题类似的示例,但我发现它最终似乎没有解决(提问者报告错误,我没有看到更多答案)。

所以我有 9 个预测变量(连续分数)和 1 个分类因变量 (DV)。 DV被称为“效果”,它可以分为2大类:“负(0)”和“正(1)”。我知道如何运行简单的二元 logit 回归(使用一般分组方式,即负 (0) 和正 (1)),但这还不够。 “积极”可以进一步分为两种类型:“身体(1)”和“精神(2)”。所以我想运行一个嵌套模型,它包括这 3 个类别(负(0)、物理(1)和心理(2)),并反映“物理”和“心理”嵌套在“正”中的性质。也许 R 可以将这两个模型(一般与详细)一起比较?所以我新建了两个栏目,一个叫做“效果一般”,其中个人分数是“负(0)”和“正(1)”;另一个称为“效果详细”,它包含 3 个值 - 负 (0)、物理 (1) 和心理 (2)。我只使用“效果一般”运行了一个简单的二进制 logit 回归,但我不知道如何为“效果详细”运行嵌套 logit 模型。

从我搜索的示例和其他材料来看,R 包“mlogit”似乎是正确的,但我不知道如何让它适用于我的数据。我不太了解 R-help 中的示例,以及我之前提到的本网站示例中的这一部分 (...shape='long', alt.var='town.list', nests=list(town .list)...) 让我很困惑:我可以看到我的数据形状应该是“宽”的,但我不知道“alt.var”和“nests”是什么...

我还查看了 mlogit 手册的第 19 页,了解嵌套 logit 模型调用的示例。但我仍然无法决定我需要什么选项。 (http://cran.r-project.org/web/packages/mlogit/mlogit.pdf)

有人可以提供详细的步骤和说明吗?我相信这个例子(如果得到很好的讨论和解决)也会对我和其他人有很大帮助!

感谢您的帮助!!!

【问题讨论】:

  • 我认为您对嵌套模型的理解感到困惑。他们没有在“积极”情况下涵盖两个级别的DV。你有一个多项结果。
  • 看来你可以有 3 个结果。接下来,您需要确定结果是否有序。换句话说,心理结果是否比身体结果更严重(或更少)。如果结果不是有序的,只是需要不同,那么这将使事情变得更简单。如果到那时没有其他人提供代码,我明天也许可以挖掘出这两种情况的代码。
  • 谢谢马克!结果没有顺序,因此精神和身体上的结果同样严重。它们只是不同的类别。我实际上做了一个多项式 logit 回归,但是正如一些嵌套模型文献中提到的,当类型不在同一级别时,多项式模型可能无法正常工作,因此嵌套模型应该是更好的方法。他们还提到了多模型的其他属性,见下文:)
  • "由于其 IIA 属性,MNL 在以下任何一种情况下都可能无法正常工作: 1) 当备选方案不独立时。即,当有一组备选方案比其他备选方案更相似时,例如作为公共交通方式与私家车。
  • 2) 当个体之间存在口味差异时。即,对个人的看法因社会经济地位而异。在这种情况下,当存在比其他更相似的替代方案组时,我们需要随机系数模型而不是平均值模型作为 MNL,例如公共交通方式与私家车。”

标签: r nested regression logistics multinomial


【解决方案1】:

我可以帮助您了解 mlogit 结构。使用mlogit.data() 命令时,指定choice = yourchoicevariable(如果您有面板数据集,则指定id.var = respondentid,即您有来自同一个人的多个响应)以及shape='wide' 参数。创建的新 data.frame 将采用长格式,每个选择情况都有一条线,消极的、身体的、精神的。因此,您将有 3 行,而您只有一个宽数据格式。无论您的 MN 选择变量是什么,它现在都将是一列逻辑值,TRUE 代表受访者选择的行。行名称现在将采用observation#.level(choice variable) 的格式,因此在您的情况下,如果您的数据集的第一行该人的响应是否定的,您会看到:

row.name   | choice
1.negative | TRUE
1.physical | FALSE
1.mental   | FALSE

也不是每个选择的实际因素水平都存储在 mlogit.data.frame 的名为 alt 的索引中,您可以通过 index(your.data.frame) 和观察编号(即宽格式中的行号)看到data.frame) 存储在chid。这实质上就是 row.name 告诉你的内容,即chid.alt。另请注意,如果您的数据是宽格式,则不必指定 alt.var,只需指定长格式。正如我刚刚描述的那样,mlogit.data 函数为您完成了这项工作。本质上,当您指定您的选择变量并为您创建alt.var 时,它需要unique(choice),因此如果您的数据是宽格式的,则它是多余的。

然后,您可以通过向mlogit() 命令添加一个命名的嵌套列表来指定嵌套,假设您的因子级别只是“0”、“1”、“2”:

mlogit(..., nests = c(negative = c('0'), positive = c('1','2')

或者如果因素水平是“负面的”、“身体的”、“精神的”,它会是这样的:

mlogit(..., nests = c(negative = c('negative'), positive = c('physical','mental')

另请注意,根据包文档,仍然必须使用 c() 参数指定一个嵌套。如果您指定 un.nest.el=T 参数,则生成的模型将在嵌套之间进行 iv 估计,或者如果 un.nest.el=F 指定嵌套特定估计 你可以找到Kenneth Train's Examples useful

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-03-11
    • 2021-01-14
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多