如何在 R 中建立和估计多项式 logit 模型?

机器算法验证 r 物流 多项分布 罗吉特 跳转
2022-01-27 17:49:24

我在 JMP 中运行了一个多项式 logit 模型并得到了结果,其中包括 AIC 以及每个参数估计的卡方 p 值。该模型有一个分类结果和 7 个分类解释变量。

然后,我使用nnetmultinom中的函数拟合我认为会在 R 中构建相同模型的模型。

代码基本上是:

fit1 <- multinom(y ~ x1+x2+...xn,data=mydata);
summary(fit1);

然而,两者给出不同的结果。对于 JMP,AIC 是 2923.21,nnet::multinom对于 AIC 是 3116.588。

所以我的第一个问题是:其中一个模型错了吗?

第二件事是,JMP 为我需要的每个参数估计值提供卡方 p 值。在多项式上运行摘要fit1不会 - 它只是给出估计值、AIC 和偏差。

因此,我的第二个问题是:有没有办法在使用时获得模型的 p 值和估计值nnet::multinom

我知道mlogit是另一个 R 包,看起来它的输出包括 p 值;但是,我无法mlogit使用我的数据运行。我认为我的数据格式正确,但它说我的公式无效。我使用了相同的公式multinom,但它似乎需要使用管道的不同格式,我不明白它是如何工作的。

谢谢。

3个回答

我确定你已经找到了你的解决方案,因为这篇文章已经很老了,但对于我们这些仍在寻找解决方案的人来说——我发现http://youtu.be/-Cp_KP9mq94是一个很好的来源,可以帮助你了解如何使用 mlogit 包在 R 中运行多项逻辑回归模型。如果您访问计量经济学学院网站,她拥有 R 和 SAS 和 STATA 的所有脚本、数据,我认为是其中之一。

哪种解释了如何/为什么以及如何将数据转换为“长”格式与“宽”格式。很可能你有一个需要转换的宽格式。

https://sites.google.com/site/econometricsacademy/econometrics-models/multinomial-probit-and-logit-models

一般来说,两个不同软件之间 AIC 值的差异并不完全令人惊讶。计算可能性通常涉及相同数据的不同模型之间相同的常数。不同的开发人员可以就该常量的输入或输出做出不同的选择。您应该担心的是两个模型之间的 AIC 值差异何时不同。实际上,我刚刚注意到一个参数multinom()允许您更改具有相同 X 值的行的折叠方式,这会影响偏差的基线,从而影响 AIC。您可以尝试 summ 参数的不同值,看看这是否使偏差一致。我们不知道 JMP 在做什么!:)

如果估计的系数和标准误差相同,那么你很好。如果系数不相同,请不要忘记 JMP 可能会选择不同的基线结果来计算系数。multinom()做出不同的选择mlogit(),例如。

从 multinom() 的 summary() 结果中获取 p 值非常容易。我无法重现您的模型,因此这里是 multinom() 帮助页面中的示例:

library("nnet")
data("Fishing", package = "mlogit")
fishing.mu <- multinom(mode ~ income, data = Fishing)
sum.fishing <- summary(fishing.mu) # gives a table of outcomes by covariates for coef and SE
str(sum.fishing)
# now get the p values by first getting the t values
pt(abs(sum.fishing$coefficients / sum.fishing$standard.errors),
  df=nrow(Fishing)-6,lower=FALSE)

我同意弄清楚 mlogit 包是一个挑战!仔细阅读小插曲。他们确实有帮助。

您也可以尝试使用 glmnet 包运行多项式 logit。我不确定如何强制它保留所有变量,但我相信这是可能的。