Я пытаюсь сделать упорядоченную регрессию логита. Я управляю моделью вот так (просто глупая маленькая модель, оценивающая количество фирм на рынке по показателям дохода и населения). Мой вопрос о прогнозах.
nfirm.opr<-polr(y~pop0+inc0, Hess = TRUE)
pr_out<-predict(nfirm.opr)
Когда я запускаю прогнозирование (которое я пытаюсь использовать для получения прогнозируемого значения y), выходные значения равны 0, 3 или 27, что никоим образом не отражает то, что должно казаться прогнозом, основанным на моих ручных прогнозах из коэффициента оценки и перехватывает. Кто-нибудь знает, как получить "точные" прогнозы для моей заказанной модели логита?
РЕДАКТИРОВАТЬ
Чтобы прояснить мою озабоченность, мои данные ответов содержат наблюдения на всех уровнях
>head(table(y))
y
0 1 2 3 4 5
29 21 19 27 15 16
где, как моя прогнозируемая переменная, кажется, накапливается
> head(table(pr_out))
pr_out
0 1 2 3 4 5
117 0 0 114 0 0
r
econometrics
logit
ordered-logit
prototoast
источник
источник
predict
функцией, отличаются от значений , сгенерированных вами вручную? Какова структура вашей зависимой переменной? Пожалуйста, приведите воспроизводимый пример.polr()
по другим функциям? Вы можете попробоватьlrm()
из пакетаrms
:lrmFit <- lrm(y ~ pop0 + inc0); predict(lrmFit, type="fitted.ind")
. Другой вариантvglm()
из пакетаVGAM
:vglmFit <- vglm(y ~ pop0 + inc0, family=propodds); predict(vglmFit, type="response")
. Оба возвращают матрицу предсказанных вероятностей категории. Смотрите мой ответ, чтобы получить прогнозируемые категории оттуда.Ответы:
polr()
MASS
polr()
Для возможных вариантов, реализованных в других функциях, см. Этот ответ . Логистическая функция является обратной по отношению к логит-функции, так что предсказанной вероятности являютсяp^(Y⩽g)
Предсказанные вероятности категории: . Вот воспроизводимый пример в R с двумя предикторами . Для порядковой переменной я разрезал моделируемую непрерывную переменную на 4 категории.Х1,Х2YP^(Y=g)=P^(Y≤g)−P^(Y≤g−1) X1,X2 Y
Теперь подгоните модель пропорциональных коэффициентов, используя
polr()
и получите матрицу предсказанных вероятностей категории, используяpredict(polr(), type="probs")
.Чтобы вручную проверить эти результаты, нам нужно извлечь оценки параметров из этих вычислений предсказанных логитов, из этих логитов вычислить предсказанные вероятности , а затем связать предсказанные вероятности категории с матрицей ,p^(Y⩽g)
Сравните с результатом из
polr()
.Для прогнозируемых категорий
predict(polr(), type="class")
просто выберите - для каждого наблюдения - категорию с наибольшей вероятностью.Сравните с результатом
polr()
.источник