Coefficients estimate std error t value pr t

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

Оценка результатов линейной регрессии

Время прочтения
6 мин

Просмотры 91K

Введение

Сегодня уже все, кто хоть немного интересуется дата майнингом, наверняка слышали про простую линейную регрессию. Про нее уже писали на хабре, а также подробно рассказывал Эндрю Нг в своем известном курсе машинного обучения. Линейная регрессия является одним из базовых и самых простых методов машинного обучения, однако очень редко упоминаются методы оценки качества построенной модели. В этой статье я постараюсь немного исправить это досадное упущение на примере разбора результатов функции summary.lm() в языке R. При этом я постараюсь предоставить необходимые формулы, таким образом все вычисления можно легко запрограммировать на любом другом языке. Эта статья предназначена для тех, кто слышал о том, что можно строить линейную регрессию, но не сталкивался со статистическими процедурами для оценки ее качества.

Модель линейной регрессии

Итак, пусть есть несколько независимых случайных величин X1, X2, …, Xn (предикторов) и зависящая от них величина Y (предполагается, что все необходимые преобразования предикторов уже сделаны). Более того, мы предполагаем, что зависимость линейная, а ошибки рапределены нормально, то есть

где I — единичная квадратная матрица размера n x n.

Итак, у нас есть данные, состоящие из k наблюдений величин Y и Xi и мы хотим оценить коэффициенты. Стандартным методом для нахождения оценок коэффициентов является метод наименьших квадратов. И аналитическое решение, которое можно получить, применив этот метод, выглядит так:

где b с крышкой — оценка вектора коэффициентов, y — вектор значений зависимой величины, а X — матрица размера k x n+1 (n — количество предикторов, k — количество наблюдений), у которой первый столбец состоит из единиц, второй — значения первого предиктора, третий — второго и так далее, а строки соответствуют имеющимся наблюдениям.

Функция summary.lm() и оценка получившихся результатов

Теперь рассмотрим пример построения модели линейной регрессии в языке R:

> library(faraway)
> lm1<-lm(Species~Area+Elevation+Nearest+Scruz+Adjacent, data=gala)
> summary(lm1)

Call:
lm(formula = Species ~ Area + Elevation + Nearest + Scruz + Adjacent, 
    data = gala)

Residuals:
     Min       1Q   Median       3Q      Max 
-111.679  -34.898   -7.862   33.460  182.584 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.068221  19.154198   0.369 0.715351    
Area        -0.023938   0.022422  -1.068 0.296318    
Elevation    0.319465   0.053663   5.953 3.82e-06 ***
Nearest      0.009144   1.054136   0.009 0.993151    
Scruz       -0.240524   0.215402  -1.117 0.275208    
Adjacent    -0.074805   0.017700  -4.226 0.000297 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 60.98 on 24 degrees of freedom
Multiple R-squared:  0.7658,	Adjusted R-squared:  0.7171 
F-statistic:  15.7 on 5 and 24 DF,  p-value: 6.838e-07

Таблица gala содержит некоторые данные о 30 Галапагосских островах. Мы будем рассматривать модель, где Species — количество разных видов растений на острове линейно зависит от нескольких других переменных.

Рассмотрим вывод функции summary.lm().
Сначала идет строка, которая напоминает, как строилась модель.
Затем идет информация о распределении остатков: минимум, первая квартиль, медиана, третья квартиль, максимум. В этом месте было бы полезно не только посмотреть на некоторые квантили остатков, но и проверить их на нормальность, например тестом Шапиро-Уилка.
Далее — самое интересное — информация о коэффициентах. Здесь потребуется немного теории.
Сначала выпишем следующий результат:

при этом сигма в квадрате с крышкой является несмещенной оценкой для реальной сигмы в квадрате. Здесь b — реальный вектор коэффициентов, а эпсилон с крышкой — вектор остатков, если в качестве коэффициентов взять оценки, полученные методом наименьших квадратов. То есть при предположении, что ошибки распределены нормально, вектор коэффициентов тоже будет распределен нормально вокруг реального значения, а его дисперсию можно несмещенно оценить. Это значит, что можно проверять гипотезу на равенство коэффициентов нулю, а следовательно проверять значимость предикторов, то есть действительно ли величина Xi сильно влияет на качество построенной модели.
Для проверки этой гипотезы нам понадобится следующая статистика, имеющая распределение Стьюдента в том случае, если реальное значение коэффициента bi равно 0:

где
— стандартная ошибка оценки коэффициента, а t(k-n-1) — распределение Стьюдента с k-n-1 степенями свободы.

Теперь все готово для продолжения разбора вывода функции summary.lm().
Итак, далее идут оценки коэффициентов, полученные методом наименьших квадратов, их стандартные ошибки, значения t-статистики и p-значения для нее. Обычно p-значение сравнивается с каким-нибудь достаточно малым заранее выбранным порогом, например 0.05 или 0.01. И если значение p-статистики оказывается меньше порога, то гипотеза отвергается, если же больше, ничего конкретного, к сожалению, сказать нельзя. Напомню, что в данном случае, так как распределение Стьюдента симметричное относительно 0, то p-значение будет равно 1-F(|t|)+F(-|t|), где F — функция распределения Стьюдента с k-n-1 степенями свободы. Также, R любезно обозначает звездочками значимые коэффициенты, для которых p-значение достаточно мало. То есть, те коэффициенты, которые с очень малой вероятностью равны 0. В строке Signif. codes как раз содержится расшифровка звездочек: если их три, то p-значение от 0 до 0.001, если две, то оно от 0.001 до 0.01 и так далее. Если никаких значков нет, то р-значение больше 0.1.

В нашем примере можно с большой уверенностью сказать, что предикторы Elevation и Adjacent действительно с большой вероятностью влияют на величину Species, а вот про остальные предикторы ничего определенного сказать нельзя. Обычно, в таких случаях предикторы убирают по одному и смотрят, насколько изменяются другие показатели модели, например BIC или Adjusted R-squared, который будет разобран далее.

Значение Residual standart error соответствует просто оценке сигмы с крышкой, а степени свободы вычисляются как k-n-1.

А теперь самая важные статистики, на которые в первую очередь стоит смотреть: R-squared и Adjusted R-squared:

где Yi — реальные значения Y в каждом наблюдении, Yi с крышкой — значения, предсказанные моделью, Y с чертой — среднее по всем реальным значениям Yi.

Начнем со статистики R-квадрат или, как ее иногда называют, коэффициента детерминации. Она показывает, насколько условная дисперсия модели отличается от дисперсии реальных значений Y. Если этот коэффициент близок к 1, то условная дисперсия модели достаточно мала и весьма вероятно, что модель неплохо описывает данные. Если же коэффициент R-квадрат сильно меньше, например, меньше 0.5, то, с большой долей уверенности модель не отражает реальное положение вещей.

Однако, у статистики R-квадрат есть один серьезный недостаток: при увеличении числа предикторов эта статистика может только возрастать. Поэтому, может показаться, что модель с большим количеством предикторов лучше, чем модель с меньшим, даже если все новые предикторы никак не влияют на зависимую переменную. Тут можно вспомнить про принцип бритвы Оккама. Следуя ему, по возможности, стоит избавляться от лишних предикторов в модели, поскольку она становится более простой и понятной. Для этих целей была придумана статистика скорректированный R-квадрат. Она представляет собой обычный R-квадрат, но со штрафом за большое количество предикторов. Основная идея: если новые независимые переменные дают большой вклад в качество модели, значение этой статистики растет, если нет — то наоборот уменьшается.

Для примера рассмотрим ту же модель, что и раньше, но теперь вместо пяти предикторов оставим два:

> lm2<-lm(Species~Elevation+Adjacent, data=gala)
> summary(lm2)

Call:
lm(formula = Species ~ Elevation + Adjacent, data = gala)

Residuals:
    Min      1Q  Median      3Q     Max 
-103.41  -34.33  -11.43   22.57  203.65 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.43287   15.02469   0.095 0.924727    
Elevation    0.27657    0.03176   8.707 2.53e-09 ***
Adjacent    -0.06889    0.01549  -4.447 0.000134 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 60.86 on 27 degrees of freedom
Multiple R-squared:  0.7376,	Adjusted R-squared:  0.7181 
F-statistic: 37.94 on 2 and 27 DF,  p-value: 1.434e-08

Как можно увидеть, значение статистики R-квадрат снизилось, однако значение скорректированного R-квадрат даже немного возросло.

Теперь проверим гипотезу о равенстве нулю всех коэффициентов при предикторах. То есть, гипотезу о том, зависит ли вообще величина Y от величин Xi линейно. Для этого можно использовать следующую статистику, которая, если гипотеза о равенстве нулю всех коэффициентов верна, имеет распределение Фишера c n и k-n-1 степенями свободы:

Значение F-статистики и p-значение для нее находятся в последней строке вывода функции summary.lm().

Заключение

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

  • Редакция Кодкампа

17 авг. 2022 г.
читать 2 мин


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

Coefficients:
 Estimate Std. Error t value Pr(>|t|) 
(Intercept) 10.0035 5.9091 1.693 0.1513 
x1 1.4758 0.5029 2.935 0.0325 *
x2 -0.7834 0.8014 -0.978 0.3732

Столбец Pr(>|t|) представляет значение p, связанное со значением в столбце значения t .

Если p-значение меньше определенного уровня значимости (например, α = 0,05), то говорят, что переменная-предиктор имеет статистически значимую связь с переменной отклика в модели.

В следующем примере показано, как интерпретировать значения в столбце Pr(>|t|) для данной модели регрессии.

Пример. Как интерпретировать значения Pr(>|t|)

Предположим, мы хотели бы подобрать модель множественной линейной регрессии, используя переменные-предикторы x1 и x2 и одну переменную ответа y .

В следующем коде показано, как создать фрейм данных и подогнать модель регрессии к данным:

#create data frame
df <- data.frame(x1=c(1, 3, 3, 4, 4, 5, 6, 6),
 x2=c(7, 7, 5, 6, 5, 4, 5, 6),
 y=c(8, 8, 9, 9, 13, 14, 17, 14))

#fit multiple linear regression model
model <- lm(y ~ x1 + x2, data=df)

#view model summary
summary(model)

Call:
lm(formula = y ~ x1 + x2, data = df)

Residuals:
 1 2 3 4 5 6 7 8 
 2.0046 -0.9470 -1.5138 -2.2062 1.0104 -0.2488 2.0588 -0.1578 

Coefficients:
 Estimate Std. Error t value Pr(>|t|) 
(Intercept) 10.0035 5.9091 1.693 0.1513 
x1 1.4758 0.5029 2.935 0.0325 *
x2 -0.7834 0.8014 -0.978 0.3732 
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.867 on 5 degrees of freedom
Multiple R-squared: 0.7876, Adjusted R-squared: 0.7026 
F-statistic: 9.268 on 2 and 5 DF, p-value: 0.0208

Вот как интерпретировать значения в столбце Pr(>|t|):

  • Значение p для переменной-предиктора x1 равно 0,0325.Поскольку это значение меньше 0,05, оно имеет статистически значимую связь с переменной отклика в модели.
  • Значение p для переменной-предиктора x2 равно 0,3732.Поскольку это значение не меньше 0,05, оно не имеет статистически значимой связи с переменной отклика в модели.

Коды значимости под таблицей коэффициентов говорят нам, что одна звездочка (*) рядом со значением p, равным 0,0325, означает, что значение p является статистически значимым при α = 0,05.

Как на самом деле рассчитывается Pr(>|t|)?

Вот как вычисляется значение Pr(>|t|):

Шаг 1: Рассчитайте значение t

Сначала мы вычисляем значение t по следующей формуле:

  • значение t = оценка / стандарт. Ошибка

Например, вот как вычислить значение t для предикторной переменной x1:

#calculate t-value
1.4758 / .5029

[1] 2.934579

Шаг 2: Рассчитайте p-значение

Далее мы вычисляем p-значение. Это представляет вероятность того, что абсолютное значение t-распределения больше 2,935.

Мы можем использовать следующую формулу в R для вычисления этого значения:

  • p-значение = 2 * pt (абс (значение t), остаточная df, нижний.хвост = ЛОЖЬ)

Например, вот как рассчитать p-значение для t-значения 2,935 с 5 остаточными степенями свободы:

#calculate p-value
2 * pt( abs (2.935), 5, lower. tail = FALSE )

[1] 0.0324441

Обратите внимание, что это p-значение соответствует p-значению в выходных данных регрессии сверху.

Примечание.Значение остаточных степеней свободы можно найти в нижней части выходных данных регрессии. В нашем примере их оказалось 5:

Residual standard error: 1.867 on 5 degrees of freedom

Дополнительные ресурсы

Как выполнить простую линейную регрессию в R
Как выполнить множественную линейную регрессию в R
Как построить результаты множественной линейной регрессии в R


Whenever you perform linear regression in R, the output of your regression model will be displayed in the following format:

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  10.0035     5.9091   1.693   0.1513  
x1            1.4758     0.5029   2.935   0.0325 *
x2           -0.7834     0.8014  -0.978   0.3732 

The Pr(>|t|) column represents the p-value associated with the value in the t value column.

If the p-value is less than a certain significance level (e.g. α = .05) then the predictor variable is said to have a statistically significant relationship with the response variable in the model.

The following example shows how to interpret values in the Pr(>|t|) column for a given regression model.

Example: How to Interpret Pr(>|t|) Values

Suppose we would like to fit a multiple linear regression model using predictor variables x1 and x2 and a single response variable y.

The following code shows how to create a data frame and fit a regression model to the data:

#create data frame
df <- data.frame(x1=c(1, 3, 3, 4, 4, 5, 6, 6),
                 x2=c(7, 7, 5, 6, 5, 4, 5, 6),
                 y=c(8, 8, 9, 9, 13, 14, 17, 14))

#fit multiple linear regression model
model <- lm(y ~ x1 + x2, data=df)

#view model summary
summary(model)

Call:
lm(formula = y ~ x1 + x2, data = df)

Residuals:
      1       2       3       4       5       6       7       8 
 2.0046 -0.9470 -1.5138 -2.2062  1.0104 -0.2488  2.0588 -0.1578 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  10.0035     5.9091   1.693   0.1513  
x1            1.4758     0.5029   2.935   0.0325 *
x2           -0.7834     0.8014  -0.978   0.3732  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.867 on 5 degrees of freedom
Multiple R-squared:  0.7876,	Adjusted R-squared:  0.7026 
F-statistic: 9.268 on 2 and 5 DF,  p-value: 0.0208

Here’s how to interpret the values in the Pr(>|t|) column:

  • The p-value for the predictor variable x1 is .0325. Since this value is less than .05, it has a statistically significant relationship with the response variable in the model.
  • The p-value for the predictor variable x2 is .3732. Since this value is not less than .05, it does not have a statistically significant relationship with the response variable in the model.

The significance codes under the coefficient table tell us that a single asterik (*) next to the p-value of .0325 means the p-value is statistically significant at α = .05.

How is Pr(>|t|) Actually Calculated?

Here’s how the value for Pr(>|t|) is actually calculated:

Step 1: Calculate the t value

First, we calculate the t value using the following formula:

  • t value = Estimate / Std. Error

For example, here’s how to calculate the t value for the predictor variable x1:

#calculate t-value
1.4758 / .5029

[1] 2.934579

Step 2: Calculate the p-value

Next, we calculate the p-value. This represents the probability that the absolute value of the t-distribution is greater than 2.935.

We can use the following formula in R to calculate this value:

  • p-value = 2 * pt(abs(t value), residual df, lower.tail = FALSE)

For example, here’s how to calculate the p-value for a t-value of 2.935 with 5 residual degrees of freedom:

#calculate p-value
2 * pt(abs(2.935), 5, lower.tail = FALSE)

[1] 0.0324441

Notice that this p-value matches the p-value in the regression output from above.

Note: The value for the residual degrees of freedom can be found near the bottom of the regression output. In our example, it turned out to be 5:

Residual standard error: 1.867 on 5 degrees of freedom

Additional Resources

How to Perform Simple Linear Regression in R
How to Perform Multiple Linear Regression in R
How to Plot Multiple Linear Regression Results in R

Мы рассмотрим

  • Базовые идеи корреляционного анализа
  • Проблему двух статистических подходов: “Тестирование гипотез vs. построение моделей”
  • Разнообразие статистических моделей
  • Основы регрессионного анализа

Вы сможете

  • Оценить взаимосвязь между измеренными величинами
  • Объяснить что такое линейная модель
  • Формализовать запись модели в виде уравнения
  • Подобрать модель линейной регрессии
  • Протестировать гипотезы о наличии зависимости при помощи t-критерия или F-критерия
  • Оценить предсказательную силу модели

Знакомимся с даными

Пример: IQ и размеры мозга

Зависит ли уровень интеллекта от размера головного мозга? (Willerman et al. 1991)

Scan_03_11 by bucaorg(Paul_Burnett) on Flickr

Было исследовано 20 девушек и 20 молодых людей

У каждого индивида измеряли:

  • вес,
  • рост,
  • размер головного мозга (количество пикселей на изображении ЯМР сканера)
  • Уровень интеллекта измеряли с помощью IQ тестов

Пример взят из работы: Willerman, L., Schultz, R., Rutledge, J. N., and Bigler, E. (1991), “In Vivo Brain Size and Intelligence,” Intelligence, 15, 223-228.
Данные представлены в библиотеке “The Data and Story Library” http://lib.stat.cmu.edu/DASL/

Знакомство с данными

Посмотрим на датасет

brain <- read.csv("data/IQ_brain.csv", header = TRUE)
head(brain)
##   Gender FSIQ VIQ PIQ Weight Height MRINACount
## 1 Female  133 132 124    118   64.5     816932
## 2   Male  140 150 124     NA   72.5    1001121
## 3   Male  139 123 150    143   73.3    1038437
## 4   Male  133 129 128    172   68.8     965353
## 5 Female  137 132 134    147   65.0     951545
## 6 Female   99  90 110    146   69.0     928799

Есть ли пропущенные значения?

sum(!complete.cases(brain))
## [1] 2

Где пропущенные значения?

Где именно?

sapply(brain, function(x) sum(is.na(x)))
##     Gender       FSIQ        VIQ        PIQ     Weight     Height 
##          0          0          0          0          2          1 
## MRINACount 
##          0

Что это за случаи?

brain[!complete.cases(brain), ]
##    Gender FSIQ VIQ PIQ Weight Height MRINACount
## 2    Male  140 150 124     NA   72.5    1001121
## 21   Male   83  83  86     NA     NA     892420

Каков объем выборки

nrow(brain) ## Это без учета пропущенных значений
## [1] 40

Корреляционный анализ

Цель практически любого исследования — поиск взаимосвязи величин и создание базы для предсказания неизвестного на основе имеющихся данных

Корреляционный анализ

Наличие связи между явлениями не означает, что между ними существует причинно-следственная связь.

Сила связи между явлениями может быть количественно измерена.

Основные типы линейной связи между величинами

Криволинейные связи между величинами

Коэффициент ковариации

Оценивает двух величин от своих средних значений [cov_{x,y} = frac{sum(x_i-bar{x})(y_i-bar{y})}{n — 1}]

Коэффициент ковариации варьирует в интервале (-infty < cov_{x,y} < +infty)

Коэффициент корреляции

Это стандартизованное значение ковариации

[r_{x,y} = frac{sum(x_i-bar{x})(y_i-bar{y})} {sqrt{sum(x_i-bar{x})^2}sqrt{sum(y_i-bar{y})^2}} = frac{cov_{x,y}} {sigma_x sigma_y}]

Коэффициент корреляции варьирует в интервале (-1 le r_{x,y} le +1)

Коэффициенты корреляции и условия их применимости

Коэффициент Функция Особенности применения
Коэф. Пирсона cor(x,y,method="pearson") Оценивает связь двух нормально распределенных величин. Выявляет только линейную составляющую взаимосвязи.
Ранговые коэффициенты (коэф. Спирмена, Кендалла) cor(x,y,method="spearman")
cor(x,y,method="kendall")
Не зависят от формы распределения. Могут оценивать связь для любых монотонных зависимостей.

Оценка статистической значимости коэффициентов корреляции

  • Коэффициент корреляции — это статистика, значение которой описывает степень взаимосвязи двух сопряженных переменных. Следовательно применима логика статистического критерия.
  • Нулевая гипотеза (H_0: r=0)
  • Бывают двусторонние (H_a: rne 0) и односторонние критерии (H_a: r>0) или (H_a: r<0)
  • Ошибка коэффициента Пирсона: (SE_r=sqrt{frac{1-r^2}{n-2}})
  • Стандартизованная величина (t=frac{r}{SE_r}) подчиняется распределению Стьюдента с параметром (df = n-2)
  • Для ранговых коэффициентов существует проблема “совпадающих рангов” (tied ranks), что приводит к приблизительной оценке (r) и приблизительной оценке уровня значимости.
  • Значимость коэффициента корреляции можно оценить пермутационным методом

Задание

  • Постройте точечную диаграмму, отражающую взаимосвязь между результатами IQ-теста (PIQ) и размером головного мозга (MRINACount)
  • Определите силу и направление связи между этими величинами
  • Оцените сатистическую значимость коэффициента корреляции Пирсона между этими двумя переменными
  • Придумайте способ, как оценить корреляцию между всеми парами исследованных признаков

Hint 1: Обратите внимание на то, что в датафрейме есть пропущенные значения. Изучите, как работают с NA функции, вычисляющие коэффициенты корреляции.

Решение

pl_brain <- ggplot(brain, 
               aes(x = MRINACount, y = PIQ)) + 
  geom_point() + 
  xlab("Brain size") + 
  ylab("IQ test")
pl_brain

Решение

cor.test(brain$PIQ, brain$MRINACount, method = "pearson", alternative = "two.sided")
## 
##  Pearson's product-moment correlation
## 
## data:  brain$PIQ and brain$MRINACount
## t = 3, df = 38, p-value = 0.01
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.0856 0.6232
## sample estimates:
##   cor 
## 0.387

Решение

cor(brain[,2:6], use = "pairwise.complete.obs")
##           FSIQ     VIQ      PIQ   Weight  Height
## FSIQ    1.0000  0.9466  0.93413 -0.05148 -0.0860
## VIQ     0.9466  1.0000  0.77814 -0.07609 -0.0711
## PIQ     0.9341  0.7781  1.00000  0.00251 -0.0767
## Weight -0.0515 -0.0761  0.00251  1.00000  0.6996
## Height -0.0860 -0.0711 -0.07672  0.69961  1.0000

Два подхода к исследованию:
Тестирование гипотезы
VS
Построение модели

  • Проведя корреляционный анализ, мы лишь ответили на вопрос “Существует ли статистически значимая связь между величинами?”

  • Сможем ли мы, используя это знание, предсказть значения одной величины, исходя из знаний другой?

Тестирование гипотезы VS построение модели

  • Простейший пример
  • Между путем, пройденным автомобилем, и временем, проведенным в движении, несомненно есть связь. Хватает ли нам этого знания?
  • Для расчета величины пути в зависимости от времени необходимо построить модель: (S=Vt), где (S) — зависимая величина, (t) — независимая переменная, (V) — параметр модели.
  • Зная параметр модели (скорость) и значение независимой переменной (время), мы можем рассчитать (cмоделировать) величину пройденного пути

Какие бывают модели?

Линейные и нелинейные модели

Линейные модели [y = b_0 + b_1x]
[y = b_0 + b_1x_1 + b_2x_2] Нелинейные модели [y = b_0 + b_1^x]
[y = b_0^{b_1x_1+b_2x_2}]

Простые и многокомпонентные (множественные) модели

  • Простая модель [y = b_0 + b_1x]

  • Множественная модель [y = b_0 + b_1x_1 + b_2x_2 + b_3x_3 + … + b_nx_n]

Детерминистские и стохастические модели

Модель: (у_i = 2 + 5x_i)
Два параметра: угловой коэффициент (slope) (b_1=5); свободный член (intercept) (b_0=2)
Чему равен (y) при (x=10)?

Модель: (у_i = 2 + 5x_i + varepsilon_i)
Появляется дополнительный член (varepsilon_i) Он вводит в модель влияние неучтенных моделью факторов. Обычно считают, что (epsilon in N(0, sigma^2))

Случайная и фиксированая часть модели

В стохастические модели выделяется две части:

Фиксированная часть: (у_i = 2 + 5x_i)
Случайная часть: (varepsilon_i)

Бывают модели, в которых случайная часть выглядит существенно сложнее (модели со смешанными эффектами). В таких моделях необходимо смоделировать еще и поведение случайной части.

Модели с дискретными предикторами

Модель для данного примера имеет такой вид

(response = 4.6 + 5.3I_{Level2} + 9.9 I_{Level3})

(I_{i}) — dummy variable

Модель для зависимости величины IQ от размера головного мозга

Какая из линий “лучше” описывает облако точек?

## `geom_smooth()` using formula 'y ~ x'

Найти оптимальную модель позволяет регрессионный анализ

“Essentially, all models are wrong,
but some are useful”
(Georg E. P. Box)

Происхождение термина “регрессия”

Френсис Галтон (Francis Galton)

“the Stature of the adult offspring … [is] … more mediocre than the stature of their Parents” (цит. по Legendre & Legendre, 1998)

Рост регрессирует (возвращается) к популяционной средней
Угловой коэффициент в зависимости роста потомков от роста родителей- коэффциент регресси

Подбор линии регрессии проводится с помощью двух методов

  • С помощью метода наименьших квадратов (Ordinary Least Squares) — используется для простых линейных моделей
  • Через подбор функции максимального правдоподобия (Maximum Likelihood) — используется для подгонки сложных линейных и нелинейных моделей.

Кратко о методе макcимального правдоподобия

Симулированный пример, в котором

[
y_i = 10x_i + varepsilon_i \
varepsilon in N(0, 10)
]

Точки (данные) — это выборки из нескольких “локальных” генеральных совокупностей с нормальным распределением зависимой переменной (каждая совокупность соответствует одному значению предиктора).

Линия регрессии проходит через средние значения нормальных распределений.

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

Кратко о методе макcимального правдоподобия

Аналогичная картинка, но с использованием geom_violin()

## `geom_smooth()` using formula 'y ~ x'

Метод наименьших квадратов

(из кн. Quinn, Keough, 2002, стр. 85)

Остатки (Residuals):
[varepsilon_i = y_i — hat{y_i}]

Линия регрессии (подобранная модель) — это та линия, у которой (sum{varepsilon_i}^2) минимальна.

Подбор модели методом наменьших квадратов с помощью функци lm()

fit <- lm(formula, data)

Модель записывается в виде формулы

Модель Формула
Простая линейная регрессия
(hat{y_i}=b_0 + b_1x_i)
Y ~ X
Y ~ 1 + X
Y ~ X + 1
Простая линейная регрессия
(без (b_0), “no intercept”)
(hat{y_i}=b_1x_i)
Y ~ -1 + X
Y ~ X - 1
Уменьшенная простая линейная регрессия
(hat{y_i}=b_0)
Y ~ 1
Y ~ 1 - X
Множественная линейная регрессия
(hat{y_i}=b_0 + b_1x_i +b_2x_2)
Y ~ X1 + X2

Подбор модели методом наменьших квадратов с помощью функци lm()

fit <- lm(formula, data)

Элементы формул для записи множественных моделей

Элемент формулы Значение
: Взаимодействие предикторов
Y ~ X1 + X2 + X1:X2
* Обозначает полную схему взаимодействий
Y ~ X1 * X2 * X3
аналогично
Y ~ X1 + X2 + X3+ X1:X2 + X1:X3 + X2:X3 + X1:X2:X3
. Y ~ .
В правой части формулы записываются все переменные из датафрейма, кроме Y

Подберем модель, наилучшим образом описывающую зависимость результатов IQ-теста от размера головного мозга

brain_model <- lm(PIQ ~ MRINACount, data = brain)
brain_model
## 
## Call:
## lm(formula = PIQ ~ MRINACount, data = brain)
## 
## Coefficients:
## (Intercept)   MRINACount  
##     1.74376      0.00012

Как трактовать значения параметров регрессионной модели?

Как трактовать значения параметров регрессионной модели?

  • Угловой коэффициент (slope) показывает на сколько единиц изменяется предсказанное значение (hat{y}) при изменении на одну единицу значения предиктора ((x))
  • Свободный член (intercept) — величина во многих случаях не имеющая “смысла”, просто поправочный коэффициент, без которого нельзя вычислить (hat{y}).
    NB! В некоторых линейных моделях он имеет смысл, например, значения (hat{y}) при (x = 0).
  • Остатки (residuals) — характеризуют влияние неучтенных моделью факторов.

Вопросы:

  1. Чему равны угловой коэффициент и свободный член полученной модели brain_model?
  2. Какое значение IQ-теста предсказывает модель для человека с объемом мозга равным 900000
  3. Чему равно значение остатка от модели для человека с порядковым номером 10?

Ответы

coefficients(brain_model) [1]
## (Intercept) 
##        1.74
coefficients(brain_model) [2]
## MRINACount 
##    0.00012

Ответы

as.numeric(coefficients(brain_model) [1] + coefficients(brain_model) [2] * 900000)
## [1] 110

Ответы

brain$PIQ[10] - fitted(brain_model)[10]
##   10 
## 30.4
residuals(brain_model)[10]
##   10 
## 30.4

Углубляемся в анализ модели: функция summary()

summary(brain_model)
## 
## Call:
## lm(formula = PIQ ~ MRINACount, data = brain)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -39.6  -17.9   -1.6   17.0   42.3 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  1.7437570 42.3923825    0.04    0.967  
## MRINACount   0.0001203  0.0000465    2.59    0.014 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21 on 38 degrees of freedom
## Multiple R-squared:  0.15,   Adjusted R-squared:  0.127 
## F-statistic: 6.69 on 1 and 38 DF,  p-value: 0.0137

Что означают следующие величины?

Estimate
Std. Error
t value
Pr(>|t|)

Оценки параметров регрессионной модели

Параметр Оценка Стандартная ошибка
(beta_1)
Slope
(b _1 = frac {sum _{i=1}^{n} {[(x _i — bar {x})(y _i — bar {y})]}}{sum _{i=1}^{n} {(x _i — bar x)^2}})
или проще
(b_0 = rfrac{sd_y}{sd_x})
(SE _{b _1} = sqrt{frac{MS _e}{sum _{i=1}^{n} {(x _i — bar {x})^2}}})
(beta_0)
Intercept
(b_0 = bar y — b_1 bar{x}) (SE _{b _0} = sqrt{MS _e [frac{1}{n} + frac{bar x}{sum _{i=1}^{n} {(x _i — bar x)^2}}]})
(epsilon _i) (e_i = y_i — hat {y_i}) (approx sqrt{MS_e})

Для чего нужны стандартные ошибки?

  • Они нужны, поскольку мы оцениваем параметры по выборке
  • Они позволяют построить доверительные интервалы для параметров
  • Их используют в статистических тестах

Графическое представление результатов

pl_brain + geom_smooth(method="lm") 
## `geom_smooth()` using formula 'y ~ x'

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

Зависимость в генеральной совокупности

Симулированный пример: Генеральная совокупность, в которой связь между Y и X, описывается следующей зависимостью [
y_i = 10 + 10x_i + varepsilon_i \
varepsilon in N(0, 20)
]

pop_x <- rnorm(1000, 10, 3)
pop_y <- 10 + 10*pop_x + rnorm(1000, 0, 20)
population <- data.frame(x=pop_x, y=pop_y)

ggplot(population, aes(x=x, y=y)) + 
  geom_point(alpha=0.3, color="red") + 
  geom_abline(aes(intercept=10, slope=10), 
              color="blue", size=2)

Зависимости, выявленные в нескольких разных выборках

Линии регрессии, полученные для 100 выборок (по 20 объектов в каждой), взятых из одной и той же генеральной совокупности

Доверительные интервалы для коэффициентов уравнения регрессии

coef(brain_model)
## (Intercept)  MRINACount 
##     1.74376     0.00012
confint(brain_model)
##                   2.5 %    97.5 %
## (Intercept) -84.0751348 87.562649
## MRINACount    0.0000261  0.000214

Для разных (alpha) можно построить разные доверительные интервалы

## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'

Важно!

Если коэффициенты уравнения регрессии — лишь приблизительные оценки параметров, то предсказать значения зависимой переменной можно только с нeкоторой вероятностью.

Какое значение IQ можно ожидать у человека с размером головного мозга 900000?

newdata <- data.frame(MRINACount = 900000)

predict(brain_model, newdata, 
        interval = "prediction", 
        level = 0.95, se = TRUE)$fit
##   fit  lwr upr
## 1 110 66.9 153
  • При размере мозга 900000 среднее значение IQ будет, с вероятностью 95%, находиться в интервале от 67 до 153.

Отражаем на графике область значений, в которую попадут 95% предсказанных величин IQ

Подготавливаем данные

brain_predicted <- predict(brain_model, interval="prediction")
brain_predicted <- data.frame(brain, brain_predicted)
head(brain_predicted)
##   Gender FSIQ VIQ PIQ Weight Height MRINACount fit  lwr upr
## 1 Female  133 132 124    118   64.5     816932 100 56.1 144
## 2   Male  140 150 124     NA   72.5    1001121 122 78.2 166
## 3   Male  139 123 150    143   73.3    1038437 127 81.9 171
## 4   Male  133 129 128    172   68.8     965353 118 74.5 161
## 5 Female  137 132 134    147   65.0     951545 116 73.0 159
## 6 Female   99  90 110    146   69.0     928799 113 70.4 157

Отражаем на графике область значений, в которую попадут 95% предсказанных величин IQ

## `geom_smooth()` using formula 'y ~ x'

Код для построения графика

pl_brain + 

# 1) Линия регрессии и ее дов. интервал
# Если мы указываем fill внутри aes() и задаем фиксированное значение - 
#  появится соотв. легенда с названием.
# alpha - задает прозрачность
  geom_smooth(method = "lm", aes(fill = "Conf.interval"), alpha = 0.4) +
# 2) Интервал предсказаний создаем при помощи геома ribbon ("лента")
# Данные берем из другого датафрейма - из brain_predicted
# ymin и ymax - эстетики геома ribbon, которые задают нижний и верхний 
# край ленты в точках с заданным x (x = MRINACount было задано в ggplot() 
# при создании pl_brain, поэтому сейчас его указывать не обязательно)
#

geom_ribbon(data = brain_predicted,  aes(ymin = lwr, ymax = upr, fill = "Conf. area for prediction"), alpha = 0.2) +
# 3) Вручную настраиваем цвета заливки при помощи шкалы fill_manual.
# Ее аргумент name - название соотв. легенды, values - вектор цветов
  scale_fill_manual(name = "Intervals", values = c("green", "gray")) +
# 4) Название графика
  ggtitle("Confidence interval n and confidence area for prediction")

Важно!

Модель “работает” только в том диапазоне значений независимой переменной ((x)), для которой она построена (интерполяция). Экстраполяцию надо применять с большой осторожностью.

## `geom_smooth()` using formula 'y ~ x'

Итак, что означают следующие величины?

  • Estimate
  • Оценки праметров регрессионной модели
  • Std. Error
  • Стандартная ошибка для оценок
  • Осталось решить, что такое t value, Pr(>|t|)

Summary

  • Модель простой линейной регрессии (y _i = beta _0 + beta _1 x _i + epsilon _i)
  • Параметры модели оцениваются на основе выборки
  • В оценке коэффициентов регрессии и предсказанных значений существует неопределенность: необходимо вычислять доверительный интервал.
  • Доверительные интервалы можно расчитать, зная стандартные ошибки.

Что почитать

  • Гланц, С., 1998. Медико-биологическая статистика. М., Практика
  • Кабаков Р.И. R в действии. Анализ и визуализация данных на языке R. М.: ДМК Пресс, 2014
  • Diez, D.M., Barr, C.D. and Çetinkaya-Rundel, M., 2015. OpenIntro Statistics. OpenIntro.
  • Zuur, A., Ieno, E.N. and Smith, G.M., 2007. Analyzing ecological data. Springer Science & Business Media.
  • Quinn G.P., Keough M.J. 2002. Experimental design and data analysis for biologists
  • Logan M. 2010. Biostatistical Design and Analysis Using R. A Practical Guide

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

F-критерий

В ходе построения модели, отражающей зависимость между расстоянием до 24 галактик и скоростью их удаления, были получены следующие результаты:

library(gamair)
data(hubble)
 
M <- lm(y ~ x - 1, data = hubble)
 
summary(M)
 
Call:
lm(formula = y ~ x - 1, data = hubble)
 
Residuals:
   Min     1Q Median     3Q    Max 
-736.5 -132.5  -19.0  172.2  558.0 
 
Coefficients:
  Estimate Std. Error t value Pr(>|t|)    
x   76.581      3.965   19.32 1.03e-15 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 258.9 on 23 degrees of freedom
Multiple R-squared:  0.9419, Adjusted R-squared:  0.9394 
F-statistic: 373.1 on 1 and 23 DF,  p-value: 1.032e-15

В последней строке приведенных результатов мы видим значение F-критерия и соответствующее ему Р-значение. Ранее F-критерий был описан в контексте дисперсионного анализа. Что же он делает здесь — в регрессионном анализе? Дело в том, что и дисперсионный анализ, и линейная регрессия с математической точки зрения очень похожи — они являются частными случаями класса «общих линейных моделей» (см. соответствующее обсуждение этой темы в приложении к дисперсионному анализу здесь и здесь). В случае с дисперсионным анализом, мы использовали F-критерий для сравнения меж- и внутригрупповой дисперсий. В случае с регрессионными моделями F-критерий также используется для сравнения дисперсий и рассчитывается следующим образом:

[F = frac{(TSS-RSS)/p}{RSS/(n-p-1)},]

где (TSS=sum (y_i-bar{y})) — т.н. общая сумма квадратов (англ. total sum of squares), (RSS = sum (y_i-hat{y})) — сумма квадратов остатков, (p) — число параметров модели (в нашем случае их два — коэффициент регрессии и стандартное отклонение остатков), а (n) — объем выборки. Приведенный ниже рисунок иллюстрирует, что собой представляют значения (TSS) и (RSS).

Геометрическая интерпретация понятий «общая сумма квадратов» (TSS) и «сумма квадратов остатков» (RSS). Слева: Предположим, что мы не строим никакой модели и пытаемся предсказать зависимую переменную y, просто рассчитав ее среднее значение. Вертикальные отрезки отражают расстояние от каждого выборочного наблюдения y до этого среднего значения (представлено в виде синей горизонтальной линии). При расчете TSS все эти расстояния возводятся в квадрат и суммируются. Справа: вертикальные отрезки отражают расстояние от каждого выборочного значения зависимой переменной y до значения, предсказанного регрессионной моделью ((hat{y})). При расчете RSS все эти расстояния возводятся в квадрат и суммируются.

Из приведенной формулы следует, что чем меньше значение RSS (т.е., чем ближе регрессионная линия ко всем наблюдениям одновременно), тем больше значение F-критерия будет отличаться от 1. Иными словами, большие значения F будут указывать на то, что построенная регрессионная модель в целом хорошо описывает данные. Другими словами, рассчитывая F-критерий, мы проверяем нулевую гипотезу о равенстве всех регрессионных коэффициентов построенной модели нулю:

[ H_0: beta_1 = beta_2 = dots = beta_p = 0 ]

В приведенном виде эта нулевая гипотеза соответствует случаю множественной регрессии (т.е. когда имеется несколько, p, предикторов). В рассматриваемом нами примере есть лишь один предиктор и, соответственно, при помощи F-критерия мы проверяем гипотезу об отсутствии связи между зависимой переменной и именно этим одним предиктором. F-критерий в этом примере составил 373.1, что гораздо больше 1. Вероятность получить такое высокое значение при отсутствии связи между x и y очень мала (P = 1.032e-15). Соответственно, мы можем заключить, что в целом полученная модель хорошо описывает имеющиеся данные.

Коэффициент детерминации

Во второй снизу строке результатов расчета модели приведены значения Multiple R-squared и Adjusted R-squared. В первом случае речь идет о т.н. коэффициенте детерминации, который обозначается как (R^2) и рассчитывается следующим образом:

[R^2 = 1- frac{RSS}{TSS}]

Как было показано выше, TSS отражает общий разброс значений зависимой переменной до того, как мы пострили нашу регрессионную модель. В свою очередь, RSS отражает оставшуюся дисперсию значений зависимой переменной, которую нам не удалось «объяснить» при помощи модели. Соответственно, (R^2) измеряет долю общей дисперсии зависимой переменной, объясненную моделью. По определению, (R^2) изменяется от 0 до 1.

Чем ближе значение коэффициента детерминации к 1, тем точнее модель описывает данные. Эта интерпретация полностью применима для случая простой регрессии, когда модель включает лишь один предиктор ((R^2) будет представлять собой просто возведенный в квадрат коэффициент корреляции между y и x). Однако при включении в модель нескольких независимых переменных, с такой интерпретацией (R^2) следует быть очень осторожным. Дело в том, что значение (R^2) всегда будет возрастать при увеличении числа предикторов в модели, даже если некоторые из этих предикторов не имеют тесной связи с зависимой переменной. Соответственно, простой коэффициент детерминации будет отдавать предпочтение т.н. переобученным моделям, что крайне нежелательно. Выход заключается в использовании скорректированного коэффициента детерминации (англ. adjusted R-squared):

[R_{adj.}^{2} = R^2 — (1 — R^2) frac{p}{n — p — 1},]

где (R^2) — исходный коэффициент детерминации, (p) — число параметров модели, а (n) — объем выборки. Как следует из приведенной формулы, поправка сводится к наложению «штрафа» на число параметров модели — чем больше параметров, тем больше этот «штраф» и, как результат, тем меньше значение скорректированного коэффициента детерминации.

Стандартное отклонение остатков

В третьей снизу строке результатов регрессионного анализа представлено значение Residual standard error — стандартное отклонение остатков модели, которое в общем виде рассчитывается как

[ RSE = sqrt{frac{1}{n — p — 1}RSS} ]

По определению, RSE отражает степень разброса наблюдаемых значений зависимой переменной по отношению к истинной линии регрессии. Так,  в нашем примере, RSE = 258.9, из чего следует, что в среднем наблюдаемые значения скорости галактик отличаются от истинных значений на 258.9 км/сек. Очевидно, что чем меньше значение RSE, тем точнее модель описывает анализируемые данные.

Интересно, что RSE необязательно будет снижаться при увеличении числа предикторов в модели. Как следует из приведенной формулы, RSE может возрасти при добавлении в модель новых предикторов, если снижение RSS при этом будет относительно небольшим.

Заключение


Рассмотренные количественные показатели отражают разные аспекты «качества» регрессионной модели, и поэтому их стоит использовать в совокупности.  Однако следует помнить, что сделанные на основе этих показателей выводы, будут верны только при условии соблюдения ряда допущений в отношении построенной модели. Проверке выполнения этих допущений будет посвящено соответствующее сообщение.

Синтаксис

  • lm (формула, данные, подмножество, весы, na.action, method = «qr», model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, контрасты = NULL, смещение, .. .)

параметры

параметр Имея в виду
формула формула в обозначениях Уилкинсона-Роджерса ; response ~ ... where ... содержит термины, соответствующие переменным в среде или в кадре данных, заданном аргументом data
данные кадр данных, содержащий переменные ответа и предиктора
подмножество вектор, определяющий подмножество наблюдений, которые будут использоваться: может быть выражен как логический оператор с точки зрения переменных в data
веса аналитические веса (см. раздел « Веса выше)
na.action как обрабатывать отсутствующие значения ( NA ): см. ?na.action
метод как выполнить фитинг. Возможны только "qr" или "model.frame" (последний возвращает модельный кадр без подгонки модели, идентичной заданной model=TRUE )
модель хранить ли модельную рамку в установленном объекте
Икс хранить ли матрицу модели в приспособленном объекте
Y следует ли хранить ответ модели в установленном объекте
ор хранить ли QR-декомпозицию в установленном объекте
singular.ok разрешить ли сингулярные подходы , модели с коллинеарными предикторами (подмножество коэффициентов будет автоматически установлено на NA в этом случае
контрасты список контрастов, которые будут использоваться для конкретных факторов в модели; см contrasts.arg аргумент ?model.matrix.default . Контрасты также можно установить с помощью options() (см. Аргумент contrasts ) или путем назначения contrast атрибутов фактора (см. ?contrasts )
смещение используется для указания априори известного компонента в модели. Может также указываться как часть формулы. См. ?model.offset
дополнительные аргументы, которые должны быть переданы функциям lm.fit() нижнего уровня ( lm.fit() или lm.wfit() )

Линейная регрессия по набору данных mtcars

Встроенный кадр данных mtcars содержит информацию о 32 машинах, включая их вес, топливную экономичность (в мили на галлон), скорость и т. Д. (Чтобы узнать больше о наборе данных, используйте help(mtcars) ).

Если нас интересует взаимосвязь между топливной экономичностью ( mpg ) и весом ( wt ), Мы можем начать строить эти переменные с:

plot(mpg ~ wt, data = mtcars, col=2)

Графики показывают (линейное) соотношение !. Тогда, если мы хотим выполнить линейную регрессию для определения коэффициентов линейной модели, мы будем использовать lm функцию:

fit <- lm(mpg ~ wt, data = mtcars)

Здесь ~ означает «объяснено», поэтому формула mpg ~ wt означает, что мы прогнозируем mpg, как объясняется wt. Самый полезный способ просмотра результатов:

summary(fit)

Что дает результат:

Call:
lm(formula = mpg ~ wt, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.5432 -2.3647 -0.1252  1.4096  6.8727 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  37.2851     1.8776  19.858  < 2e-16 ***
wt           -5.3445     0.5591  -9.559 1.29e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.046 on 30 degrees of freedom
Multiple R-squared:  0.7528,    Adjusted R-squared:  0.7446 
F-statistic: 91.38 on 1 and 30 DF,  p-value: 1.294e-10

Это дает информацию о:

  • оцененный наклон каждого коэффициента ( wt и y-перехват), который предполагает наилучшее предсказание mpg, составляет 37.2851 + (-5.3445) * wt
  • P-значение каждого коэффициента, что предполагает, что перехват и вес, вероятно, не из-за случайности
  • Общие оценки подгонки, такие как R ^ 2 и скорректированные R ^ 2, которые показывают, какая часть изменения в mpg объясняется моделью

Мы могли бы добавить строку к нашему первому сюжету, чтобы показать предсказанный mpg :

abline(fit,col=3,lwd=2)

Также можно добавить уравнение к этому графику. Сначала получим коэффициенты с коэффициентом coef . Затем, используя paste0 мы paste0 коэффициенты с соответствующими переменными и +/- , чтобы построить уравнение. Наконец, мы добавляем его к сюжету с помощью mtext :

bs <- round(coef(fit), 3) 
lmlab <- paste0("mpg = ", bs[1],
             ifelse(sign(bs[2])==1, " + ", " - "), abs(bs[2]), " wt ")
mtext(lmlab, 3, line=-2) 

Результат: введите описание изображения здесь

Построение регрессии (базы)

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

Сначала применим линейную модель и

fit <- lm(mpg ~ wt, data = mtcars)

Затем постройте две интересующие переменные и добавьте линию регрессии в пределах области определения:

plot(mtcars$wt,mtcars$mpg,pch=18, xlab = 'wt',ylab = 'mpg')
lines(c(min(mtcars$wt),max(mtcars$wt)),
as.numeric(predict(fit, data.frame(wt=c(min(mtcars$wt),max(mtcars$wt))))))

Почти готово! Последний шаг — добавить к графику, уравнение регрессии, rsquare, а также коэффициент корреляции. Это делается с использованием vector функции:

rp = vector('expression',3)
rp[1] = substitute(expression(italic(y) == MYOTHERVALUE3 + MYOTHERVALUE4 %*% x), 
          list(MYOTHERVALUE3 = format(fit$coefficients[1], digits = 2),
                        MYOTHERVALUE4 = format(fit$coefficients[2], digits = 2)))[2]
rp[2] = substitute(expression(italic(R)^2 == MYVALUE), 
             list(MYVALUE = format(summary(fit)$adj.r.squared,dig=3)))[2]
rp[3] = substitute(expression(Pearson-R == MYOTHERVALUE2), 
             list(MYOTHERVALUE2 = format(cor(mtcars$wt,mtcars$mpg), digits = 2)))[2]

legend("topright", legend = rp, bty = 'n')

Обратите внимание, что вы можете добавить любые другие параметры, такие как RMSE, путем адаптации векторной функции. Представьте, что вам нужна легенда с 10 элементами. Векторное определение будет следующим:

rp = vector('expression',10)

и вам нужно будет определить r[1] …. to r[10]

Вот результат:

введите описание изображения здесь

утяжеление

Иногда мы хотим, чтобы модель придавала больший вес некоторым точкам данных или примерам, чем другие. Это возможно, указав вес для входных данных, изучая модель. Обычно существуют два типа сценариев, в которых мы можем использовать неравномерные веса над примерами:

  • Аналитические весы: отражают различные уровни точности различных наблюдений. Например, если анализировать данные, где каждое наблюдение является средним результатом географической области, аналитический вес пропорционален обратному оценочной дисперсии. Полезно при работе со средними данными, предоставляя пропорциональный вес с учетом количества наблюдений. Источник
  • Весы выборки (обратные весовые коэффициенты вероятности — IPW): статистический метод для расчета статистики, стандартизованной для населения, отличного от того, в котором собирались данные. В заявке рассматриваются проекты исследований с разрозненной популяцией выборки и населением целевого вывода (целевое население). Полезно при работе с данными, у которых отсутствуют значения. Источник

Функция lm() выполняет аналитическое взвешивание. Для выборочных весов пакет survey используется для создания объекта дизайна съемки и запуска svyglm() . По умолчанию в пакете survey используются весы для выборки. (ПРИМЕЧАНИЕ: lm() и svyglm() с семейством gaussian() будут производить одни и те же точечные оценки, потому что они оба решаются для коэффициентов, сводя к минимуму взвешенные наименьшие квадраты. Они отличаются тем, как вычисляются стандартные ошибки.)


Данные испытаний

data <- structure(list(lexptot = c(9.1595012302023, 9.86330744180814, 
8.92372556833205, 8.58202430280175, 10.1133857229336), progvillm = c(1L, 
1L, 1L, 1L, 0L), sexhead = c(1L, 1L, 0L, 1L, 1L), agehead = c(79L, 
43L, 52L, 48L, 35L), weight = c(1.04273509979248, 1.01139605045319, 
1.01139605045319, 1.01139605045319, 0.76305216550827)), .Names = c("lexptot", 
"progvillm", "sexhead", "agehead", "weight"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -5L))

Аналитические весы

lm.analytic <- lm(lexptot ~ progvillm + sexhead + agehead, 
                            data = data, weight = weight)
summary(lm.analytic)

Выход

Call:
lm(formula = lexptot ~ progvillm + sexhead + agehead, data = data, 
    weights = weight)

Weighted Residuals:
         1          2          3          4          5 
 9.249e-02  5.823e-01  0.000e+00 -6.762e-01 -1.527e-16

Coefficients:
             Estimate Std. Error t value Pr(>|t|)
(Intercept) 10.016054   1.744293   5.742    0.110
progvillm   -0.781204   1.344974  -0.581    0.665
sexhead      0.306742   1.040625   0.295    0.818
agehead     -0.005983   0.032024  -0.187    0.882

Residual standard error: 0.8971 on 1 degrees of freedom
Multiple R-squared:  0.467, Adjusted R-squared:  -1.132 
F-statistic: 0.2921 on 3 and 1 DF,  p-value: 0.8386

Вес пробы (IPW)

library(survey)
data$X <- 1:nrow(data)             # Create unique id
        
# Build survey design object with unique id, ipw, and data.frame
des1 <- svydesign(id = ~X,  weights = ~weight, data = data)
        
# Run glm with survey design object
prog.lm <- svyglm(lexptot ~ progvillm + sexhead + agehead, design=des1)

Выход

Call:
svyglm(formula = lexptot ~ progvillm + sexhead + agehead, design = des1)

Survey design:
svydesign(id = ~X, weights = ~weight, data = data)

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept) 10.016054   0.183942  54.452   0.0117 *
progvillm   -0.781204   0.640372  -1.220   0.4371  
sexhead      0.306742   0.397089   0.772   0.5813  
agehead     -0.005983   0.014747  -0.406   0.7546  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 0.2078647)

Number of Fisher Scoring iterations: 2

Проверка нелинейности с полиномиальной регрессией

Иногда при работе с линейной регрессией нам нужно проверить нелинейность данных. Один из способов сделать это — установить полиномиальную модель и проверить, соответствует ли она данным лучше, чем линейная модель. Существуют и другие причины, такие как теоретические, которые указывают на то, что они соответствуют квадратичной модели или модели более высокого порядка, поскольку считается, что отношение переменных по своей природе носит полиномиальный характер.

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

Сначала мы создаем график рассеяния переменных mpg (Miles / gallon), disp (смещение (cu.in.)) и wt (вес (1000 фунтов)). Связь между mpg и disp выглядит нелинейной.

plot(mtcars[,c("mpg","disp","wt")])

введите описание изображения здесь

Линейная посадка покажет, что disp не имеет значения.

fit0 = lm(mpg ~ wt+disp, mtcars)
summary(fit0)

# Coefficients:
#            Estimate Std. Error t value Pr(>|t|)    
#(Intercept) 34.96055    2.16454  16.151 4.91e-16 ***
#wt          -3.35082    1.16413  -2.878  0.00743 ** 
#disp        -0.01773    0.00919  -1.929  0.06362 .  
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#Residual standard error: 2.917 on 29 degrees of freedom
#Multiple R-squared:  0.7809,    Adjusted R-squared:  0.7658

Затем, чтобы получить результат квадратичной модели, мы добавили I(disp^2) . Новая модель выглядит лучше, если смотреть на R^2 и все переменные значительны.

fit1 = lm(mpg ~ wt+disp+I(disp^2), mtcars)
summary(fit1)

# Coefficients:
#              Estimate Std. Error t value Pr(>|t|)    
#(Intercept) 41.4019837  2.4266906  17.061  2.5e-16 ***
#wt          -3.4179165  0.9545642  -3.581 0.001278 ** 
#disp        -0.0823950  0.0182460  -4.516 0.000104 ***
#I(disp^2)    0.0001277  0.0000328   3.892 0.000561 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#Residual standard error: 2.391 on 28 degrees of freedom
#Multiple R-squared:  0.8578,    Adjusted R-squared:  0.8426 

Поскольку у нас есть три переменные, подходящая модель представляет собой поверхность, представленную:

mpg = 41.4020-3.4179*wt-0.0824*disp+0.0001277*disp^2

Другой способ указать полиномиальную регрессию — использовать poly с параметром raw=TRUE , в противном случае будут рассмотрены ортогональные многочлены (дополнительную информацию см. В help(ploy) ). Мы получаем тот же результат, используя:

summary(lm(mpg ~ wt+poly(disp, 2, raw=TRUE),mtcars))

Наконец, что, если нам нужно показать график предполагаемой поверхности? Ну, есть много вариантов сделать 3D графики в R Здесь мы используем Fit3d из пакета p3d .

library(p3d)
Init3d(family="serif", cex = 1)
Plot3d(mpg ~ disp+wt, mtcars)
Axes3d()
Fit3d(fit1)

введите описание изображения здесь

Оценка качества

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

# fit the model
fit <- lm(mpg ~ wt, data = mtcars)
# 
par(mfrow=c(2,1))
# plot model object
plot(fit, which =1:2)

введите описание изображения здесь

Эти графики проверяют два предположения, которые были сделаны при построении модели:

  1. То, что ожидаемое значение предсказанной переменной (в данном случае mpg ) задается линейной комбинацией предсказателей (в данном случае wt ). Мы ожидаем, что эта оценка будет беспристрастной. Таким образом, остатки должны быть сосредоточены вокруг среднего значения для всех значений предикторов. В этом случае мы видим, что остатки имеют тенденцию быть положительными на концах и отрицательными в середине, что указывает на нелинейную зависимость между переменными.
  2. То, что фактическая предсказанная переменная обычно распределяется вокруг ее оценки. Таким образом, остатки должны нормально распределяться. Для нормально распределенных данных точки в нормальном графике QQ должны лежать на диагонали или близко к ней. На концах есть несколько перекосов.

Использование функции «предсказывать»

Как только модель построена, predict является основная функция тестирования с новыми данными. В нашем примере будет использоваться встроенный набор данных mtcars для регрессии миль на галлон против перемещения:

my_mdl <- lm(mpg ~ disp, data=mtcars)
my_mdl

Call:
lm(formula = mpg ~ disp, data = mtcars)

Coefficients:
(Intercept)         disp  
   29.59985     -0.04122

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

set.seed(1234)
newdata <- sample(mtcars$disp, 5)
newdata
[1] 258.0  71.1  75.7 145.0 400.0

newdf <- data.frame(disp=newdata)
predict(my_mdl, newdf)
       1        2        3        4        5 
18.96635 26.66946 26.47987 23.62366 13.11381

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

предосторожность

Давайте рассмотрим несколько распространенных ошибок:

  1. не используя data.frame в новом объекте:

    predict(my_mdl, newdata)
    Error in eval(predvars, data, env) : 
       numeric 'envir' arg not of length one
    
  2. не используя одинаковые имена в новом кадре данных:

    newdf2 <- data.frame(newdata)
    predict(my_mdl, newdf2)
    Error in eval(expr, envir, enclos) : object 'disp' not found
    

точность

Чтобы проверить точность прогноза, вам понадобятся фактические значения y новых данных. В этом примере newdf потребуется столбец для «mpg» и «disp».

newdf <- data.frame(mpg=mtcars$mpg[1:10], disp=mtcars$disp[1:10])
#     mpg  disp
# 1  21.0 160.0
# 2  21.0 160.0
# 3  22.8 108.0
# 4  21.4 258.0
# 5  18.7 360.0
# 6  18.1 225.0
# 7  14.3 360.0
# 8  24.4 146.7
# 9  22.8 140.8
# 10 19.2 167.6

p <- predict(my_mdl, newdf)

#root mean square error
sqrt(mean((p - newdf$mpg)^2, na.rm=TRUE))
[1] 2.325148


Articles — Regression Analysis

Linear regression (or linear model) is used to predict a quantitative outcome variable (y) on the basis of one or multiple predictor variables (x) (James et al. 2014,P. Bruce and Bruce (2017)).

The goal is to build a mathematical formula that defines y as a function of the x variable. Once, we built a statistically significant model, it’s possible to use it for predicting future outcome on the basis of new x values.

When you build a regression model, you need to assess the performance of the predictive model. In other words, you need to evaluate how well the model is in predicting the outcome of a new test data that have not been used to build the model.

Two important metrics are commonly used to assess the performance of the predictive regression model:

  • Root Mean Squared Error, which measures the model prediction error. It corresponds to the average difference between the observed known values of the outcome and the predicted value by the model. RMSE is computed as RMSE = mean((observeds - predicteds)^2) %>% sqrt(). The lower the RMSE, the better the model.
  • R-square, representing the squared correlation between the observed known outcome values and the predicted values by the model. The higher the R2, the better the model.

A simple workflow to build to build a predictive regression model is as follow:

  1. Randomly split your data into training set (80%) and test set (20%)
  2. Build the regression model using the training set
  3. Make predictions using the test set and compute the model accuracy metrics

In this chapter, you will learn:

  • the basics and the formula of linear regression,
  • how to compute simple and multiple regression models in R,
  • how to make predictions of the outcome of new data,
  • how to assess the performance of the model

Contents:

  • Formula
  • Loading Required R packages
  • Preparing the data
  • Computing linear regression
    • Quick start R code
    • Simple linear regression
    • Multiple linear regression
  • Interpretation
    • Model summary
    • Coefficients significance
    • Model accuracy
  • Making predictions
  • Discussion
  • References

Formula

The mathematical formula of the linear regression can be written as follow:

y = b0 + b1*x + e

We read this as “y is modeled as beta1 (b1) times x, plus a constant beta0 (b0), plus an error term e.”

When you have multiple predictor variables, the equation can be written as y = b0 + b1*x1 + b2*x2 + ... + bn*xn, where:

  • b0 is the intercept,
  • b1, b2, …, bn are the regression weights or coefficients associated with the predictors x1, x2, …, xn.
  • e is the error term (also known as the residual errors), the part of y that can be explained by the regression model

Note that, b0, b1, b2, … and bn are known as the regression beta coefficients or parameters.

The figure below illustrates a simple linear regression model, where:

  • the best-fit regression line is in blue
  • the intercept (b0) and the slope (b1) are shown in green
  • the error terms (e) are represented by vertical red lines

Linear regression

From the scatter plot above, it can be seen that not all the data points fall exactly on the fitted regression line. Some of the points are above the blue curve and some are below it; overall, the residual errors (e) have approximately mean zero.

The sum of the squares of the residual errors are called the Residual Sum of Squares or RSS.

The average variation of points around the fitted regression line is called the Residual Standard Error (RSE). This is one the metrics used to evaluate the overall quality of the fitted regression model. The lower the RSE, the better it is.

Since the mean error term is zero, the outcome variable y can be approximately estimated as follow:

y ~ b0 + b1*x

Mathematically, the beta coefficients (b0 and b1) are determined so that the RSS is as minimal as possible. This method of determining the beta coefficients is technically called least squares regression or ordinary least squares (OLS) regression.

Once, the beta coefficients are calculated, a t-test is performed to check whether or not these coefficients are significantly different from zero. A non-zero beta coefficients means that there is a significant relationship between the predictors (x) and the outcome variable (y).

Loading Required R packages

  • tidyverse for easy data manipulation and visualization
  • caret for easy machine learning workflow
library(tidyverse)
library(caret)
theme_set(theme_bw())

Preparing the data

We’ll use the marketing data set, introduced in the Chapter @ref(regression-analysis), for predicting sales units on the basis of the amount of money spent in the three advertising medias (youtube, facebook and newspaper)

We’ll randomly split the data into training set (80% for building a predictive model) and test set (20% for evaluating the model). Make sure to set seed for reproducibility.

# Load the data
data("marketing", package = "datarium")
# Inspect the data
sample_n(marketing, 3)
##     youtube facebook newspaper sales
## 58    163.4     23.0      19.9  15.8
## 157   112.7     52.2      60.6  18.4
## 81     91.7     32.0      26.8  14.2
# Split the data into training and test set
set.seed(123)
training.samples <- marketing$sales %>%
  createDataPartition(p = 0.8, list = FALSE)
train.data  <- marketing[training.samples, ]
test.data <- marketing[-training.samples, ]

Computing linear regression

The R function lm() is used to compute linear regression model.

Quick start R code

# Build the model
model <- lm(sales ~., data = train.data)
# Summarize the model
summary(model)
# Make predictions
predictions <- model %>% predict(test.data)
# Model performance
# (a) Prediction error, RMSE
RMSE(predictions, test.data$sales)
# (b) R-square
R2(predictions, test.data$sales)

Simple linear regression

The simple linear regression is used to predict a continuous outcome variable (y) based on one single predictor variable (x).

In the following example, we’ll build a simple linear model to predict sales units based on the advertising budget spent on youtube. The regression equation can be written as sales = b0 + b1*youtube.

The R function lm() can be used to determine the beta coefficients of the linear model, as follow:

model <- lm(sales ~ youtube, data = train.data)
summary(model)$coef
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)   8.3839    0.62442    13.4 5.22e-28
## youtube       0.0468    0.00301    15.6 7.84e-34

The output above shows the estimate of the regression beta coefficients (column Estimate) and their significance levels (column Pr(>|t|). The intercept (b0) is 8.38 and the coefficient of youtube variable is 0.046.

The estimated regression equation can be written as follow: sales = 8.38 + 0.046*youtube. Using this formula, for each new youtube advertising budget, you can predict the number of sale units.

For example:

  • For a youtube advertising budget equal zero, we can expect a sale of 8.38 units.
  • For a youtube advertising budget equal 1000, we can expect a sale of 8.38 + 0.046*1000 = 55 units.

Predictions can be easily made using the R function predict(). In the following example, we predict sales units for two youtube advertising budget: 0 and 1000.

newdata <- data.frame(youtube = c(0,  1000))
model %>% predict(newdata)
##     1     2 
##  8.38 55.19

Multiple linear regression

Multiple linear regression is an extension of simple linear regression for predicting an outcome variable (y) on the basis of multiple distinct predictor variables (x).

For example, with three predictor variables (x), the prediction of y is expressed by the following equation: y = b0 + b1*x1 + b2*x2 + b3*x3

The regression beta coefficients measure the association between each predictor variable and the outcome. “b_j” can be interpreted as the average effect on y of a one unit increase in “x_j”, holding all other predictors fixed.

In this section, we’ll build a multiple regression model to predict sales based on the budget invested in three advertising medias: youtube, facebook and newspaper. The formula is as follow: sales = b0 + b1*youtube + b2*facebook + b3*newspaper

You can compute the multiple regression model coefficients in R as follow:

model <- lm(sales ~ youtube + facebook + newspaper, 
            data = train.data)
summary(model)$coef

Note that, if you have many predictor variables in your data, you can simply include all the available variables in the model using ~.:

model <- lm(sales ~., data = train.data)
summary(model)$coef
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  3.39188    0.44062   7.698 1.41e-12
## youtube      0.04557    0.00159  28.630 2.03e-64
## facebook     0.18694    0.00989  18.905 2.07e-42
## newspaper    0.00179    0.00677   0.264 7.92e-01

From the output above, the coefficients table shows the beta coefficient estimates and their significance levels. Columns are:

  • Estimate: the intercept (b0) and the beta coefficient estimates associated to each predictor variable
  • Std.Error: the standard error of the coefficient estimates. This represents the accuracy of the coefficients. The larger the standard error, the less confident we are about the estimate.
  • t value: the t-statistic, which is the coefficient estimate (column 2) divided by the standard error of the estimate (column 3)
  • Pr(>|t|): The p-value corresponding to the t-statistic. The smaller the p-value, the more significant the estimate is.

As previously described, you can easily make predictions using the R function predict():

# New advertising budgets
newdata <- data.frame(
  youtube = 2000, facebook = 1000,
  newspaper = 1000
)
# Predict sales values
model %>% predict(newdata)
##   1 
## 283

Interpretation

Before using a model for predictions, you need to assess the statistical significance of the model. This can be easily checked by displaying the statistical summary of the model.

Model summary

Display the statistical summary of the model as follow:

summary(model)
## 
## Call:
## lm(formula = sales ~ ., data = train.data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -10.412  -1.110   0.348   1.422   3.499 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.39188    0.44062    7.70  1.4e-12 ***
## youtube      0.04557    0.00159   28.63  < 2e-16 ***
## facebook     0.18694    0.00989   18.90  < 2e-16 ***
## newspaper    0.00179    0.00677    0.26     0.79    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.12 on 158 degrees of freedom
## Multiple R-squared:  0.89,   Adjusted R-squared:  0.888 
## F-statistic:  427 on 3 and 158 DF,  p-value: <2e-16

The summary outputs shows 6 components, including:

  • Call. Shows the function call used to compute the regression model.
  • Residuals. Provide a quick view of the distribution of the residuals, which by definition have a mean zero. Therefore, the median should not be far from zero, and the minimum and maximum should be roughly equal in absolute value.
  • Coefficients. Shows the regression beta coefficients and their statistical significance. Predictor variables, that are significantly associated to the outcome variable, are marked by stars.
  • Residual standard error (RSE), R-squared (R2) and the F-statistic are metrics that are used to check how well the model fits to our data.

The first step in interpreting the multiple regression analysis is to examine the F-statistic and the associated p-value, at the bottom of model summary.

In our example, it can be seen that p-value of the F-statistic is < 2.2e-16, which is highly significant. This means that, at least, one of the predictor variables is significantly related to the outcome variable.

Coefficients significance

To see which predictor variables are significant, you can examine the coefficients table, which shows the estimate of regression beta coefficients and the associated t-statistic p-values.

summary(model)$coef
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  3.39188    0.44062   7.698 1.41e-12
## youtube      0.04557    0.00159  28.630 2.03e-64
## facebook     0.18694    0.00989  18.905 2.07e-42
## newspaper    0.00179    0.00677   0.264 7.92e-01

For a given the predictor, the t-statistic evaluates whether or not there is significant association between the predictor and the outcome variable, that is whether the beta coefficient of the predictor is significantly different from zero.

It can be seen that, changing in youtube and facebook advertising budget are significantly associated to changes in sales while changes in newspaper budget is not significantly associated with sales.

For a given predictor variable, the coefficient (b) can be interpreted as the average effect on y of a one unit increase in predictor, holding all other predictors fixed.

For example, for a fixed amount of youtube and newspaper advertising budget, spending an additional 1 000 dollars on facebook advertising leads to an increase in sales by approximately 0.1885*1000 = 189 sale units, on average.

The youtube coefficient suggests that for every 1 000 dollars increase in youtube advertising budget, holding all other predictors constant, we can expect an increase of 0.045*1000 = 45 sales units, on average.

We found that newspaper is not significant in the multiple regression model. This means that, for a fixed amount of youtube and newspaper advertising budget, changes in the newspaper advertising budget will not significantly affect sales units.

As the newspaper variable is not significant, it is possible to remove it from the model:

model <- lm(sales ~ youtube + facebook, data = train.data)
summary(model)
## 
## Call:
## lm(formula = sales ~ youtube + facebook, data = train.data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -10.481  -1.104   0.349   1.423   3.486 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.43446    0.40877     8.4  2.3e-14 ***
## youtube      0.04558    0.00159    28.7  < 2e-16 ***
## facebook     0.18788    0.00920    20.4  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.11 on 159 degrees of freedom
## Multiple R-squared:  0.89,   Adjusted R-squared:  0.889 
## F-statistic:  644 on 2 and 159 DF,  p-value: <2e-16

Finally, our model equation can be written as follow: sales = 3.43+ 0.045youtube + 0.187facebook.

Model accuracy

Once you identified that, at least, one predictor variable is significantly associated to the outcome, you should continue the diagnostic by checking how well the model fits the data. This process is also referred to as the goodness-of-fit

The overall quality of the linear regression fit can be assessed using the following three quantities, displayed in the model summary:

  1. Residual Standard Error (RSE),
  2. R-squared (R2) and adjusted R2,
  3. F-statistic, which has been already described in the previous section
##    rse r.squared f.statistic  p.value
## 1 2.11      0.89         644 5.64e-77
  1. Residual standard error (RSE).

The RSE (or model sigma), corresponding to the prediction error, represents roughly the average difference between the observed outcome values and the predicted values by the model. The lower the RSE the best the model fits to our data.

Dividing the RSE by the average value of the outcome variable will give you the prediction error rate, which should be as small as possible.

In our example, using only youtube and facebook predictor variables, the RSE = 2.11, meaning that the observed sales values deviate from the predicted values by approximately 2.11 units in average.

This corresponds to an error rate of 2.11/mean(train.data$sales) = 2.11/16.77 = 13%, which is low.

  1. R-squared and Adjusted R-squared:

The R-squared (R2) ranges from 0 to 1 and represents the proportion of variation in the outcome variable that can be explained by the model predictor variables.

For a simple linear regression, R2 is the square of the Pearson correlation coefficient between the outcome and the predictor variables. In multiple linear regression, the R2 represents the correlation coefficient between the observed outcome values and the predicted values.

The R2 measures, how well the model fits the data. The higher the R2, the better the model. However, a problem with the R2, is that, it will always increase when more variables are added to the model, even if those variables are only weakly associated with the outcome (James et al. 2014). A solution is to adjust the R2 by taking into account the number of predictor variables.

The adjustment in the “Adjusted R Square” value in the summary output is a correction for the number of x variables included in the predictive model.

So, you should mainly consider the adjusted R-squared, which is a penalized R2 for a higher number of predictors.

  • An (adjusted) R2 that is close to 1 indicates that a large proportion of the variability in the outcome has been explained by the regression model.
  • A number near 0 indicates that the regression model did not explain much of the variability in the outcome.

In our example, the adjusted R2 is 0.88, which is good.

  1. F-Statistic:

Recall that, the F-statistic gives the overall significance of the model. It assess whether at least one predictor variable has a non-zero coefficient.

In a simple linear regression, this test is not really interesting since it just duplicates the information given by the t-test, available in the coefficient table.

The F-statistic becomes more important once we start using multiple predictors as in multiple linear regression.

A large F-statistic will corresponds to a statistically significant p-value (p < 0.05). In our example, the F-statistic equal 644 producing a p-value of 1.46e-42, which is highly significant.

Making predictions

We’ll make predictions using the test data in order to evaluate the performance of our regression model.

The procedure is as follow:

  1. Predict the sales values based on new advertising budgets in the test data
  2. Assess the model performance by computing:
    • The prediction error RMSE (Root Mean Squared Error), representing the average difference between the observed known outcome values in the test data and the predicted outcome values by the model. The lower the RMSE, the better the model.
    • The R-square (R2), representing the correlation between the observed outcome values and the predicted outcome values. The higher the R2, the better the model.
# Make predictions
predictions <- model %>% predict(test.data)
# Model performance
# (a) Compute the prediction error, RMSE
RMSE(predictions, test.data$sales)
## [1] 1.58
# (b) Compute R-square
R2(predictions, test.data$sales)
## [1] 0.938

From the output above, the R2 is 0.93, meaning that the observed and the predicted outcome values are highly correlated, which is very good.

The prediction error RMSE is 1.58, representing an error rate of 1.58/mean(test.data$sales) = 1.58/17 = 9.2%, which is good.

Discussion

This chapter describes the basics of linear regression and provides practical examples in R for computing simple and multiple linear regression models. We also described how to assess the performance of the model for predictions.

Note that, linear regression assumes a linear relationship between the outcome and the predictor variables. This can be easily checked by creating a scatter plot of the outcome variable vs the predictor variable.

For example, the following R code displays sales units versus youtube advertising budget. We’ll also add a smoothed line:

ggplot(marketing, aes(x = youtube, y = sales)) +
  geom_point() +
  stat_smooth()

The graph above shows a linearly increasing relationship between the sales and the youtube variables, which is a good thing.

In addition to the linearity assumptions, the linear regression method makes many other assumptions about your data (see Chapter @ref(regression-assumptions-and-diagnostics)). You should make sure that these assumptions hold true for your data.

Potential problems, include: a) the presence of influential observations in the data (Chapter @ref(regression-assumptions-and-diagnostics)), non-linearity between the outcome and some predictor variables (@ref(polynomial-and-spline-regression)) and the presence of strong correlation between predictor variables (Chapter @ref(multicollinearity)).

References

Bruce, Peter, and Andrew Bruce. 2017. Practical Statistics for Data Scientists. O’Reilly Media.

James, Gareth, Daniela Witten, Trevor Hastie, and Robert Tibshirani. 2014. An Introduction to Statistical Learning: With Applications in R. Springer Publishing Company, Incorporated.


Понравилась статья? Поделить с друзьями:
  • Coding rejected error 31 request out of range
  • Command error epson 9600
  • Command error already exists
  • Command conquer generals как изменить язык
  • Command center is start service fail please restart ap or os try again как исправить