Ok, mam regresję logistyczną i wykorzystałem tę predict()
funkcję do opracowania krzywej prawdopodobieństwa na podstawie moich oszacowań.
## LOGIT MODEL:
library(car)
mod1 = glm(factor(won) ~ as.numeric(bid), data=mydat, family=binomial(link="logit"))
## PROBABILITY CURVE:
all.x <- expand.grid(won=unique(won), bid=unique(bid))
y.hat.new <- predict(mod1, newdata=all.x, type="response")
plot(bid<-000:1000,predict(mod1,newdata=data.frame(bid<-c(000:1000)),type="response"), lwd=5, col="blue", type="l")
To świetnie, ale jestem ciekawy, jak wykreślić przedziały ufności dla prawdopodobieństw. Próbowałem, plot.ci()
ale nie miałem szczęścia. Czy ktoś może wskazać mi kilka sposobów, aby to zrobić, najlepiej z car
pakietem lub bazą R.
r
logistic
confidence-interval
ATMathew
źródło
źródło
Odpowiedzi:
Użyty kod szacuje model regresji logistycznej za pomocą
glm
funkcji. Nie podałeś danych, więc po prostu je uzupełnię.Model regresji logistycznej modeluje związek między binarną zmienną odpowiedzi a, w tym przypadku, jednym ciągłym predyktorem. Wynikiem jest prawdopodobieństwo przekształcone logitem jako liniowa zależność od predyktora. W twoim przypadku wynik jest binarną odpowiedzią na wygraną lub nie na wygraną w grach hazardowych i jest przewidziany na podstawie wartości zakładu. Współczynniki z
mod1
są podane w zarejestrowanych szansach (trudnych do interpretacji), zgodnie z:Aby przekonwertować zarejestrowane kursy na prawdopodobieństwa, możemy przetłumaczyć powyższe na
Możesz użyć tych informacji do skonfigurowania fabuły. Po pierwsze, potrzebujesz zakresu zmiennej predykcyjnej:
Następnie za pomocą
predict
możesz uzyskać prognozy na podstawie swojego modeluNależy pamiętać, że dopasowane wartości można również uzyskać poprzez
Określając
se.fit=TRUE
, otrzymujesz również błąd standardowy związany z każdą dopasowaną wartością. Wynikiemdata.frame
jest macierz z następującymi składnikami: dopasowane predykcje (fit
), szacowane błędy standardowe (se.fit
) i skalar dający pierwiastek kwadratowy z dyspersji użytej do obliczenia błędów standardowych (residual.scale
). W przypadku dwumianowego logit, wartość będzie wynosić 1 (który można zobaczyć wpisującpreddat$residual.scale
wR
). Jeśli chcesz zobaczyć przykład tego, co dotychczas obliczyłeś, możesz wpisaćhead(data.frame(preddat))
.Następnym krokiem jest skonfigurowanie fabuły. Najpierw chcę ustawić pusty obszar kreślenia z parametrami:
Teraz możesz zobaczyć, gdzie ważne jest, aby wiedzieć, jak obliczyć dopasowane prawdopodobieństwa. Możesz narysować linię odpowiadającą dopasowanym prawdopodobieństwom zgodnie z drugim wzorem powyżej. Za pomocą
preddat data.frame
możesz przekonwertować dopasowane wartości na prawdopodobieństwa i użyć tego do wykreślenia linii względem wartości zmiennej predykcyjnej.Na koniec odpowiedz na pytanie, przedziały ufności można dodać do wykresu, obliczając prawdopodobieństwo dopasowanych wartości
+/- 1.96
razy błąd standardowy:Powstały wykres (z losowo wygenerowanych danych) powinien wyglądać mniej więcej tak:
Na wszelki wypadek, oto cały kod w jednym kawałku:
(Uwaga: jest to mocno zredagowana odpowiedź, która ma na celu uczynienie jej bardziej adekwatną do stats.stackexchange.)
źródło
se.fit
zdefiniowana zmienna ?predict(..., se.fit=TRUE)
.Oto modyfikacja rozwiązania @ smillig. Używam tutaj narzędzi tidyverse, a także
linkinv
funkcji, która jest częścią obiektu modelu GLMmod1
. W ten sposób nie musisz ręcznie odwracać funkcji logistycznej, a to podejście będzie działać bez względu na to, jaki konkretny GLM pasuje.źródło