Poniższe wyjaśnienie nie ogranicza się do regresji logistycznej, ale ma zastosowanie w równym stopniu do normalnej regresji liniowej i innych GLM. Zwykle R
wyklucza jeden poziom jakościowy, a współczynniki oznaczają różnicę każdej klasy w stosunku do tej klasy referencyjnej (lub czasami nazywanej klasą bazową) (nazywa się to kodowaniem pozorowanym lub kontrastami leczenia R
, zobacz tutaj doskonały przegląd różnych opcji kontrastu ). Aby zobaczyć bieżące kontrasty R
, wpisz options("contrasts")
. Zwykle R
porządkuje poziomy zmiennej jakościowej alfabetycznie i przyjmuje pierwszą jako klasę odniesienia. Nie zawsze jest to optymalne i można je zmienić, wpisując (w tej zmiennej zmienilibyśmy klasę referencyjną na „c”)new.variable <- relevel(old.variable, ref="c")
. Dla każdego współczynnika każdego poziomu zmiennej kategorialnej wykonuje się test Walda, aby sprawdzić, czy różnica par pomiędzy współczynnikiem klasy odniesienia a drugą klasą jest różna od zera, czy nie. Takie są wartości i w tabeli regresji. Jeśli tylko jedna klasa jakościowa jest znacząca, nie oznacza to, że cała zmienna jest bez znaczenia i powinna zostać usunięta z modelu. Można sprawdzić ogólny efekt zmiennej przez wykonanie testu współczynnika prawdopodobieństwa : dopasowanie dwa modele, jeden i jeden bez zmiennej i typu w (patrz przykład poniżej). Oto przykład:zpanova(model1, model2, test="LRT")
R
mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
mydata$rank <- factor(mydata$rank)
my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(my.mod)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Poziom rank1
został pominięty, a każdy współczynnik rank
oznacza różnicę między współczynnikiem rank1
a odpowiednim rank
poziomem. Tak więc różnica między współczynnikiem rank1
i rank2
wynosiłaby . Współczynnik to po prostu punkt przecięcia. Zatem prawdziwy współczynnik wyniósłby . Testy Wald tutaj sprawdzają, czy różnica między współczynnikiem klasy odniesienia (tutaj ) a odpowiadającymi poziomami różni się od zera. W tym przypadku mamy dowody, że współczynniki wszystkich klas różnią się od współczynnika . Możesz również dopasować model bez przechwytu, dodając- 0,675- 3,99 - 0,675 = - 4,67rank1
rank2
- 3,99 - 0,675 = - 4,67rank1
rank1
- 1
do wzoru modelu, aby zobaczyć wszystkie współczynniki bezpośrednio:
my.mod2 <- glm(admit ~ gre + gpa + rank - 1, data = mydata, family = "binomial")
summary(my.mod2) # no intercept model
Coefficients:
Estimate Std. Error z value Pr(>|z|)
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank1 -3.989979 1.139951 -3.500 0.000465 ***
rank2 -4.665422 1.109370 -4.205 2.61e-05 ***
rank3 -5.330183 1.149538 -4.637 3.54e-06 ***
rank4 -5.541443 1.138072 -4.869 1.12e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Zauważ, że punkt przecięcia zniknął teraz i że współczynnik rank1
jest dokładnie punktem przecięcia pierwszego modelu. W tym przypadku test Walda sprawdza nie różnicę par pomiędzy współczynnikami, ale hipotezę, że każdy pojedynczy współczynnik wynosi zero. Znów mamy dowody, że każdy współczynnik rank
różni się od zera. Wreszcie, aby sprawdzić, czy cała zmienna rank
poprawia dopasowanie modelu, dopasowujemy jeden model za pomocą ( my.mod1
), a drugi bez zmiennej rank
( my.mod2
) i przeprowadzamy test współczynnika prawdopodobieństwa. Testuje to hipotezę, że wszystkie współczynniki rank
wynoszą zero:
my.mod1 <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") # with rank
my.mod2 <- glm(admit ~ gre + gpa, data = mydata, family = "binomial") # without rank
anova(my.mod1, my.mod2, test="LRT")
Analysis of Deviance Table
Model 1: admit ~ gre + gpa + rank
Model 2: admit ~ gre + gpa
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1 394 458.52
2 397 480.34 -3 -21.826 7.088e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Test współczynnika prawdopodobieństwa jest bardzo istotny i wyciągnęlibyśmy wniosek, że zmienna rank
powinna pozostać w modelu.
Ten post jest również bardzo interesujący.
admit ~ 1
vsadmit ~ rank - 1
?