【问题标题】:multinomial logistic regression in R: multinom in nnet package result different from mlogit in mlogit package?R中的多项逻辑回归:nnet包中的多项式结果与mlogit包中的mlogit不同?
【发布时间】:2017-02-04 04:08:35
【问题描述】:

R 函数multinom(包nnet)和mlogit(包mlogit)均可用于多项逻辑回归。但是为什么这个例子会返回不同的系数 p 值的结果呢?

#prepare data

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank)
mydata$gre[1:10] = rnorm(10,mean=80000)

#multinom:

test = multinom(admit ~ gre + gpa + rank, data = mydata)
z <- summary(test)$coefficients/summary(test)$standard.errors
# For simplicity, use z-test to approximate t test.
pv <- (1 - pnorm(abs(z)))*2 
pv
# (Intercept)         gre         gpa       rank2       rank3       rank4 
# 0.00000000  0.04640089  0.00000000  0.00000000  0.00000000  0.00000000 

#mlogit:

mldata = mlogit.data(mydata,choice = 'admit', shape = "wide")

mlogit.model1 <- mlogit(admit ~ 1 | gre + gpa + rank, data = mldata)
summary(mlogit.model1)
# Coefficients :
#   Estimate  Std. Error t-value  Pr(>|t|)    
# 1:(intercept) -3.5826e+00  1.1135e+00 -3.2175 0.0012930 ** 
#   1:gre          1.7353e-05  8.7528e-06  1.9825 0.0474225 *  
#   1:gpa          1.0727e+00  3.1371e-01  3.4195 0.0006274 ***
#   1:rank2       -6.7122e-01  3.1574e-01 -2.1258 0.0335180 *  
#   1:rank3       -1.4014e+00  3.4435e-01 -4.0697 4.707e-05 ***
#   1:rank4       -1.6066e+00  4.1749e-01 -3.8482 0.0001190 ***

为什么multinormmlogit 的p 值如此不同?我想这是因为我使用mydata$gre[1:10] = rnorm(10,mean=80000) 添加的异常值。如果异常值是不可避免的问题(例如基因组学、代谢组学等),我应该使用哪个 R 函数?

【问题讨论】:

  • 当响应是二分法时,为什么要估计多项模型?如果您估计一个简单的逻辑 GLM,您会得到与 mlogit 相同的结果:summary(glm(admit ~ gre + gpa + rank, data = mydata, family=binomial))
  • 嗨@JasonMorgan,据我了解,多项逻辑回归是生物多项式逻辑回归的扩展。因此,应该使用多项式过程来处理二分因变量。在这个问题中,我的目的是找出为什么多项式过程的两个 R 函数使用同一组样本给出两个不同结果的原因(尽管样本具有二分结果)。
  • 如果按照nnet 函数的建议缩放数据,您会得到相同的标准误差。
  • 真的!我没注意到!

标签: r mlogit


【解决方案1】:

作为替代方案,您可以使用broom,它为multinom 类模型输出整洁的格式。

library(broom)

tidy(test)

它将返回带有 z 统计和 p 值的 data.frame。 请查看tidy 文档以获取更多信息。


P.S.:由于我无法从您发布的链接中获取数据,因此无法复制结果

【讨论】:

    【解决方案2】:

    这里的区别是 Wald $z$ 检验(您在 pv 中计算的结果)和似然比检验(summary(mlogit.model) 返回的结果)之间的区别。Wald 检验在计算上更简单,但通常有不太理想的属性(例如,它的 CI 不是尺度不变的)。您可以阅读有关这两个过程的更多信息 here

    要对您的 nnet 模型系数执行 LR 测试,您可以加载 carlmtest 包并调用 Anova(test)(尽管您必须为单个 df 测试做更多的工作) .

    【讨论】:

    • 不错的参考!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2019-09-13
    • 2021-10-06
    • 2023-01-24
    • 2021-05-02
    • 2021-02-04
    • 2016-04-05
    相关资源
    最近更新 更多