Jak wykonać regresję loess w r (z przykładem)


Regresja LOESS , czasami nazywana regresją lokalną, to metoda wykorzystująca lokalne dostosowanie w celu dopasowania modelu regresji do zbioru danych.

Poniższy przykład pokazuje krok po kroku, jak przeprowadzić regresję LOESS w R.

Krok 1: Utwórz dane

Najpierw utwórzmy następującą ramkę danych w R:

 #view DataFrame
df <- data. frame (x=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14),
                 y=c(1, 4, 7, 13, 19, 24, 20, 15, 13, 11, 15, 18, 22, 27))

#view first six rows of data frame
head(df)

  xy
1 1 1
2 2 4
3 3 7
4 4 13
5 5 19
6 6 24

Krok 2: Dopasuj wiele modeli regresji LOESS

Możemy użyć funkcji loess() , aby dopasować do tego zbioru danych wiele modeli regresji LOESS, stosując różne wartości parametru span :

 #fit several LOESS regression models to dataset
loess50 <- loess(y ~ x, data=df, span= .5 )
smooth50 <- predict(loess50) 

loess75 <- loess(y ~ x, data=df, span= .75 )
smooth75 <- predict(loess75) 

loess90 <- loess(y ~ x, data=df, span= .9 )
smooth90 <- predict(loess90) 

#create scatterplot with each regression line overlaid
plot(df$x, df$y, pch= 19 , main=' Loess Regression Models ')
lines(smooth50, x=df$x, col=' red ')
lines(smooth75, x=df$x, col=' purple ')
lines(smooth90, x=df$x, col=' blue ')
legend(' bottomright ', legend=c(' .5 ', ' .75 ', ' .9 '),
        col=c(' red ', ' purple ', ' blue '), pch= 19 , title=' Smoothing Span ')

Regresja lessowa w R

Należy zauważyć, że im niższą wartość zastosujemy dla span , tym mniej „gładki” będzie model regresji i tym bardziej model będzie próbował dopasować punkty danych.

Krok 3: Użyj walidacji krzyżowej typu K, aby znaleźć najlepszy model

Aby znaleźć optymalną wartość zakresu , możemy przeprowadzić k-krotną weryfikację krzyżową , korzystając z funkcji z pakietu caret :

 library (caret)

#define k-fold cross validation method
ctrl <- trainControl(method = " cv ", number = 5 )
grid <- expand. grid (span = seq( 0.5 , 0.9 , len = 5 ), degree = 1 )

#perform cross-validation using smoothing spans ranging from 0.5 to 0.9
model <- train(y ~ x, data = df, method = " gamLoess ", tuneGrid=grid, trControl = ctrl)

#print results of k-fold cross-validation
print (model)

14 samples
 1 predictor

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 12, 11, 11, 11, 11 
Resampling results across tuning parameters:

  span RMSE Rsquared MAE      
  0.5 10.148315 0.9570137 6.467066
  0.6 7.854113 0.9350278 5.343473
  0.7 6.113610 0.8150066 4.769545
  0.8 17.814105 0.8202561 11.875943
  0.9 26.705626 0.7384931 17.304833

Tuning parameter 'degree' was held constant at a value of 1
RMSE was used to select the optimal model using the smallest value.
The final values used for the model were span = 0.7 and degree = 1.

Widzimy, że wartość rozpiętości , która dała najniższą wartość błędu średniokwadratowego (RMSE), wynosi 0,7 .

Zatem w naszym ostatecznym modelu regresji LOESS zdecydowalibyśmy się użyć wartości 0,7 dla argumentu span w funkcji loess() .

Dodatkowe zasoby

Poniższe samouczki zawierają dodatkowe informacje na temat modeli regresji w języku R:

Jak wykonać prostą regresję liniową w R
Jak wykonać wielokrotną regresję liniową w R
Jak przeprowadzić regresję logistyczną w R
Jak przeprowadzić regresję kwantylową w R
Jak przeprowadzić regresję ważoną w R

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *