Co to znaczy, że model jest dobrze dopasowany?
Założenia modelu dotyczą typu zależności (czy jest to zależność liniowa) oraz tzw. reszt z modelu. Reszty z modelu to różnica między wartością obserwowaną \(y\) oraz wartością oszacowaną z modelu \(\hat{y}\).
\[reszty = y - \hat{y}\]
Do sprawdzenia założeń modelu wykorzystuje się wykresy diagnostyczne.
<- readRDS("dane/dane2007.rds") dane
<- lm(formula = tg10cm ~ tg5cm, data = dane) model_lm
<-summary(model_lm) smr_model_lm
smr_model_lm
##
## Call:
## lm(formula = tg10cm ~ tg5cm, data = dane)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.46323 -0.23488 -0.01063 0.26094 0.94909
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.229146 0.036519 6.275 9.98e-10 ***
## tg5cm 0.960496 0.002734 351.257 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4108 on 363 degrees of freedom
## Multiple R-squared: 0.9971, Adjusted R-squared: 0.9971
## F-statistic: 1.234e+05 on 1 and 363 DF, p-value: < 2.2e-16
Istnieje kilka metod oceny dopasowania modelu:
model niedoszacowuje wartości
model przeszacowuje wartości
“Dobry model” to taki, który nie będzie regularnie przeszacowywał lub niedoszacowywał przewidywanych wartości. W “dobrym modelu” reszty dodatnie i ujemne będą się równoważyć - średnia reszt będzie zbliżona do 0 (model czasami przewidzi niższą wartość, czasami wyższą, ale w większości przypadków różnice między tym co obserwowane a tym co wyliczone z modelu będą oscylowały koło 0).
Przy ocenie dopasowania modelu należy zwrócić uwagę na wartość R2 przedstawiającą procent wariancji wyjaśnionej przez model, tzn. jaki procent zmienności zmiennej zależnej (objaśnianej) jest uwarunkowany zmiennością zmiennej niezależnej (objaśniającej).
Im wyższa wartość współczynnika R2 (maksymalnie to 1) tym lepsze dopasowanie modelu do danych. Niestety również im więcej zmiennych w modelu tym wyższa jest wartość współczynnika R2.
Aby uwzględnić liczbę zmiennych w modelu stosuje się modyfikację współczynnika R2, tzw. Zmodyfikowany R2 (ang. Adjusted R2)
c( R2 = smr_model_lm$r.squared, R2_adj = smr_model_lm$adj.r.squared)
## R2 R2_adj
## 0.9970665 0.9970585
99,71% zmienności zmiennej tg10cm jest wyjaśniona przez zmienność zmiennej tg5cm.
confint(model_lm, level = 0.99)
## 0.5 % 99.5 %
## (Intercept) 0.1345839 0.3237090
## tg5cm 0.9534151 0.9675766
W powyższym przykładzie został obliczony 99% przedział ufności. Objaśnienie wyniku:
Obliczona wartość wyrazu wolnego (model_lm$coeff) równa jest 0.229146, a z 99% prawdopodobieństwem będzie się mieścić w przedziale 0.1345839 a 0.3237090
Test identyfikuje najbardziej odstające obserwacje. Podaje numer przypadku (w danych 324 i 127)
library(car)
## Loading required package: carData
outlierTest(model_lm)
## rstudent unadjusted p-value Bonferroni p
## 324 -6.324241 7.5041e-10 2.7390e-07
## 127 -5.153857 4.2053e-07 1.5349e-04
Możemy się tym obserwacjom bliżej przyjrzeć:
c(324, 127), ] dane[
## data mce tps tmin tmax tg5cm tg10cm tg20cm tg50cm tg100cm TwP TwMP
## 324 11/20/2007 11 -0.3 -1.3 0.8 4.2 1.8 2.07 3.50 6.5 3 3.0
## 127 5/7/2007 5 13.5 2.4 21.5 17.4 14.9 14.93 13.23 12.1 11 10.3
library(ggplot2)
ggplot(dane, aes(x=tg5cm, y=tg10cm)) +
geom_point() +
geom_point(data = dane[c(324, 127),], aes(x=tg5cm, y=tg10cm), color = "red", size = 4) +
coord_fixed(ratio = 1) +
xlab("tg5cm: Temperatura gruntu na 5cm [C]") +
ylab("tg10cm: Temperatura gruntu na 10cm [C]") +
geom_smooth() +
geom_abline(color = 'grey') +
theme_bw()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Po dopasowaniu modelu powinniśmy wpierw sprawdzić czy spełnione są przyjęte założenia. Jeśli zalożenia modelu są spełnione, to zakłócenia losowe (błędy) powinny mieć rozkład normalny o równych wariancjach. Założenia modelu możemy badać weryfikując właściwości reszt. Do badania reszt służą tzw. wykresy diagnostyczne.
Residuals vs Fitted (Reszty vs. wartości dopasowane przez model)
Normal Q-Q (wykres kwantylowy dla rozkładu normalnego)
Scale-Location
Residuals vs Leverage
Czego możemy dowiedzieć się z wykresów diagnostycznych dla modelu zależności między tg10cm a tg5 cm?
par(mfrow = c(2, 2))
plot(model_lm)
ggfortify
library(ggfortify)
autoplot(model_lm) + theme_classic()
ggResidpanel
Pakiet ggResidpanel
dostarcza 5 funkcji, które pozwalają na wykonanie wykresów diagnostycznych zgodnych ze stylizacją pakietu ggplot()
lub też interaktywnych wykresów diagnostycznych (wykorzystując bibliotekę plotly). Pakiet pozwala na wykonanie 9 różnych wykresów (argument plots definiuje jakie wykresy będą wykonane). Opis możliwości pakietu znajduje się w dokumentacji, na stronie .
Pakiet składa się z 5 funkcji:
library(ggResidpanel)
resid_panel(model_lm)
resid_panel(model_lm, plots = "R")
resid_panel(model_lm, plots = "all")
resid_panel(model_lm, plots = c("resid", "hist", "yvp"))
resid_interact(model_lm)
## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomFunction() has yet to be implemented in plotly.
## If you'd like to see this geom implemented,
## Please open an issue with your example code at
## https://github.com/ropensci/plotly/issues
resid_interact(model_lm, plots = "R")
Używając danych z pliku dane2007.rds
proszę wykonać zadania 1-2. Wyniki proszę przedstawić w postaci krótkiego raportu (wraz z rycinami do 2 stron) zawierającego odpowiednie wykresy oraz interpretację wyników.
Proszę zbudować model zależności temperatury wody w Parsęcie (TwP) od temperatury powietrza (tps). Proszę wykonać ocenę dopasowania modelu obejmującą:
określenie współczynnika determinacji.
identyfikację wartości odstających
analizę reszt:
Proszę zbudować model zależności temperatury wody w Parsęcie (TwP) od temperatury gruntu na 50 cm. Proszę wykonać ocenę dopasowania modelu obejmującą:
określenie współczynnika determinacji.
identyfikację wartości odstających
analizę reszt: