Alexey Klimov 30 мая, 2017
- Графики
- Линейное моделирование
- Регрессия с регуляризацией
- График
- Коэффициенты модели (только те, которые не равны нулю)
Посмотреть собранный html файл можно здесь: https://rhangelxs.github.io/r_socio_hse/README.html
Исходный код доступен в формате Rmd в моем репозитории на гитхабе, скачать исходный файл можно по ссылке: README.Rmd.
Сначала построим две модели:
- Модель для двух предикторов (lm0)
- Модель для двух предикторов с интеракцией между ними (lm1)
Показатели последней модели (lm1) с интеракцией:
Call:
lm(formula = roc ~ Oidep * Oiorg, data = data)
Residuals:
Min 1Q Median 3Q Max
-51.73 -15.57 1.28 15.31 41.26
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 121.4591 47.6636 2.55 0.012 *
Oidep -1.9775 2.8275 -0.70 0.485
Oiorg 1.7235 2.5140 0.69 0.494
Oidep:Oiorg 0.0248 0.1428 0.17 0.863
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 20 on 161 degrees of freedom
Multiple R-squared: 0.122, Adjusted R-squared: 0.106
F-statistic: 7.45 on 3 and 161 DF, p-value: 0.000106
Из вывода линейной модели нужно привести: R2, N, p − *valu*e*, F-статистику*
Для каждого регрессора (предиктора): Как минимум β − коэффициент**а и значимость + крайне желательно t-значние, либо S**E
Сравним наши модели с помощью метода (stepwise regression[1]) модель с интеракцией и модель без интеракции.
Для этого нам поможет пакет lmSupport
, но в целом можно ориентироваться на AIC и BIC. Но в нашем случае достаточно воспользоваться ANOVA (или diff-test).
SSE (Compact) = 62585
SSE (Augmented) = 62573
Delta R-Squared = 0.00016
Partial Eta-Squared (PRE) = 0.00019
F(1,161) = 0.03, p = 0.86
В результате добавление инетеракции (аддитивный эффект) улучшает предсказательные способности модели (Δ**R2) на 0.016%. Добавление интеракции значимо не улучшает показатели соответсвия модели данным (p = 0.86)
Нагляднее всего график:
В некоторых случаях в ручную отбирать регрессоры неудобно. Для этого можно использовать PLS (аля SEM), Ridge или Lasso.
Полезным будет техника разбиения выборки на обучающую и тестовую (80/20) из Machine Learning.
Для простоты предположим, что у нас нет никаких априорных представлений о модели. Попробуем найти самую удачную модель из всего датасета (включая исключительно числовые или факторные переменные).
В качестве интересующей нас (выходной) перменной мы зададим:
[1] "roc"
Основаня проблема пакета glmnet
в том, что ему на вход нужно подавать разреженные матрицы. Напишим для этого небольшую вспомогательную функцию (может даже не одну).
Warning: attributes are not identical across measure variables; they will
be dropped
В качестве предикторов числовых и категориальных предикторов у нас было 19 предиктор(а/ов): comp, sex, age, tenure, promo, satis, position, norms1, norms2, Oidep, Oiorg, StK, StI, StRA, StRE, Pemo, Ptime, Femo and Ftime.
-
Сразу следует удалить предикторы, предсказательная сила которых слишком высокая (например, в этот список могут попасть компоненты выходной переменной). Мы же не хотим проверять очевидные вещи :)
-
Затем следует вручную удалить предикторы, которые попали по ошибке (например, в этот список могут попасть компоненты выходной переменной). Внимательно посмотрим на вывод этой команды:
variable.y | cor |
---|---|
Femo | 0.42 |
StRE | 0.33 |
Ftime | 0.32 |
norms1 | 0.31 |
norms2 | 0.30 |
- Чтобы не столкнуться с проблемами мулитиколлинеарности или некорректного кодирования переменных, посмотрим на все предикторы, коэффциент корреляций которых между собой больше 0.9:
- variable.x:
.
В итоговый список предикторов для LASSO регрессии у нас попали 19 переменных: comp, sex, age, tenure, promo, satis, position, norms1, norms2, Oidep, Oiorg, StK, StI, StRA, StRE, Pemo, Ptime, Femo and Ftime
По умолчанию glmnet
строит LASSO модель (alpha
= 1), если нужна Ridged регрессию, то нужно указать параметр alpha
= 0.
Выбираем лучшую лямбду
lambda.min | lambda.1se |
---|---|
1.292 | 3.276 |
[1] 3.3
term | step | estimate | lambda | dev.ratio |
---|---|---|---|---|
(Intercept) | 1 | 115.5 | 3.276 | 0.2342 |
satis | 1 | 0.3289 | 3.276 | 0.2342 |
norms2 | 1 | 2.449 | 3.276 | 0.2342 |
Oiorg | 1 | 0.1468 | 3.276 | 0.2342 |
StRA | 1 | -0.1222 | 3.276 | 0.2342 |
StRE | 1 | 0.06668 | 3.276 | 0.2342 |
Femo | 1 | 1.753 | 3.276 | 0.2342 |
[1] почему этот старый и добрый метод не современный написано тут: https://stats.stackexchange.com/questions/13686/what-are-modern-easily-used-alternatives-to-stepwise-regression