我正在为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
这两个结果似乎差距很大?我哪里做错了?如何修复它们并得到类似的结果?
答案 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