Kompletny przewodnik po regresji krok po kroku w r
Regresja krokowa to procedura, którą możemy zastosować do zbudowania modelu regresji na podstawie zbioru zmiennych predykcyjnych poprzez stopniowe wprowadzanie i usuwanie predyktorów w modelu, aż do momentu, gdy nie będzie już statystycznie uzasadnionego powodu do wprowadzania lub usuń więcej.
Celem regresji krokowej jest utworzenie modelu regresji obejmującego wszystkie zmienne predykcyjne, które są statystycznie istotnie powiązane ze zmienną odpowiedzi .
W tym samouczku wyjaśniono, jak wykonać następujące procedury regresji krok po kroku w języku R:
- Wybór krok po kroku
- Wybór wsteczny krok po kroku
- Wybór krok po kroku w obu kierunkach
W każdym przykładzie użyjemy wbudowanego zbioru danych mtcars :
#view first six rows of mtcars
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1
Dopasujemy model regresji liniowej, wykorzystując mpg (mile na galon) jako zmienną odpowiedzi i pozostałych 10 zmiennych w zestawie danych jako potencjalne zmienne predykcyjne.
W każdym przykładzie użyjemy wbudowanej funkcji step() pakietu stats, aby przeprowadzić selekcję krokową, korzystając z następującej składni:
scena (tylko model przechwytywania, kierunek, zasięg)
Złoto:
- tylko oryginalny model : tylko formuła oryginalnego modelu
- Kierunek: Tryb wyszukiwania krokowego może być „oba”, „do tyłu” lub „do przodu”.
- zakres: formuła określająca predyktory, które chcielibyśmy wprowadzić do modelu
Przykład 1: Wybór krok po kroku do przodu
Poniższy kod pokazuje, jak krok po kroku dokonać wyboru:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform forward stepwise regression forward <- step(intercept_only, direction=' forward ', scope= formula (all), trace=0) #view results of forward stepwise regression forward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model forward$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
Uwaga: Argument trace=0 mówi R, aby nie wyświetlał pełnych wyników wyboru krok po kroku. Może to zająć dużo miejsca, jeśli istnieje duża liczba zmiennych predykcyjnych.
Oto jak interpretować wyniki:
- Najpierw dopasowujemy model tylko przechwytujący. Model ten miał AIC wynoszący 115,94345 .
- Następnie dopasowujemy wszystkie możliwe modele do predyktora. W modelu, który generował najniższe AIC i który również charakteryzował się statystycznie istotną redukcją AIC w porównaniu z modelem bazowym, zastosowano predyktor wt . Model ten miał AIC 73,21736 .
- Następnie dopasowujemy wszystkie możliwe modele za pomocą dwóch predyktorów. Model, który wygenerował najniższą wartość AIC, a także charakteryzował się statystycznie istotną redukcją AIC w porównaniu z modelem z pojedynczym predyktorem, dodał predyktor cyl . Model ten miał AIC 63,19800 .
- Następnie dopasowujemy wszystkie możliwe modele do trzech predyktorów. Model, który wygenerował najniższe AIC i który również charakteryzował się statystycznie istotną redukcją AIC w porównaniu z modelem z dwoma predyktorami, dodał predyktor hp . Model ten miał AIC wynoszący 62,66456 .
- Następnie dopasowujemy wszystkie możliwe modele do czterech predyktorów. Okazało się, że żaden z tych modeli nie spowodował znaczącej redukcji AIC, więc przerwaliśmy procedurę.
Ostateczny model wygląda następująco:
mpg ~ 38,75 – 3,17*waga – 0,94*cyl – 0,02*hip
Przykład 2: Wybór wsteczny krok po kroku
Poniższy kod pokazuje, jak cofnąć się:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression backward <- step(all, direction=' backward ', scope= formula (all), trace=0) #view results of backward stepwise regression backward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 21 147.4944 70.89774 2 - cyl 1 0.07987121 22 147.5743 68.91507 3 - vs 1 0.26852280 23 147.8428 66.97324 4 - carb 1 0.68546077 24 148.5283 65.12126 5 - gear 1 1.56497053 25 150.0933 63.45667 6 - drat 1 3.34455117 26 153.4378 62.16190 7 - available 1 6.62865369 27 160.0665 61.51530 8 - hp 1 9.21946935 28 169.2859 61.30730 #view final model backward$coefficients (Intercept) wt qsec am 9.617781 -3.916504 1.225886 2.935837
Oto jak interpretować wyniki:
- Najpierw dopasowujemy model, korzystając ze wszystkich predyktorów p . Zdefiniuj to jako M p .
- Następnie dla k = p, p-1,…1 dopasowujemy wszystkie k modeli, które zawierają wszystkie predyktory z wyjątkiem jednego w M k , w sumie k-1 zmiennych predykcyjnych. Następnie wybierz najlepszy spośród tych k modeli i nazwij go M k-1 .
- Na koniec wybieramy najlepszy model spośród M 0 … M p przy użyciu AIC.
Ostateczny model wygląda następująco:
mpg ~ 9,62 – 3,92*waga + 1,23*qs + 2,94*am
Przykład 3: Wybór krok po kroku w obu kierunkach
Poniższy kod pokazuje, jak krok po kroku dokonać wyboru w obu kierunkach:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression both <- step(intercept_only, direction=' both ', scope= formula (all), trace=0) #view results of backward stepwise regression both$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model both$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
Oto jak interpretować wyniki:
- Najpierw dopasowujemy model tylko przechwytujący.
- Następnie sekwencyjnie dodaliśmy predyktory do modelu, tak jak to zrobiliśmy w przypadku selekcji krok po kroku. Jednak po dodaniu każdego predyktora usunęliśmy także wszelkie predyktory, które nie zapewniały już poprawy dopasowania modelu.
- Powtarzaliśmy ten proces, aż otrzymaliśmy ostateczny model.
Ostateczny model wygląda następująco:
mpg ~ 9,62 – 3,92*waga + 1,23*qs + 2,94*am
Należy zauważyć, że wybór kroku do przodu i wybór kroku w obu kierunkach dały ten sam końcowy wzór, podczas gdy wybór kroku do tyłu dał inny wzór.
Dodatkowe zasoby
Jak sprawdzić znaczenie nachylenia regresji
Jak czytać i interpretować tabelę regresji
Przewodnik po wielowspółliniowości w regresji