Saya punya beberapa data tentang penerbangan maskapai (dalam kerangka data yang disebut flights
) dan saya ingin melihat apakah waktu penerbangan berpengaruh pada probabilitas kedatangan yang tertunda secara signifikan (artinya 10 menit atau lebih). Saya pikir saya akan menggunakan regresi logistik, dengan waktu penerbangan sebagai prediktor dan apakah setiap penerbangan secara signifikan ditunda (sekelompok Bernoullis) sebagai tanggapan. Saya menggunakan kode berikut ...
flights$BigDelay <- flights$ArrDelay >= 10
delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial(link="logit"))
summary(delay.model)
... tetapi mendapat output berikut.
> flights$BigDelay <- flights$ArrDelay >= 10
> delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial(link="logit"))
Warning messages:
1: In glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart, :
algorithm did not converge
2: In glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart, :
fitted probabilities numerically 0 or 1 occurred
> summary(delay.model)
Call:
glm(formula = BigDelay ~ ArrDelay, family = binomial(link = "logit"),
data = flights)
Deviance Residuals:
Min 1Q Median 3Q Max
-3.843e-04 -2.107e-08 -2.107e-08 2.107e-08 3.814e-04
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -312.14 170.26 -1.833 0.0668 .
ArrDelay 32.86 17.92 1.833 0.0668 .
---
Signif. codes: 0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.8375e+06 on 2291292 degrees of freedom
Residual deviance: 9.1675e-03 on 2291291 degrees of freedom
AIC: 4.0092
Number of Fisher Scoring iterations: 25
Apa artinya bahwa algoritma itu tidak bertemu? Saya pikir itu karena BigDelay
nilainya TRUE
dan FALSE
bukannya 0
dan 1
, tetapi saya mendapatkan kesalahan yang sama setelah saya mengonversi semuanya. Ada ide?
r
logistic
separation
Daniel Standage
sumber
sumber
Jawaban:
glm()
menggunakan algoritma kuadrat ulang tertimbang yang berulang. Algoritma mencapai jumlah iterasi maksimum yang diizinkan sebelum menandakan konvergensi. Standarnya, yang didokumentasikan?glm.control
adalah 25. Anda melewati parameter kontrol sebagai daftar dalamglm
panggilan:Seperti yang dikatakan @Conjugate Prior, Anda tampaknya memprediksi respons dengan data yang digunakan untuk membuatnya. Anda memiliki pemisahan yang lengkap karena siapa pun
ArrDelay < 10
akan memprediksiFALSE
dan siapa punArrDelay >= 10
akan memprediksiTRUE
. Pesan peringatan lainnya memberi tahu Anda bahwa probabilitas yang dipasang untuk beberapa pengamatan efektif 0 atau 1 dan itu merupakan indikator yang baik bahwa Anda memiliki sesuatu yang salah dengan model.Kedua peringatan itu bisa berjalan beriringan. Fungsi likelihood bisa menjadi sangat datar ketika beberapa menjadi besar, seperti pada contoh Anda. Jika Anda mengizinkan lebih banyak iterasi, koefisien model akan menyimpang lebih jauh jika Anda memiliki masalah pemisahan.β^saya
sumber
Anda bisa mencoba memeriksa apakah pengurangan bias Firth bekerja dengan dataset Anda. Ini adalah pendekatan kemungkinan hukuman yang dapat berguna untuk kumpulan data yang menghasilkan divergensi menggunakan
glm
paket standar . Kadang-kadang dapat digunakan alih-alih menghilangkan variabel yang menghasilkan pemisahan lengkap / hampir lengkap.Pengurangan bias Firth diimplementasikan dalam paket-R
logistf
: http://cran.r-project.org/web/packages/logistf/logistf.pdfsumber