Я использую модель логистической регрессии в R. Я использовал пакеты Zelig и Car. Однако мне интересно, есть ли простой способ получить статистику соответствия модели для модели. (псевдоквадрат, хи-квадрат, логарифм правдоподобия и т. д.)
Статистика соответствия модели для логистической регрессии
Ответы (5)
Предположим, glm1
это ваша модель, а размер образца n = 100
.
Вот несколько критериев соответствия:
R2 <- 1 - ((glm1$deviance/-2)/(glm1$null.deviance/-2))
cat("mcFadden R2 = ", R2, "\n")
R2 <- 1 - exp((glm1$deviance - glm1$null.deviance)/2 * n)
cat("Cox-Snell R2 = ", R2, "\n")
R2 <- R2/(1 - exp((-glm1$null.deviance)/n))
cat("Nagelkerke R2 = ", R2, "\n")
AIC <- glm1$deviance + 2 * 2
cat("AIC = ", AIC, "\n")
Таким образом, у вас есть обзор того, как рассчитывать GoF-Measurements.
Обычно это делается с помощью функции summary()
.
Трудно ответить на этот вопрос, не зная, что такое объект модели. Я не уверен, что дает Zelig
.
Я бы посмотрел на names(model)
, names(summary(model))
или names(anova(model,test = "Chisq"))
, чтобы узнать, есть ли там нужная вам статистика. Я знаю, что для логической вероятности logLik(model)
даст вам то, что вы хотите.
Хотя я не эксперт, статистика соответствия моделей для моделей логистической регрессии не так проста в интерпретации, как в линейной регрессии. Предполагая, что у вас есть двоичный ответ, я нашел полезным один метод - сгруппировать ваши данные по прогнозируемому интервалу вероятности (0-10%, 10% -20%, .... 90% -100%) и сравнить фактические вероятности. к прогнозируемым. Это очень полезно, потому что часто ваша модель будет переоценивать на нижнем уровне или занижать прогноз на верхнем. Это также может привести к созданию лучшей модели.
взгляните на пакет pscl. Однако будьте осторожны с отсутствующими данными:
library("MASS","pscl")
admit_2 <- admit
admit_2$gre.quant[sample(1:106, 45)] <- NA
m0 <- MASS::polr(score ~ gre.quant + gre.verbal + ap + pt + female,
Hess=TRUE,
data=admit_2,
method="probit")
m1 <- MASS::polr(score ~ gre.quant + gre.verbal + ap + pt + female,
Hess=TRUE,
data= na.omit(admit_2),
method="probit")
pR2(m0)
llh llhNull G2 McFadden r2ML r2CU
-57.4666891 -151.0299826 187.1265870 0.6195015 0.9534696 0.9602592
pR2(m1)
llh llhNull G2 McFadden r2ML r2CU
-57.4666891 -83.3891852 51.8449922 0.3108616 0.5725500 0.6123230
Также посмотрите здесь: https://stats.stackexchange.com/questions/8511/how-to-calculate-pseudo-r2-from-rs-logistic-regression.