Jak wykonać test braku dopasowania w r (krok po kroku)


Test braku dopasowania służy do określenia, czy pełny model regresji zapewnia znacznie lepsze dopasowanie do zbioru danych niż zredukowana wersja modelu.

Załóżmy na przykład, że chcemy wykorzystać liczbę przepracowanych godzin do przewidywania wyników egzaminów studentów określonej uczelni. Możemy zdecydować się na dostosowanie następujących dwóch modeli regresji:

Model pełny: wynik = β 0 + B 1 (godziny) + B 2 (godziny) 2

Model zredukowany: wynik = β 0 + B 1 (godziny)

Poniższy przykład pokazuje krok po kroku, jak przeprowadzić test braku dopasowania w R, aby określić, czy pełny model zapewnia znacznie lepsze dopasowanie niż model zredukowany.

Krok 1: Utwórz i wizualizuj zbiór danych

Najpierw użyjemy poniższego kodu, aby utworzyć zbiór danych zawierający liczbę przepracowanych godzin i wyniki egzaminów uzyskane dla 50 uczniów:

 #make this example reproducible
set. seeds (1)

#create dataset
df <- data. frame (hours = runif (50, 5, 15), score=50)
df$score = df$score + df$hours^3/150 + df$hours* runif (50, 1, 2)

#view first six rows of data
head(df)

      hours score
1 7.655087 64.30191
2 8.721239 70.65430
3 10.728534 73.66114
4 14.082078 86.14630
5 7.016819 59.81595
6 13.983897 83.60510

Następnie utworzymy wykres rozrzutu, aby zwizualizować związek między godzinami a wynikiem:

 #load ggplot2 visualization package
library (ggplot2)

#create scatterplot
ggplot(df, aes (x=hours, y=score)) +
  geom_point() 

Krok 2: Dopasuj dwa różne modele do zbioru danych

Następnie dopasujemy do zbioru danych dwa różne modele regresji:

 #fit full model
full <- lm(score ~ poly (hours,2), data=df)

#fit reduced model
reduced <- lm(score ~ hours, data=df)

Krok 3: Wykonaj test braku dopasowania

Następnie użyjemy polecenia anova() , aby przeprowadzić test braku dopasowania pomiędzy dwoma modelami:

 #lack of fit test
anova(full, reduced)

Analysis of Variance Table

Model 1: score ~ poly(hours, 2)
Model 2: score ~ hours
  Res.Df RSS Df Sum of Sq F Pr(>F)   
1 47 368.48                                
2 48 451.22 -1 -82.744 10.554 0.002144 **
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Statystyka testu F wynosi 10,554 , a odpowiadająca jej wartość p wynosi 0,002144 . Ponieważ ta wartość p jest mniejsza niż 0,05, możemy odrzucić hipotezę zerową testu i stwierdzić, że model pełny zapewnia statystycznie znacząco lepsze dopasowanie niż model zredukowany.

Krok 4: Wizualizuj ostateczny model

Wreszcie możemy wizualizować ostateczny model (pełny model) w porównaniu z oryginalnym zbiorem danych:

 ggplot(df, aes (x=hours, y=score)) + 
          geom_point() +
          stat_smooth(method=' lm ', formula = y ~ poly (x,2), size = 1) + 
          xlab(' Hours Studied ') +
          ylab(' Score ') 

Wizualizacja braku dopasowania u R

Widzimy, że krzywa modelu całkiem dobrze pasuje do danych.

Dodatkowe zasoby

Jak wykonać prostą regresję liniową w R
Jak wykonać wielokrotną regresję liniową w R
Jak wykonać regresję wielomianową w R

Dodaj komentarz

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