Как выполнить простую линейную регрессию в r (шаг за шагом)
Простая линейная регрессия — это метод, который мы можем использовать, чтобы понять взаимосвязь между одной объясняющей переменной и одной переменной отклика .
В двух словах, этот метод находит строку, которая лучше всего «соответствует» данным, и принимает следующую форму:
ŷ = б 0 + б 1 х
Золото:
- ŷ : Предполагаемое значение ответа.
- b 0 : Начало линии регрессии.
- b 1 : Наклон линии регрессии.
Это уравнение может помочь нам понять взаимосвязь между объясняющей переменной и переменной ответа и (при условии, что оно статистически значимо) его можно использовать для прогнозирования значения переменной ответа с учетом значения объясняющей переменной.
В этом руководстве представлено пошаговое объяснение того, как выполнить простую линейную регрессию в R.
Шаг 1. Загрузите данные
В этом примере мы создадим поддельный набор данных, содержащий следующие две переменные для 15 студентов:
- Общее количество часов, отработанных для определенных экзаменов
- Результаты экзамена
Мы попытаемся подобрать простую модель линейной регрессии, используя часы в качестве объясняющей переменной и результаты обследования в качестве переменной отклика.
Следующий код показывает, как создать этот поддельный набор данных в R:
#create dataset df <- data.frame(hours=c(1, 2, 4, 5, 5, 6, 6, 7, 8, 10, 11, 11, 12, 12, 14), score=c(64, 66, 76, 73, 74, 81, 83, 82, 80, 88, 84, 82, 91, 93, 89)) #view first six rows of dataset head(df) hours score 1 1 64 2 2 66 3 4 76 4 5 73 5 5 74 6 6 81 #attach dataset to make it more convenient to work with attach(df)
Шаг 2. Визуализируйте данные
Прежде чем подобрать простую модель линейной регрессии, мы должны сначала визуализировать данные, чтобы понять их.
Во-первых, мы хотим убедиться, что взаимосвязь между часами и баллами примерно линейна, поскольку это является фундаментальным предположением простой линейной регрессии. Мы можем создать простую диаграмму рассеяния, чтобы визуализировать связь между двумя переменными:
scatter.smooth(hours, score, main=' Hours studied vs. Exam Score ')
Из графика видно, что зависимость линейная. По мере увеличения количества часов оценка также имеет тенденцию к линейному увеличению.
Затем мы можем создать коробчатую диаграмму, чтобы визуализировать распределение результатов экзамена и проверить наличие выбросов . По умолчанию R определяет наблюдение как выброс, если оно в 1,5 раза превышает межквартильный диапазон выше третьего квартиля (Q3) или в 1,5 раза превышает межквартильный диапазон ниже первого квартиля (Q1).
Если наблюдение является выбросом, на диаграмме появится небольшой кружок:
boxplot(score)
На диаграмме нет маленьких кружков, что означает, что в нашем наборе данных нет выбросов.
Шаг 3. Выполните простую линейную регрессию
Как только мы подтвердим, что связь между нашими переменными является линейной и нет выбросов, мы можем приступить к подбору простой модели линейной регрессии, используя часы в качестве объясняющей переменной и балл в качестве переменной ответа:
#fit simple linear regression model model <- lm(score~hours) #view model summary summary(model) Call: lm(formula = score ~ hours) Residuals: Min 1Q Median 3Q Max -5,140 -3,219 -1,193 2,816 5,772 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 65,334 2,106 31,023 1.41e-13 *** hours 1.982 0.248 7.995 2.25e-06 *** --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 3.641 on 13 degrees of freedom Multiple R-squared: 0.831, Adjusted R-squared: 0.818 F-statistic: 63.91 on 1 and 13 DF, p-value: 2.253e-06
Из сводки модели мы видим, что подобранное уравнение регрессии имеет вид:
Оценка = 65,334 + 1,982*(часы)
Это означает, что каждый дополнительный час обучения связан с увеличением среднего балла на экзамене на 1982 балла. А исходное значение 65 334 говорит нам о среднем ожидаемом балле на экзамене для студента, обучающегося ноль часов.
Мы также можем использовать это уравнение, чтобы найти ожидаемый результат экзамена на основе количества часов обучения студента. Например, студент, который учится 10 часов, должен набрать на экзамене балл 85,15 :
Оценка = 65,334 + 1,982*(10) = 85,15
Вот как интерпретировать остальную часть описания модели:
- Pr(>|t|): это значение p, связанное с коэффициентами модели. Поскольку значение p для часов (2,25e-06) значительно меньше 0,05, мы можем сказать, что существует статистически значимая связь между часами и баллами .
- Множественный R-квадрат: это число говорит нам о том, что процент вариации результатов экзамена можно объяснить количеством изученных часов. В общем, чем больше значение R-квадрата регрессионной модели, тем лучше объясняющие переменные способны предсказать значение переменной отклика. В этом случае 83,1% разницы в баллах можно объяснить учебными часами.
- Остаточная стандартная ошибка: это среднее расстояние между наблюдаемыми значениями и линией регрессии. Чем ниже это значение, тем больше линия регрессии может соответствовать наблюдаемым данным. В этом случае средний балл, наблюдаемый на экзамене, отклоняется на 3641 балл от балла, прогнозируемого линией регрессии.
- F-статистика и значение p: F-статистика ( 63,91 ) и соответствующее значение p ( 2.253e-06 ) говорят нам об общей значимости регрессионной модели, т. е. полезны ли объясняющие переменные в модели для объяснения вариаций. . в переменной ответа. Поскольку значение p в этом примере меньше 0,05, наша модель статистически значима, и часы считаются полезными для объяснения изменения оценок .
Шаг 4. Создайте остаточные графики
После подгонки простой модели линейной регрессии к данным последним шагом является создание остаточных графиков.
Одним из ключевых предположений линейной регрессии является то, что остатки регрессионной модели примерно нормально распределены и гомоскедастичны на каждом уровне объясняющей переменной. Если эти предположения не выполняются, результаты нашей регрессионной модели могут ввести в заблуждение или быть ненадежными.
Чтобы убедиться, что эти предположения выполняются, мы можем создать следующие остаточные графики:
График остатков в сравнении с подобранными значениями: этот график полезен для подтверждения гомоскедастичности. По оси X отображаются подобранные значения, а по оси Y — остатки. Пока остатки кажутся случайными и равномерно распределенными по графу вокруг нулевого значения, мы можем предположить, что гомоскедастичность не нарушена:
#define residuals res <- resid(model) #produce residual vs. fitted plot plot(fitted(model), res) #add a horizontal line at 0 abline(0,0)
Остатки кажутся случайным образом разбросанными вокруг нуля и не демонстрируют заметной закономерности, поэтому это предположение выполняется.
График QQ: этот график полезен для определения того, соответствуют ли остатки нормальному распределению. Если значения данных на графике следуют примерно прямой линии под углом 45 градусов, то данные распределяются нормально:
#create QQ plot for residuals qqnorm(res) #add a straight diagonal line to the plot qqline(res)
Остатки немного отклоняются от линии в 45 градусов, но не настолько, чтобы вызывать серьезное беспокойство. Можно предположить, что предположение о нормальности выполнено.
Поскольку остатки нормально распределены и гомоскедастичны, мы проверили, что предположения простой модели линейной регрессии выполняются. Таким образом, выходные данные нашей модели надежны.
Полный код R, используемый в этом уроке, можно найти здесь .