Статистика соответствия модели для логистической регрессии - PullRequest
7 голосов
/ 26 июля 2010

Я использую модель логистической регрессии в R. Я использовал пакеты Zelig и Car.Однако мне интересно, есть ли простой способ получить статистику соответствия модели для модели.(псевдо-R-квадрат, хи-квадрат, логарифмическая зависимость и т. д.)

Ответы [ 5 ]

4 голосов
/ 11 апреля 2013

Предположим, 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.

1 голос
/ 26 июля 2010

Трудно ответить на этот вопрос, не зная, что такое объект модели.Я не уверен, что Zelig производит.

Я бы посмотрел на names(model), names(summary(model)) или names(anova(model,test = "Chisq")), чтобы увидеть, есть ли требуемая статистика.Я знаю, что для правдоподобия, logLik(model) даст вам то, что вы хотите.

1 голос
/ 29 июля 2010

Хотя я не эксперт, статистика подбора моделей для моделей логистической регрессии не так проста в своей интерпретации, как в линейной регрессии.Предполагая, что у вас есть двоичный ответ, один метод, который я нашел полезным, состоит в том, чтобы сгруппировать ваши данные по предсказанному интервалу вероятности (0-10%, 10% -20%, .... 90% -100%) и сравнить фактические вероятностик предсказанным.Это очень полезно, потому что часто ваша модель будет чрезмерно предсказывать на нижнем уровне или не предсказывать на верхнем.Это может привести и к лучшей модели.

1 голос
/ 26 июля 2010

Обычно это делается с помощью функции summary().

0 голосов
/ 24 июня 2019

посмотрите на пакет 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

...