R中的多项逻辑回归:nnet包中的multinom结果与mlogit包中的mlogit不同?

时间:2017-02-04 04:08:36

标签: r mlogit

两个R函数multinom(包nnet)和mlogit(包mlogit)都可用于多项Logistic回归。但是为什么这个例子会返回系数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函数?

2 个答案:

答案 0 :(得分:1)

这里的差异是Wald $ z $测试(你在pv中计算的)与似然比测试(由summary(mlogit.model)返回的内容之间的差异.Wald测试在计算上更简单,但通常具有较不理想的属性(例如,其CI不是规模不变的。)您可以阅读有关这两个过程的更多信息here

要对nnet模型系列执行LR测试,您可以加载carlmtest个包并致电Anova(test)(尽管您必须做一点单个df测试的工作量更多。)

答案 1 :(得分:0)

或者,您可以使用broom,它为multinom类模型输出整齐的格式。

library(broom)

tidy(test)

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


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