Jak przeprowadzić regresję liniową ze zmiennymi kategorycznymi w r
Regresja liniowa to metoda, którą możemy zastosować do ilościowego określenia związku między jedną lub większą liczbą zmiennych predykcyjnych azmienną odpowiedzi .
Często konieczne może być dopasowanie modelu regresji przy użyciu jednej lub większej liczby zmiennych kategorycznych jako zmiennych predykcyjnych.
W tym samouczku przedstawiono krok po kroku przykład przeprowadzania regresji liniowej ze zmiennymi jakościowymi w języku R.
Przykład: regresja liniowa ze zmiennymi jakościowymi w R
Załóżmy, że mamy następującą ramkę danych w R, która zawiera informacje o trzech zmiennych dla 12 różnych koszykarzy:
- zdobyte punkty
- godziny spędzone na ćwiczeniach
- zastosowany program szkoleniowy
#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
Załóżmy, że chcemy dopasować następujący model regresji liniowej:
punkty = β 0 + β 1 godziny + β 2 program
W tym przykładzie godziny są zmienną ciągłą, ale program jest zmienną kategorialną , która może przyjmować trzy możliwe kategorie: program 1, program 2 lub program 3.
Aby dopasować ten model regresji i powiedzieć R, że zmienna „programu” jest zmienną kategoryczną, musimy użyć funkcji as.factor() w celu przekształcenia jej na współczynnik, a następnie dopasować model:
#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
Z wartości w kolumnie Oszacowanie możemy napisać dopasowany model regresji:
punkty = 6,3013 + 0,9744 (godziny) + 2,2949 (program 2) + 6,8462 (program 3)
Oto jak interpretować wartości współczynników w wyniku:
- Godziny : za każdą dodatkową godzinę spędzoną na ćwiczeniach zdobyte punkty zwiększają się średnio o 0,9744, przy założeniu, że program pozostaje stały.
- Wartość p wynosi 0,015, co wskazuje, że godziny spędzone na ćwiczeniach są statystycznie istotnym predyktorem punktów zdobytych na poziomie α = 0,05.
- harmonogram 2 : Gracze, którzy korzystali z harmonogramu 2, zdobyli średnio 2,2949 więcej punktów niż gracze, którzy korzystali z harmonogramu 1, zakładając, że godziny gry pozostają stałe.
- Wartość p wynosi 0,078, co oznacza, że nie ma istotnej statystycznie różnicy w liczbie punktów zdobytych przez zawodników korzystających z programu 2 w porównaniu z zawodnikami korzystającymi z programu 1, na poziomie α = 0,05.
- harmonogram 3 : Gracze, którzy korzystali z harmonogramu 3, zdobyli średnio 2,2949 punktów więcej niż gracze, którzy korzystali z harmonogramu 1, zakładając, że godziny gry pozostają stałe.
- Wartość p wynosi 0,002, co wskazuje, że istnieje statystycznie istotna różnica w liczbie punktów zdobytych przez graczy, którzy korzystali ze schematu 3 w porównaniu z graczami, którzy korzystali ze schematu 1, na poziomie α = 0,05.
Korzystając z dopasowanego modelu regresji, możemy przewidzieć liczbę punktów zdobytych przez zawodnika na podstawie całkowitej liczby godzin spędzonych na treningach oraz programu, z którego korzystał.
Na przykład możemy użyć poniższego kodu, aby przewidzieć punkty zdobyte przez zawodnika, który trenował przez 5 godzin i korzystał z harmonogramu treningowego 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
Model przewiduje, że nowy gracz zdobędzie 18,01923 punktów.
Możemy potwierdzić, że jest to poprawne, wstawiając wartości nowego gracza do dopasowanego równania regresji:
- punkty = 6,3013 + 0,9744 (godziny) + 2,2949 (program 2) + 6,8462 (program 3)
- punktów = 6,3013 + 0,9744(5) + 2,2949(0) + 6,8462(1)
- punkty = 18 019
Odpowiada to wartości obliczonej za pomocą funkcji przewidywania() w języku R.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:
Jak wykonać prostą regresję liniową w R
Jak wykonać wielokrotną regresję liniową w R
Jak utworzyć wykres rezydualny w R