Bagaimana saya bisa menghitung statistik uji

10

Uji rasio kemungkinan (alias penyimpangan) G2 dan uji ketidakcocokan (atau good-of-fit) cukup mudah untuk mendapatkan model regresi logistik (cocok menggunakan glm(..., family = binomial)fungsi) dalam R. Namun, bisa mudah untuk memiliki jumlah sel berakhir cukup rendah sehingga tes tidak dapat diandalkan. Salah satu cara untuk memverifikasi keandalan uji rasio kemungkinan untuk kurangnya kesesuaian adalah dengan membandingkan statistik uji dan nilai- P dengan yang ada pada uji chi square Pearson (atau χ2 ).

Baik glmobjek maupun summary()metodenya melaporkan statistik uji untuk uji chi square Pearson karena kurang fit. Dalam pencarian saya, satu-satunya hal yang saya temukan adalah chisq.test()fungsi (dalam statspaket): dokumentasinya mengatakan " chisq.testmelakukan tes tabel kontingensi chi-squared dan tes good-of-fit." Namun, jarang ada dokumentasi tentang cara melakukan tes tersebut:

Jika xmerupakan matriks dengan satu baris atau kolom, atau jika xmerupakan vektor dan ytidak diberikan, maka dilakukan uji good-of-fit ( xdiperlakukan sebagai tabel kontingensi satu dimensi). Entri dari xharus bilangan bulat non-negatif. Dalam hal ini, hipotesis yang diuji adalah apakah probabilitas populasi sama dengan p, atau semuanya sama jika ptidak diberikan.

Saya akan membayangkan bahwa Anda dapat menggunakan ykomponen glmobjek untuk xargumen chisq.test. Namun, Anda tidak dapat menggunakan fitted.valueskomponen glmobjek untuk pargumen chisq.test, karena Anda akan mendapatkan kesalahan: " probabilities must sum to 1."

χ2

Firefeather
sumber

Jawaban:

13

χ2glmlogistic.fit

sum(residuals(logistic.fit, type = "pearson")^2)

Lihat dokumentasi pada residuals.glmuntuk informasi lebih lanjut, termasuk residu apa yang tersedia. Misalnya kodenya

sum(residuals(logistic.fit, type = "deviance")^2)

G2deviance(logistic.fit)

Firefeather
sumber
Saya setuju dengan Makro. Jika Anda menginginkan jawaban dari grup, Anda harus menunggu untuk mendengar apa yang dikatakan orang lain terlebih dahulu. Apa pun yang Anda dapatkan sekarang bias dengan melihat jawaban Anda. Juga, jika Anda tahu jawabannya, apa yang ingin Anda buktikan dengan melakukan ini?
Michael R. Chernick
@ Macro - Firefeather telah memposting empat pertanyaan ke situs ini (termasuk yang ini) dan menjawab tiga dari mereka (termasuk yang ini) sendiri, menerima satu dari jawabannya sendiri satu kali. Beberapa lagi seperti ini dan saya mungkin mulai melihat polanya!
jbowman
@jbowman, saya bisa membayangkan menjawab pertanyaan Anda sendiri jika Anda mengetahuinya sendiri sebelum orang lain memposting jawaban tetapi firefeather mengirim jawaban secara harfiah kurang dari 5 menit setelah memposting pertanyaan, sepertinya dia tidak membutuhkan bantuan , itulah yang membuat saya bertanya mengapa ... Saya tidak begitu mengerti motivasinya ...
Makro
3
@ Macro, silakan lihat tautan resmi ini: blog.stackoverflow.com/2011/07/… (ini tertaut pada halaman Ajukan Pertanyaan di label kotak centang di bagian bawah: "Jawab pertanyaan Anda sendiri - bagikan pengetahuan, T & J gaya Anda "). Saya memiliki pertanyaan ini ketika sedang mengerjakan pekerjaan rumah (memilih untuk menggunakan R daripada Minitab, meskipun Minitab ditunjukkan di kelas), tetapi saya tidak punya cukup waktu untuk mengetik pertanyaan dan menunggu jawaban. Saya menemukan solusi ini, dan memutuskan untuk membaginya dengan komunitas.
Firefeather
2
@ Macro, terima kasih banyak! Saya berharap bisa mengajukan lebih banyak pertanyaan di mana saya tidak memberikan jawaban, dan menjawab lebih banyak pertanyaan yang tidak saya tanyakan. Tapi jbowman 's benar tentang pola: kontribusi saya kepada masyarakat yang cenderung ke arah berbicara sendiri. :) (Setidaknya saya berkontribusi entah bagaimana kepada komunitas, kan?)
Firefeather
10

Statistik Pearson memiliki distribusi berdegenerasi sehingga tidak direkomendasikan secara umum untuk model logistik yang baik. Saya lebih suka tes terstruktur (linearitas, aditivitas). Jika Anda menginginkan tes omnibus, lihat satu derajat kebebasan le Cessie - van Houwelingen - Copas - Hosmer jumlah uji kuadrat tertimbang sebagaimana diterapkan dalam fungsi rmspaket R.residuals.lrm

Frank Harrell
sumber
2
-1: Terima kasih atas wawasannya! Namun, ini tidak menjawab pertanyaan saya. Karena komentar / diskusi yang relevan tentang pernyataan yang saya buat di latar belakang pertanyaan saya, jawaban Anda mungkin termasuk dalam komentar, bukan dalam jawaban.
Firefeather
2
Saya kira empat orang yang memilih jawaban saya tidak setuju dengan Anda. Dan Anda belum berurusan dengan distribusi yang merosot.
Frank Harrell
@ Frankharrell: Apakah ukuran GOF ini berbeda dari tes GOF Hosmer-Lemeshow (HL)? Dengan asumsi demikian karena namanya, dan juga membandingkan keduanya: Melakukan uji HL GOF seperti yang ditemukan dalam ResourceSelectionpaket, dan hasilnya berbeda dari apa yang saya dapatkan dari menjalankan resid(lrm_object, 'gof')setelah memasang model regresi logistik saya sebagai lrm_object <- lrm(...). Jika mereka memang berbeda, dapatkah Anda mengomentari bagaimana tes HL menumpuk terhadap yang Anda sebutkan di sini? Terima kasih!
Meg
1
χ2Nχ2N
Saya akan senang melihat simulasi yang menunjukkan kemunduran ini.
wdkrnls
0

Terima kasih, saya tidak menyadari bahwa itu sesederhana: jumlah (residual (f1, type = "pearson") ^ 2) Namun harap dicatat bahwa residu Pearsons bervariasi tergantung pada apakah itu dihitung oleh kelompok kovariat atau oleh individu. Contoh sederhana:

m1 adalah sebuah matriks (ini adalah kepala dari matriks yang lebih besar):

m1 [1: 4,1: 8]

    x1 x2 x3 obs    pi   lev  yhat y
obs  1  1 44   5 0.359 0.131 1.795 2
obs  0  1 43  27 0.176 0.053 4.752 4
obs  0  1 53  15 0.219 0.062 3.285 1
obs  0  1 33  22 0.140 0.069 3.080 3

Di mana x1-3 adalah prediktor, obs tidak. pengamatan di setiap kelompok, pi adalah probabilitas keanggotaan kelompok (diprediksi dari persamaan regresi), lev adalah leverage, diagonal dari matriks topi, apa yang diprediksi tidak. (dari y = 1) dalam grup dan y, bukan yang sebenarnya.

Ini akan memberi Anda Pearson berdasarkan kelompok. Catat perbedaannya jika y == 0: ' 'fun1 <- function(j){        if (m1[j,"y"] ==0){ # y=0 for this covariate pattern     Pr1 <- sqrt( m1[i,"pi"] / (1-m1[i,"pi"]))     Pr2 <- -sqrt (m1[i,"obs"]) res <- round( Pr1 * Pr2, 3) return(res) } else {  Pr1 <- m1[j,"y"] - m1[j,"yhat"] Pr2 <- sqrt(   m1[j,"yhat"] * ( 1-(m1[j,"pi"]) )   ) res <- round( Pr1/Pr2, 3) return(res) }    }

Jadi

nr <-nrow(m1)
nr1 <- seq(1,nr)
Pr <- sapply(1:nrow[m1], FUN=fun1)
PrSj <- sum(Pr^2)

Jika ada sejumlah besar subjek dengan pola kovariat y = 0, maka residu Pearons akan jauh lebih besar bila dihitung menggunakan metode 'berdasarkan kelompok' daripada metode 'menurut indiviual'.

Lihat misalnya Hosmer & Lemeshow "Regresi Logistik Terapan", Wiley, 200.

dardisco
sumber
0

Anda juga dapat menggunakan c_hat(mod)yang akan memberikan output yang sama dengan sum(residuals(mod, type = "pearson")^2).

pengguna54098
sumber
1
Paket apa yang c_hatditemukan?
Firefeather