对于mlogit,vglm()和multinomial()的结果差别很大

时间:2015-04-26 12:49:40

标签: r mlogit

我正在为iris数据集做

的多项逻辑回归模型
library(VGAM)
mlog1 <- vglm(Species ~ ., data=iris, family=multinomial())
coef(mlog1)

,系数为:

 (Intercept):1  (Intercept):2 Sepal.Length:1 Sepal.Length:2  Sepal.Width:1 
     34.243397      42.637804      10.746723       2.465220      12.815353 
 Sepal.Width:2 Petal.Length:1 Petal.Length:2  Petal.Width:1  Petal.Width:2 
      6.680887     -25.042636      -9.429385     -36.060294     -18.286137 

然后我使用multinom()函数并做同样的事情:

library(nnet)
mlog2 <- multinom(Species ~ ., data=iris)

系数:

Coefficients:
           (Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width
versicolor    18.69037    -5.458424   -8.707401     14.24477   -3.097684
virginica    -23.83628    -7.923634  -15.370769     23.65978   15.135301

这两个结果似乎差距很大?我哪里做错了?如何修复它们并得到类似的结果?

1 个答案:

答案 0 :(得分:7)

差距是由于两个因素造成的:(1)multinomial()中的VGAM系列默认选择参考作为响应因子的最后一级,而multinom()nnet选择AER 1}}总是使用第一级作为参考。 (2)虹膜数据中的物种类别可以线性分离,从而导致非常大的系数和巨大的标准误差。当对数似然实际上没有进一步变化时,数字优化的确切位置在哪里,在各实现之间可能会有所不同,但实际上是无关紧要的。

作为一个没有分离的例子,考虑一个基于德国社会经济专家组(1994-2002)data("GSOEP9402", package = "AER") library("nnet") m1 <- multinom(school ~ meducation + memployment + log(income) + log(size), data = GSOEP9402) m2 <- vglm(school ~ meducation + memployment + log(income) + log(size), data = GSOEP9402, family = multinomial(refLevel = 1)) 包中的数据的学校选择回归模型:

coef(m1)
##                (Intercept) meducation memploymentparttime memploymentnone
## Realschule   -6.366449  0.3232377           0.4422277       0.7322972
## Gymnasium   -22.476933  0.6664295           0.8964440       1.0581122
##            log(income) log(size)
## Realschule   0.3877988 -1.297537
## Gymnasium    1.5347946 -1.757441

coef(m2, matrix = TRUE)
##                     log(mu[,2]/mu[,1]) log(mu[,3]/mu[,1])
## (Intercept)                 -6.3666257        -22.4778081
## meducation                   0.3232500          0.6664550
## memploymentparttime          0.4422720          0.8964986
## memploymentnone              0.7323156          1.0581625
## log(income)                  0.3877985          1.5348495
## log(size)                   -1.2975203         -1.7574912

然后,两个模型都导致基本相同的系数:

natural_key