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


20

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

然后,我使用nnet包中的multinom函数来拟合我认为可以在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,但似乎使用管道需要使用不同的格式,但我不知道它是如何工作的。

谢谢。


2
您可以将参数Hess = TRUE设置为从多项式中获取Hessian,然后手动计算p值。但我建议您使用mlogit库(当协变量未正确缩放时,nnet可能会出现收敛问题)。mlogit的小插图非常好,应该可以帮助您正确设置数据。短片可以在通常的位置找到:cran.r-project.org/web/packages/mlogit
Jason Morgan

Answers:


9

我肯定您已经找到了您的解决方案,因为这篇文章很老,但是对于我们中仍在寻找解决方案的那些人-我发现http://youtu.be/-Cp_KP9mq94是如何获得指导的重要资料使用mlogit包在R中运行多项式逻辑回归模型。如果您访问经济计量学学院的网站,她将拥有R,SAS和STATA的所有脚本,数据,我认为是SPSS之一。

哪种方式说明了如何/为什么以及如何将数据转换为“长”格式与“宽”格式。您很可能具有较宽的格式,需要进行转换。

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


3

通常,两个不同软件之间的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软件包是一个挑战!仔细阅读小插图。他们确实有帮助。


我将如何使用Fishing具有多项式的数据集中的其他(通用)变量?
gregmacfarlane 2014年

@gmacfarlane只需在multinom(mode〜Income + price.beach,...
atiretoo 2014年

@atiretoo我正在寻找一种获取我的pval的方法,谢谢!但仅作澄清-df的6是从哪里来的?像我应该算什么来获得我的df?我的模型中有一个连续变量和一个分类变量(4个类别)。那是5的df吗?另外,钓鱼是整个数据集吗?这是样本大小的自由度。
凯里

@atiretoo我很抱歉,我只是发现,如果使用软件包nnet来运行logit回归-它实际上会计算有效df并将其存储在nnet对象中。因此,我可以从模型中提取df并使用它。我尚未检查mlogit对象是否具有相同的信息。
凯里2014年

@Kerry很高兴您找到了它。
atiretoo 2014年

1

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

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.