мультиномиальная логистическая регрессия в R: результат multinom в пакете nnet отличается от результата mlogit в пакете mlogit?

Обе функции 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 ***

Почему значения p в multinorm и mlogit так различаются? Думаю, это из-за выбросов, которые я добавил с помощью mydata$gre[1:10] = rnorm(10,mean=80000). Если выбросы - это неизбежная проблема (например, в геномике, метаболомике и т. Д.), Какую функцию R мне следует использовать?


person WCMC    schedule 04.02.2017    source источник
comment
Почему вы оцениваете полиномиальную модель, когда ответ дихотомический? Если вы оцените простую логистическую GLM, вы получите тот же результат, что и mlogit: summary(glm(admit ~ gre + gpa + rank, data = mydata, family=binomial)).   -  person Jason Morgan    schedule 04.02.2017
comment
привет @JasonMorgan, насколько я понимаю, полиномиальная логистическая регрессия - это расширение биономиальной логистической регрессии. Таким образом, следует использовать полиномиальную процедуру для работы с дихотомической зависимой переменной. В этом вопросе я стремлюсь выяснить причину, по которой две функции R для полиномиальных процедур дают два разных результата с использованием одного и того же набора образцов (хотя образцы имеют дихотомический результат).   -  person WCMC    schedule 04.02.2017
comment
Если вы масштабируете данные, как предлагает функция nnet, вы получите те же стандартные ошибки.   -  person Jason Morgan    schedule 04.02.2017
comment
ПРАВДА! Я этого не заметил!   -  person WCMC    schedule 04.02.2017


Ответы (2)


Разница здесь в различии между тестом Вальда $ z $ (который вы вычислили в pv) и тестом отношения правдоподобия (что возвращает summary(mlogit.model). Тест Вальда в вычислительном отношении проще, но в целом имеет менее желательные свойства (например, его КЭ не являются масштабно-инвариантными). Подробнее об этих двух процедурах можно прочитать здесь.

Чтобы выполнить тесты LR для ваших nnet коэффициентов модели, вы можете загрузить пакеты car и lmtest и вызвать Anova(test) (хотя вам придется проделать немного больше работы для одиночных тестов df).

person Richard Border    schedule 04.02.2017
comment
Хорошая ссылка! Спасибо. - person WCMC; 04.02.2017

В качестве альтернативы вы можете использовать broom, который выводит аккуратный формат для моделей классов multinom.

library(broom)

tidy(test)

Он вернет data.frame с z-статистикой и p-значениями. Дополнительную информацию см. В документации tidy.


P.S .: так как я не могу получить данные по опубликованной вами ссылке, я не могу воспроизвести результаты

person patL    schedule 17.04.2019