Недавно мне пришлось работать с R и SPSS для анализа набора данных с помощью структуры полиномиальной регрессии. Мы опросили некоторых участников (10–12 лет) и спросили, какая «профессиональная сфера» им нравится больше всего, а затем спросили, как часто они выходят в Интернет. Таким образом, результатом является «Категориальная переменная»: профессиональная сфера - «военный», «Я не знаю» и «Другая профессия»; а независимая переменная также является категориальной переменной (как часто вы заходите в Интернет ( «У меня нет доступа», «1-3 часа в день», «3-5 часов в день»).
Я запускал модель с использованием R (с пакетом nnet, с помощью функции multinom), а другой статистик запускал с помощью SPSS. Все ссылочные категории определены правильно.
Теперь, когда мы сравниваем результаты, они не совпадают для второй категории моей независимой переменной. Первый в порядке.
Взгляните на весь код:
library(tidyverse)
library(stargazer)
library(nnet)
ds <- ds %>% mutate(internet = factor(internet))
ds <- ds %>% mutate(internet = relevel(internet, ref = "I dont have internet access"))
ds <- ds %>% mutate(field = factor(field))
ds <- ds %>% mutate(fielf = relevel(field, ref = "I dont know"))
mod <- multinom(field ~ internet, data = ds, maxit=1000, reltol = 1.0e-9)
stargazer(mod, type = 'text')
Для ясности, когда независимая переменная имеет только две категории (например, пол, мужской и женский), и R, и SPSS согласны с его результатами.
После огромных усилий, пытающихся понять несоответствие между обоими результатами, я прочитал, что оценка nnet может иметь некоторые проблемы (проблема оптимизации?), и что расхождение результатов не так странно, как я думал вначале ..
Может кто-нибудь объяснить мне, что здесь происходит? Что мне не хватает ?! Я предполагаю, что SPSS и R должны иметь одинаковые результаты, если мы используем одну и ту же модель.
Спасибо
Это DS, который я использую в этом примере:
ds <- structure(list(sex = structure(c(2L, 1L, 2L, 1L, 2L, 1L, 2L,
2L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L,
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 1L), .Label = c("male", "female"), class = "factor"), internet = structure(c(3L,
3L, 2L, 3L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 2L,
2L, 2L, 2L, 3L, 3L, 2L, 2L, 3L, 1L, 3L, 2L, 2L, 2L, 3L, 3L, 3L,
2L, 3L, 3L, 2L, 3L, 3L, 3L, 3L, 3L, 1L, 2L, 2L, 3L, 3L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 1L, 2L, 3L, 1L, 2L, 2L, 2L, 3L, 3L, 2L,
2L, 1L, 3L, 2L, 2L, 3L, 2L, 2L), .Label = c("I dont have internet access",
"1-3 hours/day", "3-5 hours/day"), class = "factor"), field = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("I dont know", "Military",
"Other profession"), class = "factor")), class = "data.frame", row.names = c(NA,
-73L))