Użyty kod szacuje model regresji logistycznej za pomocą glm
funkcji. Nie podałeś danych, więc po prostu je uzupełnię.
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
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:
logit ( p ) = log( p( 1 - p )) = β0+ β1x1
Aby przekonwertować zarejestrowane kursy na prawdopodobieństwa, możemy przetłumaczyć powyższe na
p = exp( β0+ β1x1)( 1 + exp( β0+ β1x1) )
Możesz użyć tych informacji do skonfigurowania fabuły. Po pierwsze, potrzebujesz zakresu zmiennej predykcyjnej:
plotdat <- data.frame(bid=(0:1000))
Następnie za pomocą predict
możesz uzyskać prognozy na podstawie swojego modelu
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
Należy pamiętać, że dopasowane wartości można również uzyskać poprzez
mod1$fitted
Określając se.fit=TRUE
, otrzymujesz również błąd standardowy związany z każdą dopasowaną wartością. Wynikiem data.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ąc preddat$residual.scale
w R
). 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:
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
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.
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
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:
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
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:
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
plotdat <- data.frame(bid=(0:1000))
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
(Uwaga: jest to mocno zredagowana odpowiedź, która ma na celu uczynienie jej bardziej adekwatną do stats.stackexchange.)