Я начинаю баловаться с использованием glmnet
с LASSO регрессией , где мой результат представляет интерес дихотомический. Я создал небольшой фрейм данных ниже:
age <- c(4, 8, 7, 12, 6, 9, 10, 14, 7)
gender <- c(1, 0, 1, 1, 1, 0, 1, 0, 0)
bmi_p <- c(0.86, 0.45, 0.99, 0.84, 0.85, 0.67, 0.91, 0.29, 0.88)
m_edu <- c(0, 1, 1, 2, 2, 3, 2, 0, 1)
p_edu <- c(0, 2, 2, 2, 2, 3, 2, 0, 0)
f_color <- c("blue", "blue", "yellow", "red", "red", "yellow", "yellow",
"red", "yellow")
asthma <- c(1, 1, 0, 1, 0, 0, 0, 1, 1)
# df is a data frame for further use!
df <- data.frame(age, gender, bmi_p, m_edu, p_edu, f_color, asthma)
Столбцы (переменные) в приведенном выше наборе данных являются следующими:
age
(возраст ребенка в годах) - непрерывныйgender
- двоичный (1 = мужской; 0 = женский)bmi_p
(Процентиль ИМТ) - непрерывныйm_edu
(самый высокий уровень образования матери) - порядковый номер (0 = меньше, чем в старшей школе; 1 = диплом средней школы; 2 = степень бакалавра; 3 = степень бакалавра)p_edu
(отец высший уровень образования) - порядковый номер (так же, как m_edu)f_color
(любимый основной цвет) - номинальный («синий», «красный» или «желтый»)asthma
(статус астмы у ребенка) - бинарный (1 = астма; 0 = нет астмы)
Цель этого примера использовать лассо , чтобы создать модель прогнозирования состояния ребенка астмы из списка 6 потенциальных предикторов ( age
, gender
, bmi_p
, m_edu
, p_edu
, и f_color
). Очевидно, что размер выборки является проблемой здесь, но я надеюсь получить более полное представление о том, как обрабатывать различные типы переменных (то есть, непрерывные, порядковые, номинальные и двоичные) в glmnet
рамках, когда результат является двоичным (1 = астма ; 0 = нет астмы).
Таким образом, желает ли кто-нибудь предоставить пример R
сценария вместе с пояснениями к этому фиктивному примеру, используя LASSO с вышеуказанными данными для прогнозирования статуса астмы? Я знаю, что, хотя и очень простой, я, и, вероятно, многие другие, работающие в CV, были бы очень благодарны!
источник
dput
виде реального объекта R; не заставляйте читателей ставить глазурь сверху, а также печь пирог! Скажемfoo
, если вы сгенерируете соответствующий фрейм данных в R , то отредактируйте вопросdput(foo)
.glmnet
в действии с двоичным результатом.Ответы:
Категориальные переменные обычно сначала преобразуются в факторы, затем создается фиктивная матрица предикторов и вместе с непрерывными предикторами передается в модель. Имейте в виду, что glmnet использует штрафы как для риджа, так и для лассо, но может быть установлен либо в одиночку.
Некоторые результаты:
Коэффициенты могут быть извлечены из glmmod. Здесь показано с 3 выбранными переменными.
Наконец, перекрестная проверка также может быть использована для выбора лямбда-выражения.
источник
f_color
переменную? Считается ли фактор 1–4 большим шагом, чем 1–2, или все они одинаково взвешены, ненаправлены и категоричны? (Я хочу применить его к анализу со всеми неупорядоченными предикторами.)xfactors <- model.matrix(asthma ~ gender + m_edu + p_edu + f_color)[,-1]
кодирует категориальную переменную f_color (как было объявленоas.factor
в предыдущих строках). Следует использовать кодировку фиктивной переменной по умолчанию R, еслиcontrasts.arg
не указан аргумент. Это означает, что все уровни f_color являются одинаково взвешенными и ненаправленными, за исключением первого, который используется в качестве эталонного класса и включается в точку пересечения.model.matrix(asthma ~ gender + m_edu + p_edu + f_color + age + bmi_p)[, -1]
даст тот же результат, что и две строки выше? Зачем использовать дополнительный шаг для объединения непрерывных переменных сdata.frame
?Я буду использовать пакет enet, так как это мой предпочтительный метод. Это немного более гибкий.
источник
elasticnet
; однако я не знаю, что делать с выводом из приведенного вышеR
сценария. Можете ли вы уточнить? Заранее спасибо!Просто, чтобы расширить на превосходный пример, представленный пат. Первоначальная задача представляла порядковые переменные (m_edu, p_edu) с внутренним порядком между уровнями (0 <1 <2 <3). В первоначальном ответе Пэта я думаю, что они рассматривались как номинальные категориальные переменные без порядка между ними. Я могу ошибаться, но я считаю, что эти переменные должны быть закодированы так, чтобы модель учитывала их внутренний порядок. Если они закодированы как упорядоченные факторы (а не как неупорядоченные факторы, как в ответе Пата), то glmnet дает несколько иные результаты ... Я думаю, что приведенный ниже код правильно включает порядковые переменные в качестве упорядоченных факторов, и это дает немного другие результаты:
источник