Wielokrotna regresja liniowa w R: prosta i krokowa z przykładami

⚡ Inteligentne podsumowanie

Prosta i wielokrotna regresja liniowa w R modeluje wynik ciągły jako ważoną sumę predyktorów dopasowanych metodą najmniejszych kwadratów. Ten przewodnik obejmuje lm(), odczyt współczynników, predyktory czynnikowe, diagnostykę reszt, predykcję i automatyczny dobór zmiennych.

  • 📐 Równanie rdzenia: Prosta regresja dopasowuje y = alfa + beta x, a regresja wielokrotna rozszerza tę samą linię do k predyktorów w postaci macierzy.
  • 🧮 Metoda szacowania: Zwykła metoda najmniejszych kwadratów minimalizuje sumę kwadratowych odległości pionowych między wartościami obserwowanymi i przewidywanymi.
  • 🛠️. Składnia modelu: lm(formuła, dane) zastępuje znak równości tyldą, a -1 usuwa przecięcie.
  • 📊 Odczyt wyników: summary() raportuje współczynniki, wartości p i skorygowany R-kwadrat, który w przykładzie mtcars osiąga 0.8199.
  • 🔎 Diagnostyka: par(mfrow = c(2, 2)) po którym następuje plot(fit) generuje cztery wykresy resztowe służące do testowania założeń OLS.
  • 🔁 Wybór zmiennej: Regresja krokowa w olsrr dodaje i usuwa predyktory według wartości p i ustala się na wt plus hp.

Wielokrotna regresja liniowa w R

Gdzie regresja liniowa wpisuje się w uczenie maszynowe

Regresja liniowa jest jedną z najstarszych nadzorowanych metod uczenie maszynowe algorytmy i nadal jest to pierwszy model, po który sięga większość analityków. Jednym z najwcześniejszych zastosowań uczenia maszynowego był filtr spamu.

Inne typowe zastosowania uczenia maszynowego obejmują:

  • Identyfikacja niechcianych wiadomości spamowych w wiadomościach e-mail
  • Segmentacja zachowań klientów pod kątem reklamy ukierunkowanej
  • Ograniczenie nieuczciwych transakcji kartami kredytowymi
  • Optymalizacja zużycia energii w domach i budynkach biurowych
  • Rozpoznawanie twarzy

Nadzorowana nauka

In Nadzorowana nauka, dane szkoleniowe, które przekazujesz algorytmowi, zawierają etykietę.

Klasyfikacja Jest prawdopodobnie najczęściej stosowaną techniką uczenia nadzorowanego. Jednym z pierwszych zadań klasyfikacyjnych, z którymi zmierzyli się badacze, był filtr spamu. Celem uczenia jest przewidzenie, czy wiadomość e-mail zostanie sklasyfikowana jako spam, czy jako ham (dobry e-mail). Po etapie uczenia maszyna potrafi wykryć klasę wiadomości.

Regresje są powszechnie stosowane w dziedzinie uczenia maszynowego do przewidywania wartości ciągłej. Zadanie regresji może przewidywać wartość zmienna zależna w oparciu o zestaw niezależne zmienne (zwane także predyktorami lub regresorami). Na przykład regresja liniowa może przewidzieć cenę akcji, prognozę pogody, sprzedaż i tak dalej.

Niektóre podstawowe algorytmy uczenia nadzorowanego to:

  • Regresja liniowa
  • Regresja logistyczna
  • Najbliżsi sąsiedzi
  • Obsługa maszyny wektorowej (SVM)
  • Drzewa decyzyjne i losowy las
  • Sieci neuronowe

Uczenie się bez nadzoru

In Uczenie się bez nadzoru, dane treningowe są nieoznakowane. System próbuje uczyć się bez odniesienia. Poniżej znajduje się lista algorytmów uczenia bez nadzoru.

  • K-średnia
  • Hierarchiczny Cluster Analiza
  • Maksymalizacja oczekiwań
  • Wizualizacja i redukcja wymiarowości
  • Analiza głównych składowych
  • PCA jądra
  • Osadzanie lokalnie-liniowe

Mając na uwadze ten kontekst, w dalszej części tego samouczka krok po kroku budujemy modele regresji w języku R.

Prosta regresja liniowa w R

Regresja liniowa odpowiada na proste pytanie: czy można zmierzyć dokładną zależność między jedną zmienną docelową i zbiorem predyktorów?

Najprostszym modelem probabilistycznym jest model liniowy:

Prosta regresja liniowa w R

gdzie

  • y = zmienna zależna
  • x = zmienna niezależna
  • Prosta regresja liniowa w R = składnik błędu losowego
  • Prosta regresja liniowa w R = przechwycić
  • Prosta regresja liniowa w R = Współczynnik x

Rozważmy następującą fabułę:

Prosta regresja liniowa w R

Równanie to Prosta regresja liniowa w R W tym równaniu punkt przecięcia wynosi 4.77, więc gdy x jest równe 0, dopasowana wartość y wynosi 4.77. Nachylenie pokazuje, w jakiej proporcji y zmienia się, gdy x się zmienia.

Aby oszacować optymalne wartości Prosta regresja liniowa w R oraz Prosta regresja liniowa w R, używasz metody zwanej Zwykłe najmniejsze kwadraty (OLS). Metoda ta stara się znaleźć parametry minimalizujące sumę kwadratów błędów, czyli odległość pionową pomiędzy przewidywanymi wartościami y i rzeczywistymi wartościami y. Różnica jest znana jako termin błędu.

Przed oszacowaniem modelu można określić, czy liniowa zależność między y i x jest wiarygodna, wykreślając wykres rozrzutu.

Wykres punktowy

Do wyjaśnienia koncepcji prostej regresji liniowej użyjemy bardzo prostego zbioru danych. Zaimportujemy średni wzrost i wagę amerykańskich kobiet. Zbiór danych zawiera 15 obserwacji. Chcesz zmierzyć, czy wzrost jest dodatnio skorelowany z wagą.

library(ggplot2)
path <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/women.csv'
df <-read.csv(path)
ggplot(df,aes(x=height, y =  weight))+
geom_point()

Wyjście:

Wykres punktowy

Wykres punktowy sugeruje ogólną tendencję wzrostu wagi wraz ze wzrostem wzrostu. W następnym kroku zmierzysz, o ile wzrasta waga wraz z każdą dodatkową jednostką wzrostu.

Oszacowania najmniejszych kwadratów

W prostej regresji OLS obliczenie Oszacowania najmniejszych kwadratów oraz Oszacowania najmniejszych kwadratów jest proste. Ten samouczek nie wyprowadza wzorów, a jedynie je podaje.

Chcesz oszacować: Oszacowania najmniejszych kwadratów

Celem regresji OLS jest zminimalizowanie następującego równania:

Oszacowania najmniejszych kwadratów

gdzie

Oszacowania najmniejszych kwadratów jest rzeczywistą wartością i Oszacowania najmniejszych kwadratów jest wartością przewidywaną.

Rozwiązanie dla Oszacowania najmniejszych kwadratów is Oszacowania najmniejszych kwadratów

Należy pamiętać, że Oszacowania najmniejszych kwadratów oznacza średnią wartość x

Rozwiązanie dla Oszacowania najmniejszych kwadratów is Oszacowania najmniejszych kwadratów

W R możesz użyć funkcji cov() i var() do oszacowania Oszacowania najmniejszych kwadratów i możesz użyć funkcji mean() do oszacowania Oszacowania najmniejszych kwadratów

beta <- cov(df$height, df$weight) / var (df$height)
beta

Wyjście:

##[1] 3.45
alpha <- mean(df$weight) - beta * mean(df$height)
alpha

Wyjście:

## [1] -87.51667

Współczynnik beta oznacza, że ​​każdy dodatkowy cal wzrostu powoduje zwiększenie średniej wagi o 3.45 funta.

Ręczne szacowanie równania liniowego jest pouczające, ale niepraktyczne. R udostępnia funkcję lm(), która zrobi to za Ciebie, i będziesz jej używać od następnej sekcji. W rzeczywistych projektach prawie nigdy nie uda Ci się dopasować modelu z jednym predyktorem; zadania regresyjne zazwyczaj wymagają użycia wielu estymatorów jednocześnie.

Wielokrotna regresja liniowa w R

Praktyczne zastosowania analizy regresji wykorzystują modele bardziej złożone niż prosty model liniowy. Model probabilistyczny obejmujący więcej niż jedną zmienną niezależną nazywa się modele regresji wielokrotnej. Ogólna postać tego modelu to:

Wielokrotna regresja liniowa w R

W notacji macierzowej możesz przepisać model:

  • Wielokrotna regresja liniowa w R

Zmienna zależna y jest teraz funkcją k zmiennych niezależnych. Wartość współczynnika Wielokrotna regresja liniowa w R określa udział zmiennej niezależnej Wielokrotna regresja liniowa w R oraz Wielokrotna regresja liniowa w R.

Krótko przedstawimy założenie, które przyjęliśmy na temat błędu losowego Wielokrotna regresja liniowa w R z OLS:

  • Średnia równa 0
  • Wariancja równa Wielokrotna regresja liniowa w R
  • Normalna dystrybucja
  • Błędy losowe są niezależne (w sensie probabilistycznym)

Musisz rozwiązać Wielokrotna regresja liniowa w R, wektor współczynników regresji, który minimalizuje sumę kwadratów błędów między przewidywaną i rzeczywistą wartością y.

Rozwiązanie w formie zamkniętej to:

Wielokrotna regresja liniowa w R

z:

  • wskazuje transponować macierzy X
  • Wielokrotna regresja liniowa w R wskazuje odwracalna macierz

Poniższe przykłady wykorzystują wbudowany zbiór danych mtcars. Celem jest przewidywanie liczby mil na galon (mpg) na podstawie zestawu cech.

Zmienne ciągłe w R

Na razie użyjesz tylko zmiennych ciągłych i odłożysz na bok cechy kategoryczne. Zmienna am jest zmienną binarną przyjmującą wartość 1, jeśli skrzynia biegów jest manualna i 0 dla samochodów z automatyczną skrzynią biegów; vs jest również zmienną binarną.

library(dplyr)
df <- mtcars %>%
select(-c(am, vs, cyl, gear, carb))
glimpse(df)

Wyjście:

## Observations: 32
## Variables: 6
## $ mpg  <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19....
## $ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 1...
## $ hp   <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, ...
## $ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.9...
## $ wt   <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3...
## $ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 2...

Do obliczenia parametrów można użyć funkcji lm(). Podstawowa składnia tej funkcji jest następująca:

lm(formula, data, subset)
Arguments:
	-formula: The equation you want to estimate	
	-data: The dataset used
	-subset: Estimate the model on a subset of the dataset

Pamiętaj, że równanie ma następującą postać

Zmienne ciągłe w R

w R

  • Symbol = zostaje zastąpiony przez ~
  • Każde x jest zastępowane nazwą zmiennej
  • Jeśli chcesz usunąć stałą, dodaj -1 na końcu formuły

Przykład:

Chcesz oszacować wagę poszczególnych osób na podstawie ich wzrostu i dochodów. Równanie jest

Zmienne ciągłe w R

Równanie w R zapisuje się w następujący sposób:

y ~ X1+ X2+…+Xn # Z przecięciem

A więc dla naszego przykładu:

  • Zważ ~ wzrost + dochód

Twoim celem jest oszacowanie mili na galon na podstawie zestawu zmiennych. Równanie do oszacowania to:

Zmienne ciągłe w R

Oszacujesz swoją pierwszą regresję liniową i zapiszesz wynik w dopasowanym obiekcie.

model <- mpg ~ disp + hp + drat + wt + qsec
fit <- lm(model, df)
fit

Code Wyjaśnienie

  • model <- mpg ~ disp + hp + drat + wt + qsec: Zapisz model, aby oszacować
  • lm(model, df): Oszacuj model za pomocą ramki danych df
## 
## Call:
## lm(formula = model, data = df)
## 
## Coefficients:
## (Intercept)         disp           hp         drat           wt  
##    16.53357      0.00872     -0.02060      2.01577     -4.38546  
##        qsec  
##     0.64015	

Dane wyjściowe nie dostarczają wystarczających informacji o jakości dopasowania. Możesz uzyskać dostęp do większej ilości szczegółów, takich jak istotność współczynników, stopień swobody i kształt reszt za pomocą funkcji summary().

summary(fit)

Wyjście:

## return the p-value and coefficient
## 
## Call:
## lm(formula = model, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.5404 -1.6701 -0.4264  1.1320  5.4996 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept) 16.53357   10.96423   1.508  0.14362   
## disp         0.00872    0.01119   0.779  0.44281   
## hp          -0.02060    0.01528  -1.348  0.18936   
## drat         2.01578    1.30946   1.539  0.13579   
## wt          -4.38546    1.24343  -3.527  0.00158 **
## qsec         0.64015    0.45934   1.394  0.17523   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.558 on 26 degrees of freedom
## Multiple R-squared:  0.8489, Adjusted R-squared:  0.8199 
## F-statistic: 29.22 on 5 and 26 DF, p-value: 6.892e-10

Wniosek z wyników powyższej tabeli

  • Tabela pokazuje silną negatywną zależność między wt i mpg oraz dodatni współczynnik dla drat.
  • Jedynie zmienna wt ma statystyczny wpływ na mpg. Pamiętaj, że aby przetestować hipotezę w statystyce, używamy:
    • H0: Brak wpływu statystycznego
    • H1: Predyktor ma znaczący wpływ na y
    • Jeśli wartość p jest mniejsza niż 0.05, oznacza to, że zmienna jest istotna statystycznie
  • Skorygowany R-kwadrat: udział wariancji y wyjaśniony przez model, skorygowany o liczbę predyktorów. W tym przypadku wynosi on 0.8199, co oznacza, że ​​model wyjaśnia około 82 procent wariancji mpg. R-kwadrat zawsze mieści się w przedziale od 0 do 1, a im wyższa wartość, tym lepiej.

Możesz uruchomić ANOVA test mający na celu oszacowanie wpływu każdej cechy na wariancje za pomocą funkcji anova().

anova(fit)

Wyjście:

## Analysis of Variance Table
## 
## Response: mpg
##           Df Sum Sq Mean Sq  F value   Pr(>F)    
## disp       1 808.89  808.89 123.6185 2.23e-11 ***
## hp         1  33.67   33.67   5.1449 0.031854 *  
## drat       1  30.15   30.15   4.6073 0.041340 *  
## wt         1  70.51   70.51  10.7754 0.002933 ** 
## qsec       1  12.71   12.71   1.9422 0.175233    
## Residuals 26 170.13    6.54                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1	

Bardziej konwencjonalnym sposobem oszacowania wydajności modelu jest przedstawienie reszty w odniesieniu do różnych miar.

Możesz użyć funkcji plot(), aby wyświetlić cztery wykresy:

– Wartości reszty a wartości dopasowane

– Wykres normalnego QQ: kwartyl teoretyczny vs reszty standaryzowane

– Lokalizacja skali: dopasowane wartości vs pierwiastki kwadratowe reszt standaryzowanych

– Pozostałości a dźwignia: Dźwignia a standardowe reszty

Dodajesz kod par(mfrow = c(2, 2)) przed plot(fit). Jeśli nie dodasz tej linijki kodu, R poprosi Cię o naciśnięcie klawisza Enter, aby wyświetlić kolejny wykres.

par(mfrow = c(2, 2))

Code Wyjaśnienie

  • (mfrow=c(2,2)): zwróć okno z czterema wykresami obok siebie.
  • Pierwsze 2 dodają liczbę wierszy
  • Drugie 2 dodaje liczbę kolumn.
  • Jeśli napiszesz (mfrow=c(3,2)): utworzysz okno z 3 wierszami i 2 kolumnami
plot(fit)

Wyjście:

Zmienne ciągłe w R

Formuła lm() zwraca listę zawierającą wiele przydatnych informacji. Dostęp do nich można uzyskać za pomocą utworzonego obiektu fit, a następnie znaku $ i informacji, które chcesz uzyskać.tract.

– współczynniki: `fit$współczynniki`

– reszty: `fit$residuals`

– dopasowana wartość: `fit$fitted.values`

Regresja czynników w R

W ostatnim oszacowaniu modelu regresję mpg przeprowadza się wyłącznie na zmiennych ciągłych. Dodanie zmiennych czynnikowych do modelu jest proste. Dodajesz zmienną am do swojego modelu. Ważne jest, aby upewnić się, że zmienna jest poziomem czynnika, a nie ciągła.

df <- mtcars %>%
    mutate(cyl = factor(cyl),
        vs = factor(vs),
        am = factor(am),
        gear = factor(gear),
        carb = factor(carb))
model <- mpg ~ .
summary(lm(model, df))

Wyjście:

## 
## Call:
## lm(formula = model, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.5087 -1.3584 -0.0948  0.7745  4.6251 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 23.87913   20.06582   1.190   0.2525  
## cyl6        -2.64870    3.04089  -0.871   0.3975  
## cyl8        -0.33616    7.15954  -0.047   0.9632  
## disp         0.03555    0.03190   1.114   0.2827  
## hp          -0.07051    0.03943  -1.788   0.0939 .
## drat         1.18283    2.48348   0.476   0.6407  
## wt          -4.52978    2.53875  -1.784   0.0946 .
## qsec         0.36784    0.93540   0.393   0.6997  
## vs1          1.93085    2.87126   0.672   0.5115  
## am1          1.21212    3.21355   0.377   0.7113  
## gear4        1.11435    3.79952   0.293   0.7733  
## gear5        2.52840    3.73636   0.677   0.5089  
## carb2       -0.97935    2.31797  -0.423   0.6787  
## carb3        2.99964    4.29355   0.699   0.4955  
## carb4        1.09142    4.44962   0.245   0.8096  
## carb6        4.47757    6.38406   0.701   0.4938  
## carb8        7.25041    8.36057   0.867   0.3995  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.833 on 15 degrees of freedom
## Multiple R-squared:  0.8931, Adjusted R-squared:  0.779 
## F-statistic:  7.83 on 16 and 15 DF,  p-value: 0.000124

R wykorzystuje pierwszy poziom czynnika jako grupę bazową. Należy porównać współczynniki drugiej grupy z grupą bazową.

Założenia regresji liniowej w R

Zwykła metoda najmniejszych kwadratów generuje wiarygodne współczynniki i wartości p tylko wtedy, gdy spełnione są pięć warunków. Cztery wykresy diagnostyczne wygenerowane przez plot(fit) istnieją właśnie po to, by je sprawdzić.

  • Liniowość: Zależność między każdym predyktorem a y jest liniowa. Sprawdź Resztki a dopasowane wykres; widoczna krzywa oznacza, że ​​potrzebna jest transformacja lub wyraz wielomianowy.
  • Niezależność: Warunki błędu są nieskorelowane. Dane uporządkowane czasowo często naruszają tę zasadę, co można sprawdzić za pomocą funkcji durbinWatsonTest() z pakietu car.
  • Homoskedastyczność: Wariancja błędu jest stała w przypadku wszystkich dopasowanych wartości. Kształt lejka w Skala-Lokalizacja fabuła sygnalizuje naruszenie.
  • Normalność reszt: Błędy mają rozkład normalny. Punkty powinny znajdować się na przekątnej Normalny QQ wątek.
  • Brak współliniowości: Predyktory nie są niemal identyczne. Współczynnik inflacji wariancji powyżej 5 to typowa linia ostrzegawcza.
library(car)
vif(fit)           # variance inflation factors
shapiro.test(residuals(fit))   # normality of residuals

Naruszenia nie zawsze unieważniają model, ale zmieniają poziom zaufania do wartości p, dlatego należy je sprawdzić przed zgłoszeniem jakiegokolwiek współczynnika.

Jak tworzyć prognozy za pomocą modelu regresji liniowej w R

Dopasowanie modelu to dopiero połowa zadania. Funkcja predict() stosuje dopasowane współczynniki do nowych obserwacji.

predict(object, newdata, interval = "none", level = 0.95)
arguments:
-object: The model returned by lm()
-newdata: A data frame whose columns match the predictors used in the formula
-interval: "none", "confidence" for the mean response, or "prediction" for a single new case
-level: The confidence level, 0.95 by default

Wykonaj te trzy kroki.

  1. Zbuduj ramkę danych nowych przypadków. Nazwy kolumn muszą dokładnie odpowiadać nazwom predyktorów we wzorze, a poziomy czynników muszą odpowiadać danym szkoleniowym.
  2. Wywołaj predict(). Przekaż dopasowany obiekt i nową ramkę danych.
  3. Dodaj interwał. Wybierz opcję „pewność”, jeśli chcesz poznać niepewność co do średniej odpowiedzi, lub opcję „przewidywanie”, jeśli chcesz poznać zasięg pojedynczego samochodu.
new_cars <- data.frame(wt = c(2.5, 3.2), hp = c(110, 175))
fit_final <- lm(mpg ~ wt + hp, data = mtcars)

predict(fit_final, newdata = new_cars)
predict(fit_final, newdata = new_cars, interval = "prediction")

Odczyt wyniku. Przewiduje się, że samochód ważący 2.5 tysiąca funtów (ok. 1100 kg) i o mocy 110 koni mechanicznych będzie miał zużycie paliwa na poziomie około 24.1 mpg. Przedział prognozy jest zawsze szerszy niż przedział ufności, ponieważ zawiera niepewność pojedynczej obserwacji nałożoną na niepewność dopasowanej linii.

Dwie zasady zapewniają uczciwość prognoz. Nigdy nie ekstrapoluj poza zakres predyktorów treningowych, ponieważ linia prosta nie ma żadnych dowodów. I zawsze dokonuj oceny na podstawie danych, których model nie widział, w przeciwnym razie raportowany błąd jest optymistyczny.

Regresja liniowa a regresja logistyczna w R

Analitycy często sięgają po lm(), gdy wynik nie jest ciągły. Poniższa tabela pokazuje, gdzie leży granica.

kryteria regresji liniowej Regresja logistyczna
Zmienna odpowiedzi Ciągły Binarny lub kategoryczny
Przewidywany wynik Dowolna liczba rzeczywista Prawdopodobieństwo między 0 a 1
Wyceny Zwykłe najmniejsze kwadraty Maksymalne prawdopodobieństwo
Dopasuj miarę R-kwadrat, RMSE AIC, odchylenie, dokładność
Funkcja R lm(formuła, dane) glm(formuła, dane, rodzina = „dwumianowy”)

Jeżeli wynikiem jest decyzja „tak” lub „nie”, przejdź do uogólniony model liniowy zamiast forsować linię prostą przez zera i jedynki.

Regresja liniowa krok po kroku w R

Ostatnia część tego samouczka dotyczy regresja krokowa algorytm. Celem tego algorytmu jest dodawanie i usuwanie potencjalnych kandydatów w modelach oraz zachowanie tych, którzy mają istotny wpływ na zmienną zależną. Ten algorytm jest sensowny, gdy zbiór danych zawiera dużą listę predyktorów. Nie musisz ręcznie dodawać i usuwać zmiennych niezależnych. Regresja krokowa jest budowana w celu wybrania najlepszych kandydatów pasujących do modelu.

Zobaczmy w praktyce, jak to działa. Zbiór danych mtcars ze zmiennymi ciągłymi służy wyłącznie do ilustracji dydaktycznej. Przed rozpoczęciem analizy warto zbadać zależności w danych za pomocą macierzy korelacji. Biblioteka GGally jest rozszerzeniem ggplot2.

Biblioteka zawiera różne funkcje umożliwiające pokazanie statystyk podsumowujących, takich jak korelacja i rozkład wszystkich zmiennych w macierzy. Użyjemy funkcji ggscatmat, ale możesz odwołać się do winieta aby uzyskać więcej informacji na temat biblioteki GGally.

Podstawowa składnia ggscatmat() jest następująca:

ggscatmat(df, columns = 1:ncol(df), corMethod = "pearson")
arguments:
-df:  A matrix of continuous variables
-columns: Pick up the columns to use in the function. By default, all columns are used
-corMethod: Define the function to compute the correlation between variable. By default, the algorithm uses the Pearson formula

Wyświetlasz korelację wszystkich zmiennych i decydujesz, które z nich najlepiej nadają się do pierwszego kroku regresji krokowej. Istnieją silne korelacje między zmiennymi a zmienną zależną, mpg.

library(GGally)
df <- mtcars %>%
	select(-c(am, vs, cyl, gear, carb))
ggscatmat(df, columns = 1: ncol(df))

Wyjście:

Regresja liniowa krok po kroku w R

Przykład regresji krok po kroku

Wybór zmiennych jest ważnym elementem dopasowania modelu, a regresja krokowa przeprowadza to wyszukiwanie automatycznie. Aby oszacować liczbę możliwych wyborów w zbiorze danych, należy obliczyć Przykład regresji krok po kroku gdzie k jest liczbą predyktorów. Ilość możliwości rośnie wraz z liczbą zmiennych niezależnych. Dlatego musisz mieć automatyczne wyszukiwanie.

Musisz zainstalować pakiet olsrr z CRAN. Pakiet nie jest jeszcze dostępny w Anacondzie. Dlatego instalujesz go bezpośrednio z wiersza poleceń:

install.packages("olsrr")

Możesz wykreślić wszystkie podzbiory możliwości za pomocą kryteriów dopasowania (tj. R-kwadrat, skorygowany R-kwadrat, kryteria Bayesa). Model o najniższych kryteriach AIC będzie modelem ostatecznym.

library(olsrr)
model <- mpg~.
fit <- lm(model, df)
test <- ols_all_subset(fit)
plot(test)

Code Wyjaśnienie

  • mpg ~.: Skonstruuj model do oszacowania
  • lm(model, df): Uruchom model OLS
  • ols_all_subset(dopasowanie): Stwórz wykresy z odpowiednimi informacjami statystycznymi
  • fabuła (test): Narysuj wykresy

Wyjście:

Przykład regresji krok po kroku

Modele regresji liniowej wykorzystują test t Aby oszacować statystyczny wpływ zmiennej niezależnej na zmienną zależną. Naukowcy zazwyczaj ustalają maksymalny próg na 10 procent, a niższe wartości p wskazują na silniejsze powiązanie statystyczne. Regresja krokowa jest oparta na tym teście, aby dodawać i usuwać potencjalne predyktory. Algorytm działa w następujący sposób:

Regresja liniowa krok po kroku w R
Regresja liniowa krok po kroku w R
  • Krok 1: Regresuj każdy predyktor na y oddzielnie. Mianowicie dokonaj regresji x_1 na y, x_2 na y do x_n. Przechowuj Wartość p i utrzymuj regresor z wartością p niższą niż zdefiniowany próg (domyślnie 0.1). Predyktory o istotności mniejszej niż próg zostaną dodane do ostatecznego modelu. Jeśli żadna zmienna nie ma wartości p niższej niż próg wejściowy, algorytm zatrzymuje się i otrzymujesz ostateczny model tylko ze stałą.
  • Krok 2: Użyj predyktora z najniższą wartością p i dodaj osobno jedną zmienną. Regresujesz stałą, najlepszy predyktor kroku pierwszego i trzecią zmienną. Dodajesz do modelu krokowego nowe predyktory o wartości niższej niż próg wejściowy. Jeśli żadna zmienna nie ma wartości p niższej niż 0.1, algorytm się zatrzymuje, a Ty masz swój ostateczny model z tylko jednym predyktorem. Regresujesz model krokowy, aby sprawdzić istotność najlepszych predyktorów kroku 1. Jeśli jest wyższa niż próg usuwania, zachowujesz ją w modelu krokowym. W przeciwnym razie ją wykluczasz.
  • Krok 3: Powtarzasz krok 2 na nowym najlepszym modelu krokowym. Algorytm dodaje predyktory do modelu krokowego na podstawie wprowadzanych wartości i wyklucza predyktor z modelu krokowego, jeśli nie spełnia on progu wykluczającego.
  • Algorytm jest kontynuowany, dopóki nie będzie można dodać ani wykluczyć żadnej zmiennej.

Algorytm można wykonać za pomocą funkcji ols_stepwise() z pakietu olsrr.

ols_stepwise(fit, pent = 0.1, prem = 0.3, details = FALSE)

arguments:
-fit:  Model to fit. Need to use `lm()`before to run `ols_stepwise()
-pent: Threshold of the p-value used to enter a variable into the stepwise model. By default, 0.1
-prem: Threshold of the p-value used to exclude a variable into the stepwise model. By default, 0.3
-details: Print the details of each step

⚠️ Uwaga dotycząca opakowania: W najnowszych wersjach olsrr zmieniono nazwy tych funkcji. Użyj ols_step_all_possible() zamiast ols_all_subset() i ols_step_both_p() Zamiast ols_stepwise(). Argumenty i dane wyjściowe pozostają niezmienione.

Wcześniej pokażemy Ci kroki algorytmu. Poniżej znajduje się tabela ze zmiennymi zależnymi i niezależnymi:

Zmienna zależna Zmienne niezależne
mpg dysp
hp
szczur
wt
sek

Rozpocznij

Na początek algorytm rozpoczyna się od uruchomienia modelu dla każdej zmiennej niezależnej z osobna. Tabela pokazuje wartość p dla każdego modelu.

## [[1]]
##  (Intercept)         disp 
## 3.576586e-21 9.380327e-10 
## 
## [[2]]
##  (Intercept)           hp 
## 6.642736e-18 1.787835e-07 
## 
## [[3]]
##  (Intercept)         drat 
## 0.1796390847 0.0000177624 
## 
## [[4]]
##  (Intercept)           wt 
## 8.241799e-19 1.293959e-10 
## 
## [[5]
## (Intercept)        qsec 
##  0.61385436  0.01708199

Aby wejść do modelu, algorytm zachowuje zmienną o najniższej wartości p. Z powyższego wyniku wynika, że ​​wag

Krok 1

W pierwszym kroku algorytm uruchamia mpg niezależnie na wt i pozostałych zmiennych.

## [[1]]
##  (Intercept)           wt         disp
## 4.910746e-16 7.430725e-03 6.361981e-02 
## 
## [[2]]
##  (Intercept)           wt           hp 
## 2.565459e-20 1.119647e-06 1.451229e-03 
## 
## [[3]]
##  (Intercept)           wt         drat 
## 2.737824e-04 1.589075e-06 3.308544e-01 
## 
## [[4]]
##  (Intercept)           wt         qsec 
## 7.650466e-04 2.518948e-11 1.499883e-03

Każda zmienna jest potencjalnym kandydatem do wejścia do modelu finalnego. Jednak algorytm zachowuje tylko zmienną o niższej wartości p. Okazuje się, że hp ma nieco niższą wartość p niż qsec, więc hp wchodzi do modelu finalnego.

Krok 2

Algorytm powtarza pierwszy krok, ale tym razem z dwiema niezależnymi zmiennymi w ostatecznym modelu.

## [[1]]
##  (Intercept)           wt           hp         disp 
## 1.161936e-16 1.330991e-03 1.097103e-02 9.285070e-01 
## 
## [[2]]
##  (Intercept)           wt           hp         drat 
## 5.133678e-05 3.642961e-04 1.178415e-03 1.987554e-01 
## 
## [[3]]
##  (Intercept)           wt           hp         qsec 
## 2.784556e-03 3.217222e-06 2.441762e-01 2.546284e-01

Żaden z pozostałych kandydatów nie ma wartości p poniżej progu wejścia. Algorytm zatrzymuje się w tym miejscu, a oto ostateczny model:

## 
## Call:
## lm(formula = mpg ~ wt + hp, data = df)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -3.941 -1.600 -0.182  1.050  5.854 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 37.22727    1.59879  23.285  < 2e-16 ***
## wt          -3.87783    0.63273  -6.129 1.12e-06 ***
## hp          -0.03177    0.00903  -3.519  0.00145 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.593 on 29 degrees of freedom
## Multiple R-squared:  0.8268, Adjusted R-squared:  0.8148 
## F-statistic: 69.21 on 2 and 29 DF,  p-value: 9.109e-12

Aby porównać wyniki, możesz użyć funkcji ols_stepwise().

stp_s <-ols_stepwise(fit, details=TRUE)

Wyjście:

Algorytm znajduje rozwiązanie po wykonaniu dwóch kroków i zwraca takie same dane wyjściowe, jak w przypadku ręcznego przejścia opisanego powyżej.

Ostateczny model jest zatem objaśniany przez dwa predyktory i punkt przecięcia: liczba mil na galon jest negatywnie skorelowana zarówno z mocą brutto, jak i masą.

## You are selecting variables based on p value...
## 1 variable(s) added....
## Variable Selection Procedure
##  Dependent Variable: mpg 
## 
##  Stepwise Selection: Step 1 
## 
##  Variable wt Entered 
## 
##                         Model Summary                          
## --------------------------------------------------------------
## R                       0.868       RMSE                3.046 
## R-Squared               0.753       Coef. Var          15.161 
## Adj. R-Squared          0.745       MSE                 9.277 
## Pred R-Squared          0.709       MAE                 2.341 
## --------------------------------------------------------------
##  RMSE: Root Mean Square Error 
##  MSE: Mean Square Error 
##  MAE: Mean Absolute Error 
##		ANOVA                                 
## --------------------------------------------------------------------
##                 Sum of                                              
##                Squares        DF    Mean Square      F         Sig. 
## --------------------------------------------------------------------
## Regression     847.725         1        847.725    91.375    0.0000 
## Residual       278.322        30          9.277                     
## Total         1126.047        31                                    
## --------------------------------------------------------------------
## 
##                                   Parameter Estimates                                    
## ----------------------------------------------------------------------------------------
##       model      Beta    Std. Error    Std. Beta      t        Sig      lower     upper 
## ----------------------------------------------------------------------------------------
## (Intercept)    37.285         1.878                 19.858    0.000    33.450    41.120 
##          wt    -5.344         0.559       -0.868    -9.559    0.000    -6.486    -4.203 
## ----------------------------------------------------------------------------------------
## 1 variable(s) added...
## Stepwise Selection: Step 2 
## 
##  Variable hp Entered 
## 
##                         Model Summary                          
## --------------------------------------------------------------
## R                       0.909       RMSE                2.593 
## R-Squared               0.827       Coef. Var          12.909 
## Adj. R-Squared          0.815       MSE                 6.726 
## Pred R-Squared          0.781       MAE                 1.901 
## --------------------------------------------------------------
##  RMSE: Root Mean Square Error 
##  MSE: Mean Square Error 
##  MAE: Mean Absolute Error 
##			ANOVA                                 
## --------------------------------------------------------------------
##                 Sum of                                              
##                Squares        DF    Mean Square      F         Sig. 
## --------------------------------------------------------------------
## Regression     930.999         2        465.500    69.211    0.0000 
## Residual       195.048        29          6.726                     
## Total         1126.047        31                                    
## --------------------------------------------------------------------
## 
##                                   Parameter Estimates                                    
## ----------------------------------------------------------------------------------------
##       model      Beta    Std. Error    Std. Beta      t        Sig      lower     upper 
## ----------------------------------------------------------------------------------------
## (Intercept)    37.227         1.599                 23.285    0.000    33.957    40.497 
##          wt    -3.878         0.633       -0.630    -6.129    0.000    -5.172    -2.584 
##          hp    -0.032         0.009       -0.361    -3.519    0.001    -0.050    -0.013 
## ----------------------------------------------------------------------------------------
## No more variables to be added or removed.

Regresja liniowa w R: najważniejsze wnioski i odniesienie do funkcji

  • Regresja liniowa odpowiada na proste pytanie: czy można zmierzyć dokładną zależność między jedną zmienną docelową i zbiorem predyktorów?
  • Metoda najmniejszych kwadratów zwykłych znajduje parametry, które minimalizują sumę kwadratów błędów, czyli pionową odległość między przewidywanymi wartościami y i rzeczywistymi wartościami y.
  • Model probabilistyczny, który zawiera więcej niż jedną zmienną niezależną, nazywany jest modelem regresji wielokrotnej.
  • Celem algorytmu regresji liniowej krok po kroku jest dodawanie i usuwanie potencjalnych kandydatów w modelach oraz pozostawianie tych, którzy mają istotny wpływ na zmienną zależną.
  • Wybór zmiennych stanowi istotną część dopasowywania modelu, a regresja krokowa umożliwia automatyczne przeprowadzenie tego wyszukiwania.

Poniżej znajduje się lista wszystkich funkcji użytych w tym samouczku:

Biblioteka Cel Funkcjonować Argumenty
baza Oblicz regresję liniową lm() formuła, dane
baza Podsumuj model streszczenie() dopasować
baza Extracwspółczynniki t lm()$współczynnik
baza Extract reszty lm()$reszty
baza Extracwartość dopasowana t lm()$dopasowane.wartości
olsrr Uruchom regresję krokową ols_stepwise() pasuje, pent = 0.1, premia = 0.3, szczegóły = FAŁSZ

Note:Pamiętaj, aby przed dopasowaniem modelu przekształcić zmienne kategoryczne w czynniki.

FAQ

R-kwadrat zawsze rośnie, gdy dodajesz predyktor, nawet bezużyteczny. Skorygowany R-kwadrat karze każdy dodatkowy człon, więc może spaść. Użyj skorygowanego R-kwadrat, porównując modele z różną liczbą predyktorów.

Wykres Reszty vs. Dźwignia zaznacza punkty wpływowe na podstawie odległości Cooka. Zbadaj je przed usunięciem czegokolwiek: obserwacja odstająca może być błędem wprowadzania danych lub może być najbardziej pouczającą obserwacją w próbie.

Nie. R automatycznie tworzy zmienne fikcyjne, gdy kolumna staje się czynnikiem. Pierwszy poziom staje się grupą odniesienia, a każdy kolejny współczynnik jest odczytywany jako różnica od tej linii bazowej.

Regresja liniowa jest szybka, w pełni audytowalna i trudna do przeuczenia, co czyni ją standardową podstawą, zanim jakikolwiek zespół zajmujący się sztuczną inteligencją podejmie się wdrażania technologii gradient boosting lub sieci neuronowych. Sektory regulowane często wymagają takiej transparentności.

Tak. Asystenci AI mogą proponować specyfikacje kandydatów, objaśniać krok po kroku wyniki i ostrzegać o współliniowości. Potraktuj te sugestie jako hipotezy i potwierdź każdą z nich własną diagnostyką i wiedzą specjalistyczną.

Podsumuj ten post następująco: