Как сделать выбор поднабора логистической регрессии?

47

Я подгоняю биномиальное семейство glm в R, и у меня есть целая группа объясняющих переменных, и мне нужно найти лучшее (R-квадрат в качестве меры - это хорошо). Если не считать сценария для циклического перебора различных комбинаций объясняющих переменных и последующей записи, которая дает наилучшие результаты, я действительно не знаю, что делать. И leapsфункция из пакета скачков , кажется, не делает логистической регрессии.

Любая помощь или предложения будут с благодарностью.

Leendert
источник
Существуют функции, которые выполняют автоматический поиск. Вы должны взглянуть на функцию шага . Раздел 5.4 иллюстрирует этот момент: data.princeton.edu/R/glms.html
октябрь
Извините, но мое сообщение было отредактировано так, что оно больше не задает мой вопрос. У меня 35 (26 значимых) объясняющих переменных в моей модели логистической регрессии. Мне нужна наилучшая возможная комбинация из 8, а не лучшее подмножество, и ни в коем случае я не интересовался поэтапным подходом или подходом со всеми подмножествами. В этой 8. нет места для маневра, я просто подумал, что кто-то, возможно, знает, как я могу подобрать все комбинации из 8 дополнительных переменных, и он может сказать мне, что максимизирует вероятность (извините за пердеть мозга R-квадрата, но AIC также не имеет значения, так как У меня фиксированное количество параметров, 8).
Леендерт
Вы можете вернуться к предыдущей версии своего поста или объединить обе правки. Я уверен, что @mpiktas старался улучшить его внешний вид и просто не заметил параметров No.
ЧЛ
@ Все: Большое спасибо. В конце концов я использовал много разных вещей в надежде, что они все дадут одинаковые ответы. И они сделали. Я использовал пакеты BMA, bestglm и glmnet, а также функцию step. Подходили модели со всеми из них, и не было расхождений в том, что BMA с maxcol = 9 и шагом считалось лучшей моделью. Все эксперты в области вокруг меня казались очень довольными переменными, и чувствовали, что это было довольно прогрессивно. Так что спасибо за весь вклад. Я действительно все это использовал.
Леендерт
glmulti также является хорошим пакетом для выбора лучшего подмножества, и он позволяет вам указать максимальное количество переменных в вашей модели, а также позволяет рассмотреть все возможные эффекты взаимодействия 1-го порядка
Том Венселерс

Ответы:

28

Пошаговые и "все подмножества" методы вообще плохие. См. Остановка пошагово: почему пошаговые методы плохи и что вы должны использовать , Дэвид Касселл и я (мы использовали SAS, но урок применим) или стратегии регрессионного моделирования Фрэнка Харрелла. Если вам нужен автоматический метод, я рекомендую LASSO или LAR. Пакет LASSO для логистической регрессии доступен здесь , другая интересная статья о повторном LASSO для логистики

Питер Флом - Восстановить Монику
источник
6
(+1) Что касается пакетов R, есть также glmnet (реализация с алгоритмом спуска по алгоритму, Фридман и колл.) И штраф (позволяет сохранить некоторую переменную в невыполненном состоянии). Следует отметить, что Ф. Харрелл предоставляет штрафные оценки ML для GLM (см. lrmИли его учебник по RMS для получения дополнительной информации).
ЧЛ
(+1) Хорошая статья, кажется, я должен начать выходить далеко за рамки утверждений автора в этом вопросе (не первый раз, когда я этого не делал). @chl (+1) идеальные альтернативные предложения тоже.
Дмитрий Челов
@chl: +1 для glmnet, это отличный пакет.
Зак
1
@chl Спасибо! Одной из проблем с R является отслеживание пакетов (их так много!), Которые являются лучшими. Представления задач действительно помогают
Питер Флом - Восстановить Монику
2
Если ваши переменные коллинеарны, лучше использовать эластичную сеть, используя glmnet, скажем, с альфа = 0,5, поскольку LASSO имеет тенденцию случайным образом выбрасывать высококоллинеарные переменные из модели
Том Вензелерс
15

R2AICBIC

Логистическая регрессия оценивается методом максимального правдоподобия, поэтому leapsздесь не используется напрямую. Расширение leapsдля glm()функций является bestglm пакет (как правило , рекомендации следует, консультируйтесь виньетки там).

Вас также может заинтересовать статья Дэвида В. Хосмера, Борко Йовановича и Стэнли Лемешоу «Логистическая регрессия лучших подмножеств» // Biometrics Vol. 45, No. 4 (Dec., 1989), pp. 1265-1270 (обычно доступна через университетские сети).

Дмитрий Челов
источник
2
R2BIC,AIC8BICAICR2
8
любой академический справочник дляR2R2 is not an appropriate goodness-of-fit measure for logistic regression take an information criterion AICAIC or BICBIC
SIslam
примечание о том bestglm, что он использует leapsв бэкэнде для расчета! Таким образом, произойдет сбой, если в наборе данных есть NA, и появится сообщение типа Error in leaps.setup(x, y, wt = weights, nbest = nbest, nvmax = nvmax, : NA/NaN/Inf in foreign function call (arg 3) Но что интересно, в моем наборе данных нет NA, а есть несколько нулей, тем не менее, эта функция жалуется и выдает именно это сообщение !!
SIslam
glmnet также хорош, и может также делать модели, которые учитывают все возможные эффекты взаимодействия 1-го порядка
Том Венселерс
6

Одна идея состоит в том, чтобы использовать случайный лес, а затем использовать показатели важности переменных, которые он выводит, чтобы выбрать ваши лучшие 8 переменных. Другой идеей было бы использовать пакет "boruta", чтобы повторить этот процесс несколько сотен раз, чтобы найти 8 переменных, которые наиболее важны для модели.

Zach
источник
@ Зач. Предлагаете ли вы полагаться на RF для выполнения выбора функций, а затем применять GLM - в этом случае есть риск переоснащения или чрезмерного оптимизма - или использовать RF (со стандартными показателями разной важности, или актуальный выбор) как самостоятельный инструмент?
ЧЛ
@chl: Я предлагал использовать RF для выбора функций, а затем применить GLM. Я согласен, что есть риск перебора, но ОП сказал, что ему нужно ровно 8 переменных.
Зак
1
@ Зач "ровно 8 переменных" ... Затем вы несколько мягко устанавливаете пороговые значения потенциальных переменных, представляющих интерес, на основе показателя важности переменной (который благодаря тому, что он основан на перестановке и двойной повторной выборке, должен быть свободным от смещения) и затем повторно вставьте их в GLM. ИМХО, вы нарушаете контроль над перегрузкой через мешки. Это также описано в ESLII от Hastie et al .: выбор функции, если таковой имеется, должен быть включен в процедуру перекрестной проверки (где перекрестная проверка включает оценку производительности модели).
ЧЛ
@chl: Разве кросс-пакет "boruta" пакета r не проверяется, если запустить случайный лес несколько раз? Вы в основном говорите, что нам нужна «мета-перекрестная проверка», когда вы делаете выбор переменных и подгоняете свою модель к случайным подмножествам данных?
Зак
3
@ Zach Моя точка зрения заключалась в том, что мешки, или, в частности, RF, предотвращают переоснащение (в определенной степени), если вы остаетесь в той же цепочке инструментов. Если вы используете результаты из RF и затем посмотрите, как другая модель будет работать с теми же данными, то вы прервете цикл CV. Но почему бы не использовать непосредственно RF для классификации? Другим решением было бы использование RF на обучающей выборке, а затем применение GLM на удерживаемой выборке (которая также может быть перекрестно проверена).
ЧЛ
0

stats::stepфункции или более общая MASS::stepAICподдержка функции lm, glm(т.е. логистическая регрессия) и aovсемейные модели.

Фарид Чераги
источник