Model LOESS (lub LOWESS) jest nieliniową metodą regresji używaną do dopasowywania krzywych do danych, szczególnie w sytuacjach, gdy zależność między zmiennymi nie jest liniowa. LOESS wykorzystuje lokalne dopasowania wielomianowe do opisu trendów w danych, co pozwala na elastyczne modelowanie zmiennych.
Lokalne dopasowanie:
LOESS stosuje dopasowanie funkcji (zwykle wielomianów) w małych fragmentach danych, określanych jako “okna”.
Każde okno uwzględnia pewien procent danych, określony przez parametr span.
Elastyczność:
Model nie wymaga wcześniejszych założeń dotyczących kształtu zależności między zmiennymi.
Pozwala na modelowanie nieliniowych relacji.
Parametry modelu:
span: Kontroluje szerokość okna, czyli zakres danych używanych do lokalnego dopasowania. Większa wartość span prowadzi do bardziej wygładzonego dopasowania, podczas gdy mniejsza pozwala uchwycić drobne szczegóły.
degree: Określa stopień wielomianu stosowanego w lokalnym dopasowaniu (np. 1 dla liniowego, 2 dla kwadratowego).
family: Wybiera funkcję ważenia dla punktów (np. gaussian dla uśredniania metodą Gaussa). Zastosowanie: Analiza danych eksploracyjnych: LOESS jest często wykorzystywany do eksploracji danych, gdy nie mamy pewności co do kształtu relacji między zmiennymi.
Wygładzanie danych: Pomaga w wizualizacji trendów w danych, eliminując wpływ szumu.
Dopasowanie nieliniowe: Idealny do danych o skomplikowanych zależnościach, gdzie regresja liniowa nie jest wystarczająca.
Wady: Duże wymagania obliczeniowe: LOESS jest kosztowny obliczeniowo, szczególnie dla dużych zbiorów danych.
Brak parametryzacji globalnej: Model działa dobrze lokalnie, ale nie daje ogólnej formuły opisującej całe dane.
W kontekście kodu: Model LOESS w powyższym kodzie został użyty do dopasowania relacji między dochodami (income) a prestiżem zawodowym (prestige). Parametr span=0.75 wskazuje, że model analizuje 75% sąsiednich punktów dla każdego dopasowania lokalnego, a stopień wielomianu (degree=2) pozwala na uchwycenie kwadratowych zależności. Wygenerowany model jest wizualizowany na wykresie, aby porównać predykcje z rzeczywistymi danymi.
fit <- loess(prestige ~ income, data=Prestige, span=0.75, degree=2, family="gaussian")
# Generowanie predykcji
Prestige$predicted <- predict(fit)
# Wykres
ggplot(Prestige) +
geom_point(aes(x=income, y=prestige)) +
geom_line(aes(x=income, y=predicted), col='blue')
smr <- loess(prestige ~ income, data=Prestige)
ggplot(Prestige) +
geom_point(aes(x=income,y=prestige)) +
ggtitle("Prestige (Loess, span=0.75)") +
geom_line(aes(x=income, y=fitted(smr)),
col='blue')
Model LOESS w powyższym kodzie został użyty do dopasowania relacji
między dochodami (income
) a prestiżem zawodowym
(prestige
). Parametr span=0.75
wskazuje, że
model analizuje 75% sąsiednich punktów dla każdego dopasowania
lokalnego, a stopień wielomianu (degree=2
) pozwala na
uchwycenie kwadratowych zależności. Wygenerowany model jest
wizualizowany na wykresie, aby porównać predykcje z rzeczywistymi
danymi. Jądro Tri-Cube, zmienna szerokość pasma
kontrolowana przez span
, oraz rzędowość
wielomianu — stanowią podstawowe elementy konstrukcyjne modelu
LOESS. Dzięki nim model LOESS jest elastyczny, lokalny i potrafi dobrze
uchwycić nieliniowe zależności w danych.
ggplot(Prestige) +
geom_point(aes(x=income,y=prestige)) +
geom_smooth(aes(x=income,y=prestige), method='loess',
span=0.75)
## `geom_smooth()` using formula = 'y ~ x'
Ponieważ lokalne wielomiany wykorzystują lokalne modele liniowe, możemy łatwo znaleźć błędy standardowe dla dopasowanych wartości. Połączone razem, tworzą one punktowy przedział ufności. Automatycznie tworzone przy użyciu geom_smooth.
Model splotów interpolujących (ang. spline interpolation) jest potężnym narzędziem stosowanym do analizy danych i modelowania nieliniowych zależności między zmiennymi. Sploty wykorzystują kawałkowe funkcje wielomianowe, które są łączone w sposób zapewniający gładkość i ciągłość w punktach przejścia (węzłach).
smr <- smooth.spline(
Prestige$income,
Prestige$prestige,
cv=TRUE)
## Warning in smooth.spline(Prestige$income, Prestige$prestige, cv = TRUE):
## krzyżowa walidacja z nieunikalnymi wartościami 'x' wydaje się wątpliwa
smr <- data.frame(x=smr$x,y=smr$y)
ggplot(Prestige) +
geom_point(aes(x=income,y=prestige)) +
ggtitle("Old Faithful (Sploty interpolujące, lambda wybrana przez CV)") +
geom_line(data=smr, aes(x=x, y=y), col='blue')
W przedstawionym przykładzie model splotów interpolujących został wykorzystany do:
Modelowania zależności między dochodem (income
) a
prestiżem zawodowym (prestige
) w danych.
Wygładzenia danych za pomocą linii opisującej główny trend, przy
jednoczesnym uniknięciu nadmiernego dopasowania dzięki zastosowaniu
optymalnego parametru lambda
, dobranego za pomocą walidacji
krzyżowej.
Linia wygładzająca pozwala na wizualizację głównej zależności, dzięki czemu możemy łatwiej interpretować dane i przewidywać potencjalne wartości zmiennych.
Naturalne sploty to technika dopasowania nieliniowych zależności między zmiennymi przy użyciu funkcji sklejanych. Są szczególnym przypadkiem funkcji spline, gdzie na końcach przedziału dopasowanie jest wymuszone na liniowe.
Funkcja sklejana:
Liniowość na krańcach:
Kontrola elastyczności:
Liczba węzłów i stopnie swobody (degrees of freedom, df) kontrolują złożoność modelu.
Więcej węzłów = większa elastyczność.
fit <- lm(prestige ~ ns(income, df=6), Prestige)
ggplot(Prestige) +
geom_point(aes(x=income,y=prestige)) +
ggtitle("Old Faithful (Naturalne sploty, 6 df)") +
geom_line(aes(x=income, y=fitted(fit)), col='blue')
W kontekście kodu
Modelowanie zależności prestige
od
income
za pomocą naturalnych
splotów.
Stopnie swobody (df=6
) określają elastyczność
dopasowania.
Wykres pokazuje dane (geom_point
) i dopasowaną linię
(geom_line
), która jest umiarkowanie elastyczna i stabilna
na krańcach danych.
Gładkie funkcje to bardziej elastyczna metoda modelowania nieliniowych zależności, często używana w uogólnionych modelach addytywnych (GAM). Funkcja dopasowuje się do danych bez z góry ustalonego wzoru.
Automatyczne dopasowanie:
Elastyczność:
k
.Regularyzacja:
ggplot(Prestige) +
geom_point(aes(x=income,y=prestige)) +
geom_smooth(aes(x=income,y=prestige), method='gam',
formula = y ~ s(x,k=12))
W kontekście kodu
Dopasowanie za pomocą gładkiej funkcji w modelu addytywnym (GAM).
Większa elastyczność dzięki k=12
(liczba węzłów
regulująca złożoność modelu).
Wykres pokazuje bardziej dopasowaną krzywą
(geom_smooth
), lepiej odwzorowującą nieliniowe
zależności.
Większość metod w naturalny sposób rozszerza się na więcej wymiarów.
Metody jądra wielowymiarowego Wielowymiarowe lokalne powierzchnie kwadratowe Cienkie splajny (2-d wersja splajnów wygładzających)
library(mgcv)
## Ładowanie wymaganego pakietu: nlme
##
## Dołączanie pakietu: 'nlme'
## Następujący obiekt został zakryty z 'package:dplyr':
##
## collapse
## This is mgcv 1.8-42. For overview type 'help("mgcv-package")'.
lomod <- loess(prestige ~ income + education, data=Prestige)
smod <- gam(prestige ~ s(income, education), data=Prestige)
library(MASS)
##
## Dołączanie pakietu: 'MASS'
## Następujący obiekt został zakryty z 'package:dplyr':
##
## select
data("mcycle")
ggplot(mcycle) +
geom_point(aes(x=times, y=accel))
mcycle <- as.data.frame(mcycle)
smr <- loess(accel ~ times, data=mcycle)
ggplot(mcycle) +
geom_point(aes(x=times, y=accel)) +
ggtitle("Mcycle (Loess, span=0.75)") +
geom_line(aes(x=times, y=fitted(smr)), col='blue')
ggplot(mcycle) +
geom_point(aes(x=times,y=accel)) +
geom_smooth(aes(x=times,y=accel), method='loess',
span=0.7)
## `geom_smooth()` using formula = 'y ~ x'
fit <- lm(accel ~ ns(times, df=6), mcycle)
ggplot(mcycle) +
geom_point(aes(x=times,y=accel)) +
ggtitle("Old Faithful (Naturalne sploty, 6 df)") +
geom_line(aes(x=times, y=fitted(fit)), col='blue')
ggplot(mcycle) +
geom_point(aes(x=times,y=accel)) +
geom_smooth(aes(x=times,y=accel), method='gam',
formula = y ~ s(x,k=6))
LOESS
Szerokość pasma (parametr span
) ma kluczowe
znaczenie.Mniejsze span
powoduje bardziej szczegółowe
dopasowanie, uwzględniając tylko najbliższe sąsiedztwo punktów. To może
prowadzić do nadmiernego dopasowania (overfitting). Większe
span
prowadzi do gładszego dopasowania, ale może nie
oddawać złożonych wzorców w danych (underfitting).
Naturalne Sploty
Elastyczność jest kontrolowana przez liczbę węzłów (ang.
knots) lub stopnie swobody (df
). Więcej węzłów
zwiększa elastyczność modelu.
GAM
Szerokość pasma w GAM odpowiada liczbie węzłów (k
).
Więcej węzłów pozwala uchwycić bardziej złożone zależności, ale zbyt
wiele może prowadzić do nadmiernego dopasowania.
Sploty Interpolujące
W splotach interpolujących funkcja jest wymuszona, by przechodzić dokładnie przez każdy punkt danych. Nie ma możliwości regulacji szerokości pasma.
LOESS
Ilość lokalnych regresji jest pośrednio kontrolowana przez
span
. Mniejszy span
oznacza więcej lokalnych
dopasowań, co zwiększa szczegółowość, ale może uwypuklać szumy. Większy
span
zmniejsza liczbę lokalnych dopasowań, dając bardziej
ogólną linię.
Naturalne Sploty
Więcej węzłów (lub wyższe df
) pozwala na bardziej
szczegółowe dopasowanie, podobnie jak mniejszy span
w
LOESS. Mniejsza liczba węzłów powoduje gładsze dopasowanie
GAM
W GAM liczba lokalnych dopasowań zależy od liczby węzłów i stopnia gładkości regulowanego automatycznie przez algorytm. Dobrze dobrana liczba węzłów zapewnia równowagę między szczegółowością a gładkością.
Sploty Interpolujące
Nie występuje pojęcie lokalnych regresji. Sploty interpolujące to metoda globalna, która dopasowuje się idealnie do danych, co może prowadzić do nadmiernego dopasowania.
LOESS
Zazwyczaj daje bardziej szczegółowe i lokalne dopasowanie w
porównaniu do innych metod, szczególnie przy małym span
. W
przypadku dużego span
wyniki mogą być bardziej podobne do
tych z innych metod.
Naturalne Sploty
Naturalne sploty dają bardziej globalne dopasowanie niż LOESS, szczególnie na krańcach przedziału, gdzie wymuszają liniowość. Względem GAM wyniki mogą być podobne, choć GAM oferuje większą elastyczność.
GAM
GAM jest bardziej elastyczny niż naturalne sploty, szczególnie w przypadku bardzo złożonych danych. W porównaniu z LOESS, wyniki są bardziej globalne i mniej podatne na szumy.
Sploty Interpolujące
Wyniki splotów interpolujących różnią się znacząco. Funkcja przechodzi przez wszystkie punkty danych, co może prowadzić do nienaturalnych oscylacji, szczególnie w przypadku szumów.
LOESS
Jest dokładniejsza w uchwyceniu lokalnych wzorców, ale jej dokładność
zależy od odpowiedniego doboru span
. Przy złym ustawieniu
pasma może prowadzić do nadmiernego dopasowania lub
niedopasowania.
Naturalne Sploty
Naturalne sploty są dokładne przy umiarkowanie złożonych danych. Są mniej podatne na szumy niż LOESS i dobrze nadają się do modelowania umiarkowanie nieliniowych zależności.
GAM
Jest najdokładniejszy przy modelowaniu złożonych, nieliniowych zależności. Automatyczna regulacja gładkości sprawia, że jest bardziej uniwersalny niż LOESS i naturalne sploty.
Sploty Interpolujące
Sploty interpolujące są dokładne w dopasowaniu do idealnych danych. W praktyce, ich wrażliwość na szumy czyni je mniej użytecznymi niż LOESS, naturalne sploty czy GAM.
Pytanie | LOESS | Naturalne Sploty | GAM | Sploty Interpolujące |
---|---|---|---|---|
Czy szerokość pasma ma znaczenie? | Tak | Tak (df lub węzły) |
Tak (k lub gładkość) |
Nie |
Czy ilość lokalnych regresji ma znaczenie? | Tak | Tak (więcej węzłów) | Tak (więcej węzłów) | Nie |
Czy metody dają różne czy podobne rezultaty? | Lokalnie szczegółowe | Globalnie stabilne | Gładkie i elastyczne | Dokładne, ale wrażliwe na szum |
Która regresja jest dokładniejsza? | Lokalna dokładność | Dobra stabilność | Uniwersalna dokładność | Dokładna tylko dla idealnych danych |