HW9 // Простая линейная регрессия. Множественная линейная регрессия

Основные задания

#1

Сегодня в нашем распоряжении данные о продаже домов. В данных достаточно много переменных, кодбук можно найти здесь.

Загрузите данные и сохраните их в объект houses. Изучите их структуру. Проверьте наличие пропущенных значений в столбцах.

Для самопроверки в поле ответа введите количество пропущенных значений в переменной Alley. Проверка игнорирует все пробелы.

#2

В данных есть переменная SalePrice — цена участка. Поизучаем, какие характеристики участка оказывают влияние1 на его цену.

В данные также есть переменная LotArea — площадь участка. Кажется, разумно предположить, что площадь участка влияет на его стоимость. Проверим данную гипотезу.

  1. Постройте регрессионную модель, в которой целевой переменной будет цена участка, а предиктором — его площадь.
  2. Проинтерпретируйте результаты моделирования.

Для самопроверки в поле ответа введите коэффициент детерминации (Multiple R-squared) построенной модели. Значение округлите до сотых. В качестве десятичного разделителя используйте точку. Проверка игнорирует все пробелы.

Подсказки
Как построить модель?
  • Для построение модели линейной регрессии используйте функцию lm()
  • Модель задается первым аргументом в формульном виде y ~ x
  • Вторым аргументом функции необходимо передать имеющиеся данные
  • Сохраните модель в объект (например, model1).
Как проинтерпретировать результаты?
  • Вывести статистики модели можно с помощью функции summary(), в которую необходимо передать объект, содержащий регрессионную модель.
  • Интерпретируются прежде всего следующие показатели: F-статистика (и её p-value), коэффициент детерминации и t-статистики (и их p-value).
Ответ неверный
  • Проверьте, что значение округлено до сотых.
  • Проверьте, что в качестве десятичного разделителя используется точка.

#3

  1. Проведите графическую диагностику модели. Дайте интерпретацию полученных результатов.
  2. Визуализируйте модель.

Для самопроверки в поле ответа введите количество влиятельных наблюдений, обнаруженых в ходе диагностики. Если влиятельных наблюдений нет, введите 0. Проверка игнорирует все пробелы.

Подсказки
Как провести диагностику?
  • Для этого необходимо построить диагностически графики с помощью функции plot().
  • Необходимо проверить выполнение допущений о распределении остатков модели, их связи с предсказанными значениями целевой переменной и наличие влиятельных наблюдений.
Как визуализировать модель?

Для визуализации необходимо построить график, отображающий линейную связь между переменными модели.

#4

В данных есть интересная переменная SalesCondition — условия продажи участка. Выдвинем следующую гипотезу: в случае стандартных условий продажи (Normal) и продажи частично достроенного дома (Partial) цена будет выше, чем в случае нестандартной продажи (Abnorml).

Отберите необходимые наблюдения для проверки данной гипотезы.

Для самопроверки в поле ответа введите количество строк в получившемся датасете.

#5

  1. Добавьте в имеющуюся модель еще один предиктор SaleCondition для проверки заявленной выше гипотезы. Постройте модель на отобранных в предыдущем задании данных.
  2. Проинтерпретируйте результаты моделирования.

Для самопроверки в поле ответа введите коэффициент детерминации (Multiple R-squared) построенной модели. Значение округлите до сотых. В качестве десятичного разделителя используйте точку. Проверка игнорирует все пробелы.

Подсказки
Как построить модель?
  • Для построение модели линейной регрессии используйте всё ту же функцию lm()
  • Модель задается первым аргументом в формульном виде y ~ x1 + x2
  • Вторым аргументом функции необходимо передать имеющиеся данные
  • Сохраните модель в объект (например, model2).
Как проинтерпретировать результаты?
  • Вывести статистики модели можно с помощью функции summary(), в которую необходимо передать объект, содержащий регрессионную модель.
  • Интерпретируются прежде всего следующие показатели: F-статистика (и её p-value), коэффициент детерминации и t-статистики (и их p-value).
  • Обратите внимание на смысл коэффицинтов при переменных SaleConditionNormal и SaleConditionPartial.
Ответ неверный
  • Проверьте, что значение округлено до сотых.
  • Проверьте, что в качестве десятичного разделителя используется точка.

#6

  1. Проведите графическую диагностику модели. Дайте интерпретацию полученных результатов.
  2. Сравните по результатам диагностики две построенные модели.

#7

В данных есть еще один количественные предиктор, которые потенциально может влиять на целевую переменную — это LotFrontage, длина стороны участка, которая соединена с улицей города. Выдвинем предположение, что и площадь участка LotArea, и уличная сторона LotFrontage влияют на цену участка SalePrice.

  1. Постройте модель, позволяющую проверить данную гипотезу.
  2. Проинтерпретируйте результаты моделирования.

Для самопроверки в поле ответа введите значение F-статистики модели (F-statistic). Значение округлите до целого. Проверка игнорирует все пробелы.

Подсказки
Как построить модель?
  • Для построение модели линейной регрессии используйте всё ту же функцию lm()
  • Согласно гипотезе, нас интересует модель без взаимодействия.
  • Модель задается первым аргументом в формульном виде y ~ x1 + x2
  • Вторым аргументом функции необходимо передать имеющиеся данные
  • Сохраните модель в объект (например, model3).
Как проинтерпретировать результаты?
  • Вывести статистики модели можно с помощью функции summary(), в которую необходимо передать объект, содержащий регрессионную модель.
  • Интерпретируются прежде всего следующие показатели: F-статистика (и её p-value), коэффициент детерминации и t-статистики (и их p-value).
  • Обратите внимание на смысл коэффицинтов при количественных предикторах.
Ответ неверный

Проверьте, что значение округлено до целого

#8

В последнюю построенную модель включены два количественных предиктора. Мы не проводили подробный разведочный анализ данных, поэтому не знаем, была ли опасность мультиколлинеарности.

Проверьте, есть ли в модели с двумя количественными предикторами проблема мультиколлинеарности.

Для самопроверки в поле ответа введите да, если проблема мультиколлинеарности есть, и нет, если такой проблемы нет.

Подсказки
  • Для проверки наличия мультиколлинеарности необходимо рассчитать коэффициенты вздутия дисперсии (variance inflation factor, VIF) для предикторов модели.
  • Для этого можно воспользоваться функцией vif() из пакета car.

#9

Давайте совместим построенные модели. У нас есть следующие предикторы: LotArea, LotFrontage и SaleCondition (изучаем три условия — Normal, Partial и Abnorml). Нам интересно изучить, как эти предикторы влияют на цену участка SalePrice.

В качестве предикторов в модель должны быть включены основные эффекты предикторов LotArea, LotFrontage и SaleCondition, а также взаимодействие между LotArea и SaleCondition.

  1. Постройте модель на данных, отобранных в задании 4.
  2. Проинтерпретируйте результаты моделирования. с. Проведите графическую диагностику модели.

Для самопроверки в поле ответа введите значение F-статистики модели (F-statistic). Значение округлите до целого. Проверка игнорирует все пробелы.

Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный

#10

  1. По результатам, полученным в задании 9, предположите, можно ли исключить из последней построенной модели взаимодействие предикторов.
  2. «Обновите» модель из задания 9, исключив из неё взаимодействие предикторов. с. Сравните модель со взаимодействием и модель без взаимодействия с помощью статистического теста. Проинтерпретируйте результаты.

Для самопроверки в поле ответа введите значение F-статистики модели (F-statistic). Значение округлите до целого. Проверка игнорирует все пробелы.

Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный

Дополнительные задания

#1

В задании 2 мы построили модель, в которой обнаружелись влиятельные наблюдения. Давайте посмотрим, что будет, если мы исключим эти наблюдения из выборки.

  1. Исключите влиятельные наблюдения из данных, воспользовавшись номером строки, которые представлен на диагностическом графике.
  2. Постройте регрессионную модель, аналогичную той, что была в задании 2, но на новых данных (без влиятельных наблюдений).
  3. Сравните две модели. Используйте коэффициент детерминации и среднюю квадратичную ошибку.

#2

В задании 5 была построена модель с количественным и категориальным предиктором без взаимодействия. Неплохо было бы её визуализировать, однако если мы воспользуемся стандартной функцией geom_smooth(method = "lm") из ggplot2, то получим визуализацию модели со взаимодействием. Для того, чтобы получить нужную визуализацию, надо немного поколдовать.

а. Добавьте в датасет, на котором была построена модель из задания 5, колонку с предсказанными моделью значениями b. Визуализируйте связь между переменными модели с помошью диаграммы рассеяния с. Добавьте визуализацию предсказанных моделью значений с помощью линии

#3

Мы построили несколько моделей в заданиях выше. Давайте выберем ту, которая наиболее хорошо описывает наши данные.

  1. Выберите критерий (критерии) для сравнения моделей — это может быть как статистический тест, так и какая-либо из метрик качества модели (её предсказательной силы).
  2. Используя выбранный критерий (критерии), из построенных моделей выберите ту, которая лучше всего описывает данные.

#4

Для модели, выбранной в предыдущем задании, экспортируйте результаты моделирования: текстовое описание результатов и таблицу со статистиками для предикторов модели.

#5

Мы знаем формулу для матричного вычисления коэффициент регрессионной модели:

\[ \mathbf{b} = ( \mathbf{X}^\top\mathbf{X})^{-1} \mathbf{X}^\top\mathbf{y} \]

Давайте проверим, что результаты вычисления по этой формуле совпадают с результатами работы функции lm(). Рассмотрим случай только с количественными предикторами.

  1. Напишите функцию reg_coef(), которая вычисляет коэффициенты модели множественной линейной регрессии с количественными предкиторами без взаимодействия. Функция должна:
  • принимать на вход:
    • датасет, на котором будет строится модель (например, в аргумент data)
    • название целевой переменной (например, в аргумент y)
    • вектор названия количественных предикторов (например, в аргумент X)
  • вычислять вектор коэффициентов в соответствии с формулой
  • возвращать вектор коэффциентов

Учтите, что:

  • интерсепт также должен быть включен в возвращаемый вектор
  • данные могут содержать пропущенные значения
  1. Проверьте, что команды reg_coef(data = houses, y = "SalePrice", X = c("LotArea", "LotFrontage")) и lm(SalePrice ~ LotArea + LotFrontage, houses) дают одинаковый результат.

  1. Будем говорить здесь о влиянии, исходя из простого здравосмысленного соображения: кажется, что сначала существует участок со своими характеристиками, а затем, когда владельцы решают его продать, они выставляют определенную цену.↩︎