Wczytanie wymaganych pakietów:
library(car)
## Warning: pakiet 'car' został zbudowany w wersji R 4.4.2
## Ładowanie wymaganego pakietu: carData
## Warning: pakiet 'carData' został zbudowany w wersji R 4.4.2
library(splines)
library(mgcv)
## Ładowanie wymaganego pakietu: nlme
## This is mgcv 1.9-1. For overview type 'help("mgcv-package")'.
library(MASS)
library(ggplot2)
Model LOESS (lub LOWESS) to nieliniowa metoda regresji, która dopasowuje krzywe do danych poprzez lokalne dopasowania wielomianowe. Jest szczególnie użyteczny przy analizie nieliniowych zależności między zmiennymi.
Lokalne dopasowanie: Analizuje dane w „oknach” o szerokości kontrolowanej parametrem span.
Elastyczność: Nie wymaga założeń dotyczących kształtu zależności między zmiennymi.
span: Steruje stopniem wygładzenia. degree: Określa stopień wielomianu (np. liniowy lub kwadratowy). family: Ustala sposób ważenia punktów.
Zalety: Elastyczne modelowanie nieliniowych trendów, pomocne w eksploracji i wygładzaniu danych. Wady: Wysokie wymagania obliczeniowe i brak globalnej formuły.
W poniższym przykładzie model analizuje zależność między dochodami a prestiżem zawodowym, wykorzystując 75% danych w lokalnych dopasowaniach (span=0.75) i wielomian kwadratowy (degree=2). Wyniki wizualizują przewidywane trendy w danych.
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='orange')
Model LOESS został użyty do dopasowania relacji między dochodami a prestiżem zawodowym. Parametr span=0.75 analizuje 75% sąsiednich punktów, a stopień wielomianu (degree=2) uchwytuje kwadratowe zależności. Model jest wizualizowany na wykresie, aby porównać predykcje z rzeczywistymi danymi. Jądro Tri-Cube, zmienna szerokość pasma i rzędowość wielomianu to kluczowe elementy modelu, które pozwalają 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'
Dzięki lokalnym modelom liniowym w lokalnych wielomianach, łatwo jest
znaleźć błędy standardowe dla dopasowanych wartości. Połączone razem,
tworzą punktowy przedział ufności, który jest automatycznie tworzony
przy użyciu funkcji geom_smooth.
Model interpolacji splotowej to zaawansowane narzędzie do analizy danych i modelowania nieliniowych zależności między zmiennymi. Sploty wykorzystują segmentowe funkcje wielomianowe, które są łączone w sposób zapewniający płynność 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='orange')
W przedstawionym wykresie model splotów interpolujących został wykorzystany do wygładzenia danych za pomocą linii opisującej główny trend i modelowania zależności między dochodem (income) a prestiżem zawodowym (prestige) w danych.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 za pomocą funkcji sklejanych. Są szczególnym przypadkiem funkcji spline, gdzie na końcach przedziału dopasowanie jest wymuszone na liniowe. Liczba węzłów i stopnie swobody kontrolują złożoność modelu, zapewniając płynność i ciągłość w punktach przejścia.
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='orange')
Modelowanie zależności prestige od income za pomocą naturalnych splotów z df=6 (stopnie swobody). Wykres pokazuje dane (geom_point) i umiarkowanie elastyczną linię dopasowaną (geom_line).
Gładkie funkcje to bardziej elastyczna metoda modelowania nieliniowych zależności, często stosowana w uogólnionych modelach addytywnych (GAM). Dopasowują się do danych bez z góry ustalonego wzoru, a ich kształt zależy od danych i parametrów regulacji. Węzły (ang. knots) są umieszczane automatycznie, a ich liczba może być regulowana parametrem k. Regularyzacja balansuje między dopasowaniem a gładkością funkcji, unikając nadmiernego dopasowania.
ggplot(Prestige) +
geom_point(aes(x=income,y=prestige)) +
geom_smooth(aes(x=income,y=prestige), method='gam',
formula = y ~ s(x,k=12))
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 modelowania danych można rozszerzyć na więcej wymiarów, w tym:
Metody jądra wielowymiarowego: Używane do analizy danych w wielu wymiarach.
Wielowymiarowe lokalne powierzchnie kwadratowe: Dopasowują lokalne modele kwadratowe do danych wielowymiarowych.
Cienkie splajny: 2-wymiarowa wersja splajnów wygładzających, stosowana do modelowania nieliniowych zależności w danych wielowymiarowych.
lomod <- loess(prestige ~ income + education, data=Prestige)
smod <- gam(prestige ~ s(income, education), data=Prestige)
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='orange')
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='orange')
ggplot(mcycle) +
geom_point(aes(x=times,y=accel)) +
geom_smooth(aes(x=times,y=accel), method='gam',
formula = y ~ s(x,k=6))
Szerokość pasma (parametr span) ma kluczowe znaczenie. Mniejsze span powoduje bardziej szczegółowe dopasowanie, uwzględniając tylko najbliższe sąsiedztwo punktów, co 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).
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ę.
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.
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.
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.
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.
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.
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.
Elastyczność jest kontrolowana przez liczbę węzłów (ang. knots) lub stopnie swobody (df). Więcej węzłów zwiększa elastyczność modelu.
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.
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ść.
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.
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.
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ą.
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.
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.