0:13
После того?
как мы посмотрели графически на наши данные, мы можем перейти к оценке моделей.
Ну, в данном случае мы, поскольку понимаем направление причинно-следственной связи,
что это скорость влияет на длину тормозного пути, то, соответственно,
мы построим зависимость длины тормозного пути от скорости,
то есть оценим модель линейной регрессии.
Это выполняется в R одной командой, то есть мы так и напишем, что наша модель
равняется lm, lm – это специальная команда для метода наименьших квадратов,
«linear model», данные мы возьмем из набора данных d2,
и дальше надо написать формулу зависимости.
У R, у команды lm, точнее, есть свой специальный формат описания моделей.
Зависимую переменную пишут сначала, то есть в данном случае зависимая
переменная dist, длина тормозного пути, после этого пишут значок тильды (~).
Вот самое сложное – это найти тильду на клавиатуре.
После того как вы нашли тильду на клавиатуре, оценить модель очень легко.
Вот, поставили тильду,
а после этого через плюс надо написать все объясняющие переменные, все регрессоры.
Ну, поскольку у нас регрессор один – это скорость,
то мы без всяких плюсов просто пишем speed.
Нажимаем Ctrl + Enter, все, наша модель оценилась.
Ну, визуально вроде никакой реакции, но это нормально, то есть главное, что вот
есть треугольничек, который говорит, что никакой ошибки нет и модель оценилась.
Мы, соответственно, можем посмотреть на результаты оценивания,
набрать model и нажать Ctrl + Enter.
И вот мы видим оценки коэффициентов.
Оценка коэффициентов β₁ с крышкой минус пять iii и β₂ с крышкой,
коэффициент перед скоростью 0,7.
То есть как мы проинтерпретируем?
Это означает, что в среднем при увеличении скорости на один километр
в час длина тормозного пути увеличивается на 0,7 метра.
Ну, к сожалению, вот этот коэффициент,
хотя его теоретически тоже можно проинтерпретировать, и мы ожидаем,
что он должен быть около нуля, поскольку по смыслу, что это такое?
Это длина тормозного пути у машины,
которая движется с нулевой скоростью, она, это intercept, пересечение.
Ну, здесь получилась оценка минус пять.
Ну, такая вышла.
Соответственно, что можно извлечь из модели?
Когда компьютер оценил модель, мы,
естественно, из модели можем извлечь кучу показателей.
Ну, например, мы можем извлечь в отдельный вектор сами коэффициенты.
Давайте назовем этот вектор beta_hat, β с крышкой, да.
beta_hat, соответственно, равняются коэффициенты от нашей модели,
и это удобно, если мне нужны какие-то дальнейшие действия над коэффициентами,
то вот они у меня лежат в отдельном векторе β с крышкой, beta_hat.
Что еще можно изучить?
Можно остатки извлечь, ну, допустим, ε с крышкой, eps_hat.
Это residuals.
Не забывайте, что работает tab.
Вот написали residu, нажали tab, и тут – варианты.
Мы выбираем residuals от model, и можно посмотреть на вектор eps_hat.
Это такой длинный вектор, это вектор ε с крышкой, то есть некоторые ε с крышкой,
видно, положительны, некоторые ε с крышкой, видно, отрицательны.
То есть где-то разница между фактическим и предсказанным y в одну сторону,
где-то – в другую.
Я, на всякий случай, напомню, что сам y, давайте его поместим для удобства в
вектор y, он живет в табличке d2 в переменной dist.
В табличке d2 в переменной dist живет наш y, а y прогнозное,
y с крышкой, y_hat, его можно извлечь из модели с помощью команды fitted,
fitted, ну, то есть означает «подогнанный», да.
Fitted от модели, это наш, то есть можно посмотреть на наш вектор y,
а можно посмотреть на вектор y с крышкой прогнозный.
Помимо, соответственно, β с крышкой,
остатков ε с крышкой, y, y с крышкой,
можно также извлечь показатели RSS, ESS, TSS, R2 и так далее.
Соответственно, для RSS есть специальная команда,
команда называется deviance, deviance от model – это есть RSS.
Ну, такое название связано с неким обобщением понятия RSS для других моделей.
TSS, к сожалению, готовой команды нет, но, благо, посчитать его руками несложно.
Что такое TSS?
Это сумма квадратов отклонения y от среднего.
Ну, давайте так и напишем.
Если я напишу y-mean(y), это будут отклонения y от среднего.
Если я их возведу в квадрат, это будут квадраты отклонения от среднего,
а если я еще потом допишу сумму от всего этого счастья,
специально поставлю пробелы, чтобы выражение легче читалось,
то это и будет сумма квадратов отклонения от среднего.
И можно посмотреть, чему равен TSS.
Ну, естественно, как мы и ожидали, TSS больше, чем RSS,
и можно, например, посчитать R².
Я напомню, что R².
Да, ESS, ESS – это, естественно, TSS минус RSS.
И можно посчитать R².
R² – это доля объясненной дисперсии,
то есть отношение объясненной дисперсии ESS к TSS,
и в нашем случае R² равен 0,65.
И второй способ расчета коэффициента R²: можно взять выборочную корреляцию между
вектором Y и вектором Y с крышкой, то есть взять корреляцию между Y и Y с крышкой,
между фактическими значениями тормозного пути и прогнозами,
это будет выборочная корреляция.
А если я эту выборочную корреляцию возведу в квадрат,
то у меня получится ни что иное, как R².
То есть два способа посчитать R², можно так,
можно как выборочную корреляцию.
Соответственно, что еще.
Матрицу X тоже можно извлечь.
Иногда это бывает нужно в некоторых целях, ну, давайте в учебных целях из нашей
модели, есть такое понятие model.matrix, model.matrix,
и, соответственно, мы здесь можем вот посмотреть
как выглядела матрица X большое для нашей модели.
Ну, если на нее посмотреть, написать X, нажать Ctrl + Enter, то это действительно
матрица размера количества наблюдений 50, и два столбика у нее.
Первый столбик из единичек, второй столбик из, соответственно, скоростей машины.
Ну, после того, что мы все извлекли из модели, мы можем, например,
спрогнозировать, можем использовать нашу модель для прогнозирования.
Давайте для этого создадим новый набор данных, nd, новый набор данных, это
будет data.frame, в котором есть только переменная speed, и она будет равна.
Ну, допустим, я хочу спрогнозировать длину тормозного пути для машины,
которая движется, ну, которая характеристик 1920-х годов,
которые движутся одна со скоростью 40 километров в час, а другая – 60.
Сколько им потребуется на торможение?
Соответственно, это вот я создал новый набор данных,
давайте посмотрим на него, нажмем nd, Enter.
Вот. Это просто набор данных с одним вектором и
два наблюдения, 40 и 60.
И теперь я могу спрогнозировать, команда predict,
и спрогнозировать с помощью модели, которую я создал,
потому что прогнозы по разным моделям могут отличаться.
Соответственно, использую модель под названием «модель для прогнозирования»,
а данные беру из набора данных nd.
И у меня получается, что, ну, при тех характеристиках, у первой на торможение
ушло бы 23 метра, а у второй на тормозной путь ушло бы 37 метров.
И помимо того, что мы можем спрогнозировать для нового
набора данных по модели, мы также можем визуализировать результаты оценивания,
то есть построить на этом же графике, где находится диаграмма рассеивания,
нарисовать оцененную нами линию.
Ну и, соответственно, просто скопируем код старого графика вот qplot,
data равно d2, по горизонтали speed, по вертикали dist.
Скопируем этот код и, соответственно,
воспользуемся тем, что пакет ggplot2,
в котором живет функция qplot, позволяет рисовать графики по слоям,
то есть мы напишем плюс и напишем, что надо указать на новом слое.
На новом слое надо указать кривую, заменяющую точки, то есть
в каком-то смысле сглаживающую кривую, поэтому эта опция называется stat_smooth,
и указать метод, которым получена эта кривая, метод lm.
Есть, конечно, и другие методы.
И, соответственно, нажимаем Ctrl + Enter и получаем тот же самый график,
но только уже нанесена наша прямая, которая, я напомню,
имеет уравнение, сейчас мы посмотрим, вот наша модель,
минус 5 плюс 0,7 умножить на speed.
Соответственно, мы на данном примере научились оценивать простейшую модель
методом наименьших квадратов, извлекать интересующие нас показатели,
как то: оценки коэффициентов, ε с крышкой, Y с крышкой,
RSS, TSS, ESS, R², даже двумя способами, матрицу X,
научились прогнозировать и визуализировать результаты оценивания на графике.