Kode yang Anda gunakan memperkirakan model regresi logistik menggunakan glm
fungsi. Anda tidak memasukkan data, jadi saya hanya akan menebusnya.
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 regresi logistik memodelkan hubungan antara variabel respons biner dan, dalam hal ini, satu prediktor kontinu. Hasilnya adalah probabilitas logit-transformed sebagai hubungan linier dengan prediktor. Dalam kasus Anda, hasilnya adalah respons biner yang terkait dengan menang atau tidaknya menang dalam judi dan diprediksi oleh nilai taruhan. Koefisien dari mod1
diberikan dalam odds log (yang sulit diinterpretasikan), sesuai dengan:
logit ( p ) = log( hal( 1 - p )) = β0+ β1x1
Untuk mengonversi peluang yang dicatat menjadi probabilitas, kami dapat menerjemahkan di atas ke
p = exp( β0+ β1x1)( 1 + exp( β0+ β1x1) )
Anda dapat menggunakan informasi ini untuk mengatur plot. Pertama, Anda memerlukan rentang variabel prediktor:
plotdat <- data.frame(bid=(0:1000))
Kemudian menggunakan predict
, Anda dapat memperoleh prediksi berdasarkan model Anda
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
Perhatikan bahwa nilai yang dipasang juga dapat diperoleh melalui
mod1$fitted
Dengan menentukan se.fit=TRUE
, Anda juga mendapatkan kesalahan standar yang terkait dengan setiap nilai yang dipasang. Hasilnya data.frame
adalah matriks dengan komponen-komponen berikut: prediksi yang dipasang ( fit
), estimasi kesalahan standar ( se.fit
), dan skalar yang memberikan akar kuadrat dari dispersi yang digunakan untuk menghitung kesalahan standar ( residual.scale
). Dalam kasus logit binomial, nilai akan menjadi 1 (yang dapat Anda lihat dengan memasukkan preddat$residual.scale
dalam R
). Jika Anda ingin melihat contoh dari apa yang Anda hitung sejauh ini, Anda bisa mengetik head(data.frame(preddat))
.
Langkah selanjutnya adalah mengatur plot. Saya ingin mengatur area plot kosong dengan parameter terlebih dahulu:
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
Sekarang Anda dapat melihat di mana penting untuk mengetahui cara menghitung probabilitas yang dipasang. Anda dapat menggambar garis yang sesuai dengan probabilitas yang dipasang mengikuti rumus kedua di atas. Menggunakan preddat data.frame
Anda dapat mengonversi nilai yang dipasang ke probabilitas dan menggunakannya untuk memplot garis terhadap nilai variabel prediktor Anda.
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
Akhirnya, jawab pertanyaan Anda, interval kepercayaan dapat ditambahkan ke plot dengan menghitung probabilitas untuk nilai yang dipasang +/- 1.96
dikali kesalahan standar:
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))
Plot yang dihasilkan (dari data yang dihasilkan secara acak) akan terlihat seperti ini:
Demi kepentingan, inilah semua kode dalam satu potongan:
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))
(Catatan: Ini adalah jawaban yang diedit dalam upaya untuk membuatnya lebih relevan dengan stats.stackexchange.)