Как выполнить линейную регрессию с категориальными переменными в 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *