Как выполнить линейную регрессию с категориальными переменными в r
Линейная регрессия — это метод, который мы можем использовать для количественной оценки взаимосвязи между одной или несколькими переменными-предикторами и переменной отклика .
Часто вам может потребоваться подогнать модель регрессии, используя одну или несколько категориальных переменных в качестве переменных-предикторов.
В этом руководстве представлен пошаговый пример выполнения линейной регрессии с категориальными переменными в R.
Пример: линейная регрессия с категориальными переменными в R
Предположим, у нас есть следующий кадр данных в R, который содержит информацию о трех переменных для 12 разных баскетболистов:
- набранные очки
- часы, потраченные на тренировки
- используемая программа обучения
#create data frame df <- data. frame (points=c(7, 7, 9, 10, 13, 14, 12, 10, 16, 19, 22, 18), hours=c(1, 2, 2, 3, 2, 6, 4, 3, 4, 5, 8, 6), program=c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3)) #view data frame df points hours program 1 7 1 1 2 7 2 1 3 9 2 1 4 10 3 1 5 13 2 2 6 14 6 2 7 12 4 2 8 10 3 2 9 16 4 3 10 19 5 3 11 22 8 3 12 18 6 3
Предположим, мы хотим подогнать следующую модель линейной регрессии:
баллы = β 0 + β 1 часы + β 2 программа
В этом примере часы являются непрерывной переменной, а программа — категориальной переменной , которая может принимать три возможные категории: программа 1, программа 2 или программа 3.
Чтобы соответствовать этой модели регрессии и сообщить R, что переменная «программа» является категориальной переменной, нам нужно использовать as.factor() , чтобы преобразовать ее в фактор, а затем подогнать модель:
#convert 'program' to factor
df$program <- as. factor (df$program)
#fit linear regression model
fit <- lm(points ~ hours + program, data = df)
#view model summary
summary(fit)
Call:
lm(formula = points ~ hours + program, data = df)
Residuals:
Min 1Q Median 3Q Max
-1.5192 -1.0064 -0.3590 0.8269 2.4551
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.3013 0.9462 6.660 0.000159 ***
hours 0.9744 0.3176 3.068 0.015401 *
program2 2.2949 1.1369 2.019 0.078234 .
program3 6.8462 1.5499 4.417 0.002235 **
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.403 on 8 degrees of freedom
Multiple R-squared: 0.9392, Adjusted R-squared: 0.9164
F-statistic: 41.21 on 3 and 8 DF, p-value: 3.276e-05
Из значений в столбце «Оценка» мы можем написать подобранную регрессионную модель:
баллы = 6,3013 + 0,9744 (часы) + 2,2949 (программа 2) + 6,8462 (программа 3)
Вот как интерпретировать значения коэффициентов в результате:
- Часы : за каждый дополнительный час тренировок набранные баллы увеличиваются в среднем на 0,9744, при условии, что программа остается неизменной.
- Значение p составляет 0,015, что указывает на то, что часы, потраченные на тренировки, являются статистически значимым предиктором количества баллов, набранных на уровне α = 0,05.
- Расписание2 : игроки, использовавшие график 2, набрали в среднем на 2,2949 очков больше, чем игроки, использовавшие график 1, при условии, что часы остаются постоянными.
- Значение p составляет 0,078, что указывает на отсутствие статистически значимой разницы в очках, набранных игроками, использовавшими программу 2, по сравнению с игроками, использовавшими программу 1, на уровне α = 0,05.
- Расписание3 : игроки, использовавшие график 3, набрали в среднем на 2,2949 очков больше, чем игроки, использовавшие график 1, при условии, что часы остаются постоянными.
- Значение p составляет 0,002, что указывает на статистически значимую разницу в очках, набранных игроками, использовавшими график 3, по сравнению с игроками, использовавшими график 1, на уровне α = 0,05.
Используя подобранную регрессионную модель, мы можем предсказать количество очков, набранных игроком, исходя из общего количества часов, потраченных на тренировки, и программы, которую он использовал.
Например, мы можем использовать следующий код для прогнозирования очков, набранных игроком, который тренировался в течение 5 часов и использовал график тренировок 3:
#define new player new <- data. frame (hours=c(5), program=as. factor (c(3))) #use the fitted model to predict the points for the new player predict(fit, newdata=new) 1 18.01923
Модель прогнозирует, что этот новый игрок наберет 18,01923 очка.
Мы можем подтвердить, что это правильно, вставив значения нового игрока в подобранное уравнение регрессии:
- баллы = 6,3013 + 0,9744 (часы) + 2,2949 (программа 2) + 6,8462 (программа 3)
- баллы = 6,3013 + 0,9744(5) + 2,2949(0) + 6,8462(1)
- баллы = 18 019
Это соответствует значению, которое мы вычислили с помощью функции прогнозирования() в R.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:
Как выполнить простую линейную регрессию в R
Как выполнить множественную линейную регрессию в R
Как создать остаточный график в R