gam(DV ~ s(IV1) + s(IV2) + IV3 + IV4, data = ds)HW12 // Обобщенные аддитивные модели. Регуляризованная регрессия
Основные задания
Сегодня мы возьмем данные, полученные в ходе программы PISA (Programme for International Student Assessment, 2006), дополненные рядом показателей из данных ООН. Переменные, которые нас будут интересовать:
OverallScience Score (average score for 15 year olds)Interestin science- Identifying scientific
Issues Explainingphenomena scientificallySupportfor scientific inquiryIncomeIndexHealthIndexEducationIndex- Human Development Index (
HDI, composed of the Income index, Health Index, and Education Index)
Также в данных есть переменная Country. Так как у нас усредненные показатели по странам, то эта переменная выступает в данном случае в качестве ID (идентификатора наблюдения), поэтому её мы не будем использовать в моделировании.
В качестве целевой переменной нас будет интересовать Overall, остальные мы будм рассматривать как предикторы.
#1
- Уже классически, загрузите данные и проверьте их структуру.
- Если в данных есть пропущенные значения, удалите наблюдения, которые их содержат.
- Визуализируйте взаимосвязи между переменными датасета (за исключением
Country). Что можно сказать о характере связей между переменными?
Для визуализации в данном случае хорошо подойдет функция ggpairs() из пакета GGally.
В качестве ответа для самопроверки введите число строк в датасете после удаления пропущенных значений.
Подсказки
- Чтобы удалить строки с пропущенными значениями, воспользуйтей функцией
drop_na(). - Функция
ggpairs()ожидает на вход датасет, состоящий только из тех переменных, взаимосвязи между которыми нас интересуют.
#2
- Постройте обобщенную аддитивную модель
gam1, в которой целевой переменной будетOverall, а нелинейными предикторами —Interest,Support,IncomeиHealth. - Протестируйте гипотезу о статистической значимости модели в целом.
В качестве ответа для самопроверки введите абсолютное значение девиансы модели (колонка Deviance из результатов тестирования значимости модели), округленное до целого.
Подсказки
- В GAM-модель нелинейный предикторы вводятся внутри сплайнов (функция
s()). - Каждый нелинейный предиктор вводится внутри своего сплайна —
s(pred1) + s(pred2) + s(pred3) - Тестирование гипотезы о значимости модели в целом проводится аналогично обобщенным линейным моделям — потребуется нулевая модель, содержащая в качестве предиктора только интерсепт.
- Для сравнения построенной и нулевой модели используется функция
anova()с аргументомtest = "Chisq".
#3
- Протестируйте гипотезы о том, что связи между предикторами и целевой переменной построенной модели нелинейные.
- Если
- результаты тестирования гипотез показывают, что связи между всеми предикторами модели и целевой переменной нелинейные, переходите к следующему заданию
- результаты тестирования гипотез показывают, что в модели есть предикторы, линейно связанные с целевой переменной, то модифицируйте модель так, чтобы нелинейные предикторы были включены в модель внутри сплайнов, а линейные — вне сплайнов.
- сохраните результат модификации в объект
gam2 - сравните с помощью статистического теста исходную и модифицированную модель
- проверьте, изменились ли результаты тестов на нелинейность связи после модификации модели
- сохраните результат модификации в объект
Описание формата инпута.
Подсказки
- Гипотезы о (не)линейности связей между предикторами и целевой переменной тестируются автоматически при выводе статистик модели с помощью функции
summary(). - GAM-модели позволяют вводить как нелинейные, так и линейные предикторы в одну и ту же модель. Общий синтаксис выглядит так (
DV— целевая переменная,IV1иIV2— нелинейные предикторы,IV3иIV4— линейные предикторы):
- Сравнить модели друг с другом позволяет функция
anova(..., test = "Chisq"), как и в случае с GLM.
Если в предыдущем задании не потребовалась модификация модели, то обобщенная аддитивная модель, с которой необходимо работать далее — это gam1. Если модификации была проведена, то обобщенная линейная модель, с которой необходимо работать далее — это gam2.
#4
- Постройте модель множественной линейной регрессии , в которую включены те же предикторы, что и в обобщенную аддитивную модель. Сравните результаты тестирования статистических гипотез для обобщенной аддитивной модели и модели множественной линейной регресси.
- Рассчитайте метрики MAPE и RMSE для обобщенной аддитивной модели и модели множественной линейной регрессии. На основании их значений сделайте вывод о том, какая из моделей лучше описывает закономерности, имеющиеся в данных.
В качестве ответа для самопроверки введите значение RMSE обобщенной аддитивной модели, округленное до сотых. В качестве десятичного разделителя используйте точку.
Подсказки
- В модели множественной линейной регресии, исходя из её математической формулировки, все предикторы считаются линейными.
- Получить значения метрик качества можно с помощью соответствующих функций из пакета
Metrics.- Функции ожидают в качестве первого аргумента реальные значения целевой переменной из данных, в качестве второго — модельные значения.
- Модельные значения храняться в элементе
fitted.valuesобъекта, содержащего модель — общую линейную или обощенную аддитивную.
#5
Проведите графическую диагностику обобщенной аддитивной модели. Сделайты вывод о её качестве.
Описание формата инпута.
Подсказки
- Для графической диагностики обобщенных аддитивных моделей используется функция
gam.check(). - Необходимо обратить внимание на распределение остатков и на зависимость остатков от предсказанных моделью значений.
#6
Проверьте выполнение допущения о concurvity. Сделайте вывод о наличии или отсутствии зависимости между предикторами.
На практике у препода произошло помутнение сознания и он нагло наврал о том, как интерпретируются значения concurvity.
Значения concurvity (любой из трёх метрик) варьируются от 0 до 1.
- Если значение близко к нулю, что проблемы concurvity нет, предикторы независимы друг от друга.
- Если значение близко к единице, что проблема concurvity есть, один предиктор может быть выражен через другой с помощью какой-либо функции.
Описание формата инпута.
Подсказки
- Для проверки наличия или отсутствия concurvity, используется функция
concurvity(), которая в качестве аргумента принимает обобщенную аддитивную модель. - Для интерпретации чаще всего используются значения
worstи/илиobserved.
#7
Неким заказчиком нам велено изучить зависимость Overall от Issues, Explain, Evidence и HDI. Мы уже строили графики, по которым можно заподозрить нечто неладное относительно этих переменных, однако давайте для большей наглядности построим корреляционную матрицу между всеми этими переменными — Overall, Issues, Explain, Evidence и HDI. Сделайте вывод о том, можно ли моделировать зависимости в помощью линейных моделей и как это корректнее сделать.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#8
Смоделируйте зависимость Overall от предикторов Issues, Explain, Evidence и HDI с помощью LASSO-регрессии.
- Создайте вектор
Y, содержащий значения целевой переменной, и матрицуXсо значениями предикторов. - Постройте модель LASSO-регрессии и выведите значения коэффициентов при минимальном значении штрафного коэффициента.
- Есть ли в модели предикторы, коэффициенты при которых были обнулены в ходе регуляризации?
В качестве ответа для самопроверки в поле ниже введите через запятую названия предикторов, коэффициенты при которых были обнулены в ходе регуляризации. Если таких предикторов не было, введите нет. Проверка игнорирует все пробелы, но чувствительна к регистру.
Подсказки
- Извлечь вектор значений целевой переменной можно через индексацию колонки с помощью оператора
$или с помощью функцииpull()изtidyverse. - Преобразовать тиббл со значениями предикторов в матрицу можно с помощью функции
as.matrix(). - Модель регуляризованной регрессии строится с помощью функции
cv.glmnet(). - Вид регуляризации задается через аргумент
alpha:0— ridge-регрессия,1— LASSO-регрессия. - Вывести значения коэффициентов модели поможет функция
coef(), а её аргументsпозволит задать значения штрафного коэффициента —"lambda.min"или"lambda.1se".
#9
Смоделируйте зависимость Overall от Issues, Explain, Evidence и HDI с помощью Ridge-регрессии, оставив только те предикторы, коэффициенты при которых сохранили ненулевое значения в предыдущем задании.
- Те предикторы, коэффициенты при которых обнулились в LASSO-регрессии не должны быть включены в модель Ridge-регрессии.
- Если ни один из коэффициентов не был обнулён, то в модель включаются все предикторы.
Описание формата инпута.
Подсказки
- Если какие-либо коэффициент в LASSO-регрессии получили нулевые значения коэффициентов, то их необходимо исключить из матрицы предикторов.
- Можно создать новую матрицу из исходного датасета аналогично тому, как создавалась матрица
Xв задании 8a, а можно с помощью индексации убрать колонки из уже созданной матрицыX. - Новую матрицу предиктороров нужно передать в функцию
cv.glmnet()с указанием аргументаalpha = 0, чтобы была построена именно ridge-регрессия.
- Можно создать новую матрицу из исходного датасета аналогично тому, как создавалась матрица
#10
- Постройте модель множественной линейной регресии (без взаимодействия), соответствующую по структуре модели ridge-регрессии из предыдущего задания.
- Рассчитайте метрики качества модели MAPE и RMSE для построенной модели множественной линейной регрессии и регуляризованной регресии (ridge-регрессии) с минимальным значением штрафного коэффициента. Какая из моделей лучше описывает закономерность данных? С чем это может быть связано?
В качестве ответа для самопроверки в поле ниже введите значение RMSE для модели ridge-регресии, округленное до тысячных. В качестве десятичного разделителя используйте точку.
Подсказки
- Для расчета метрик подойдут функции из пакета
Metrics. - Значения, предсказанные общей линейной моделью можно получить, вытащив элемент
fitted.valuesиз объекта, содержащего модель. - Для получения предсказаний регуляризованной модели необходимо воспользоваться функцией
predict().- Так как коэффициенты этой модели зависят от значения штрафного коэффициента — а значит и предсказанные значения также будут зависеть от его значения — в функцию
predict()через аргументsнеобходимо указать значения штрафного коэффициента, которое будет использовано для вычисления модельных значений. По заданию это будетs = "lambda.min".
- Так как коэффициенты этой модели зависят от значения штрафного коэффициента — а значит и предсказанные значения также будут зависеть от его значения — в функцию