Model regresi logistik tidak konvergen

40

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 BigDelaynilainya TRUEdan FALSEbukannya 0dan 1, tetapi saya mendapatkan kesalahan yang sama setelah saya mengonversi semuanya. Ada ide?

Daniel Standage
sumber
Pikiran pertama: Pemisahan sempurna , artinya prediktornya 'terlalu bagus', lognya menjadi +/- tak terhingga dan semuanya jatuh. Pikiran kedua: Apakah kode melakukan apa yang Anda pikirkan? Nama variabel Anda tampaknya tidak cocok dengan deskripsi Anda. Anda mungkin menguraikan apa data itu lebih tepat, karena sepertinya Anda mungkin mencoba untuk memprediksi sesuatu dengan dirinya sendiri.
conjugateprior
1
tidak yakin saya layak menerima. Jawaban @Conjugate Prior menjelaskan apa yang salah dengan model Anda. Saya pikir itu layak menjelaskan peringatan yang Anda sebutkan dalam hal algoritma.
Pasang kembali Monica - G. Simpson
3
Jika Anda memiliki waktu tunda yang sebenarnya, Anda cenderung mendapatkan informasi yang lebih baik dengan memodelkannya, daripada menguranginya menjadi variabel biner.
whuber
pertanyaan
user603
Anda dapat mencoba fungsi glm1 (). Ini mengatasi masalah konvergen

Jawaban:

33

glm()menggunakan algoritma kuadrat ulang tertimbang yang berulang. Algoritma mencapai jumlah iterasi maksimum yang diizinkan sebelum menandakan konvergensi. Standarnya, yang didokumentasikan ?glm.controladalah 25. Anda melewati parameter kontrol sebagai daftar dalam glmpanggilan:

delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial,
                   control = list(maxit = 50))

Seperti yang dikatakan @Conjugate Prior, Anda tampaknya memprediksi respons dengan data yang digunakan untuk membuatnya. Anda memiliki pemisahan yang lengkap karena siapa pun ArrDelay < 10akan memprediksi FALSEdan siapa pun ArrDelay >= 10akan memprediksi TRUE. 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

Pasang kembali Monica - G. Simpson
sumber
Bisakah Anda menjelaskan apa yang sebenarnya Anda maksudkan dengan konvergensi model di sini?
Bach
1
Dengan konvergensi maksud saya bahwa parameter yang diestimasi dalam model tidak berubah (atau hanya berubah kurang dari toleransi kecil) antara iterasi. Di sini parameter menjadi semakin besar dan pas berhenti karena batas pada iterasi tetapi estimasi parameter berubah banyak antara kedua dari belakang dan iterasi terakhir dan karenanya belum konvergen.
Pasang kembali Monica - G. Simpson
6

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 glmpaket standar . Kadang-kadang dapat digunakan alih-alih menghilangkan variabel yang menghasilkan pemisahan lengkap / hampir lengkap.

HAI(n-1)

Pengurangan bias Firth diimplementasikan dalam paket-R logistf: http://cran.r-project.org/web/packages/logistf/logistf.pdf

Avitus
sumber