Логистическая регрессия с использованием R - PullRequest
3 голосов
/ 01 сентября 2011

Я сейчас запускаю логистические регрессии с использованием R, но, похоже, не могу получить много полезной статистики соответствия модели. Я ищу метрики, похожие на SASS:

http://www.ats.ucla.edu/stat/sas/output/sas_logit_output.htm

Кто-нибудь знает, как (или какие пакеты) я могу использовать для извлечения этой статистики?

Спасибо

Ответы [ 3 ]

5 голосов
/ 01 сентября 2011

Конечно, glm с аргументом family = "binomial" - это функция, наиболее часто используемая для логистической регрессии. Обработка по умолчанию контрастов факторов отличается. R использует контрасты лечения, а SAS (я думаю) использует контрасты сумм. Вы можете посмотреть эти технические проблемы на R-help. Они обсуждались много, много раз за последние десять с лишним лет.

Я вижу, что Грег Сноу упомянул lrm в 'rms'. Он имеет преимущество в том, что поддерживается рядом других функций в наборе методов 'rms'. Я бы тоже его использовал, но изучение пакета rms может занять некоторое дополнительное время. Я не видел опцию, которая создаст SAS-подобный вывод.

Если вы хотите сравнить пакеты с похожими проблемами, которые есть у страниц UCLA StatComputing, то есть другой ресурс: http://www.ats.ucla.edu/stat/r/dae/default.htm, где в SPSS, SAS, Stata и R. приведены примеры большого числа методов.

5 голосов
/ 02 сентября 2011

Вот пример регрессии Пуассона:

## from ?glm:
d.AD <- data.frame(counts=c(18,17,15,20,10,20,25,13,12),
      outcome=gl(3,1,9),
      treatment=gl(3,3))
glm.D93 <- glm(counts ~ outcome + treatment,data = d.AD, family=poisson())

Теперь определите функцию для соответствия модели только для перехвата с таким же откликом, семейством и т. Д., Вычислите сводную статистику и объедините ее в таблицу (матрицу). Формула .~1 в приведенной ниже команде update означает «переоборудование модели с той же переменной отклика [обозначенной точкой на LHS тильды], но только с членом-перехватчиком [обозначенным 1 на RHS тильды] "

glmsumfun <- function(model) {
   glm0 <- update(model,.~1)  ## refit with intercept only
   ## apply built-in logLik (log-likelihood), AIC,
   ##  BIC (Bayesian/Schwarz Information Criterion) functions
   ## to models with and without intercept ('model' and 'glm0');
   ## combine the results in a two-column matrix with appropriate
   ## row and column names
   matrix(c(logLik(glm.D93),BIC(glm.D93),AIC(glm.D93),
           logLik(glm0),BIC(glm0),AIC(glm0)),ncol=2,
     dimnames=list(c("logLik","SC","AIC"),c("full","intercept_only")))
}

Теперь примените функцию:

glmsumfun(glm.D93)

Результаты:

            full intercept_only
logLik -23.38066      -26.10681
SC      57.74744       54.41085
AIC     56.76132       54.21362

РЕДАКТИРОВАТЬ :

  • anova(glm.D93,test="Chisq") дает последовательный анализ таблицы отклонений, содержащей df, отклонение (= -2 log правдоподобие), остаточный df, остаточное отклонение и тест отношения правдоподобия (критерий хи-квадрат) р -значение.
  • drop1(glm.D93) дает таблицу со значениями AIC (df, отклонения и т. Д.) Для каждого однократного удаления; drop1(glm.D93,test="Chisq") дополнительно дает тест LRT p значение.
2 голосов
/ 01 сентября 2011

Использование функции lrm в пакете rms может дать вам искомый вывод.

...