Nilai p NaN saat menggunakan goodfit R pada data binomial


8

Saya mencoba untuk menguji kebaikan cocok untuk vektor data hitungan ke binomial. Untuk melakukannya saya menggunakan goodfit()fungsi dalam vcdpaket. Ketika saya menjalankan fungsinya, bagaimanapun, ia mengembalikan NaNnilai p dari uji Chi-squared. Dalam pengaturan saya, saya memiliki vektor data jumlah dengan 75 elemen.

> library(vcd)
> counts <- c(32, 35, 44, 35, 41, 33, 42, 49, 36, 41, 42, 45, 38, 43, 36, 
35, 40, 40, 43, 34, 39, 31, 40, 39, 36, 37, 37, 37, 32, 48, 41, 
32, 37, 36, 49, 37, 41, 36, 34, 37, 41, 32, 36, 36, 30, 33, 33, 
42, 39, 36, 36, 29, 31, 41, 36, 39, 40, 37, 39, 39, 31, 39, 37, 
40, 33, 41, 34, 46, 35, 41, 44, 38, 44, 34, 42)
> test.gof <- goodfit(counts, type="binomial", 
+                     par=list(size=length(counts), prob=0.5))

Semuanya berfungsi dengan baik, tetapi ketika saya memeriksa goodfit()objek saya mendapatkan yang berikut:

> summary(test.gof)

 Goodness-of-fit test for binomial distribution

                      X^2 df  P(> X^2)
Pearson               NaN 75       NaN
Likelihood Ratio 21.48322 19 0.3107244
Warning message:
In summary.goodfit(test.gof) : Chi-squared approximation may be incorrect

Saya menduga itu adalah masalah ukuran sampel kecil pada awalnya, tetapi saya juga memiliki kumpulan data dengan 50 pengamatan yang tidak kembali NaNuntuk nilai-p. Saya juga mencoba untuk beralih metode goodfit()ke ML dengan hasil yang sama.

Mengapa fungsi ini diproduksi NaNdalam kasus ini? Apakah ada fungsi alternatif untuk menghitung GOF pada data jumlah?


@ Gavin: haruskah ditutup atau bisa dipindahkan?
— Joshua Ulrich

@Joshua Jika bisa dipindahkan oleh mod, pindah akan lebih baik karena @DrewConway telah melakukan pekerjaan yang wajar dengan Q dan reproduktifitas. Bagaimana cara kami mencapai migrasi? Tandai pos?
— Gavin Simpson

Sial, saya sedang menulis jawaban dan harus pindah selama 10 menit dari mesin. Dan sekarang saya kembali dan melihat komentar Anda. =)
— aL3xa

Pertanyaan ini telah digabungkan dengan duplikatnya.
— whuber

Jawaban:


5

Anda memiliki frekuensi nol dalam jumlah yang diamati. Itu menjelaskan NaNdi data Anda. Jika Anda melihat test.gofobjek, Anda akan melihat bahwa:

table(test.gof$observed)

 0  1  2  3  4  5  7  8 10 
56  5  3  2  5  1  1  2  1

Anda memiliki 56 nol. Pokoknya, IMHO pertanyaan ini untuk http://stats.stackexchange.com .


1
Terima kasih atas kiriman ulang dari SO, tetapi bagaimana Anda merekomendasikan saya berurusan dengan nol mengingat saya masih ingin memperkirakan GOF?
— DrewConway

Hai Drew, maaf atas jawaban saya yang terlambat. Nah, dalam hal frekuensi nol, disarankan (setidaknya saya diajari begitu) untuk menggabungkan kategori, karena Chi-square memungkinkan beberapa frekuensi 0 (frekuensi kurang dari 20% dapat menjadi 0 ketika faktor memiliki lebih dari 2 level) , jika itu masuk akal, atau untuk menjatuhkan Chi-square dan memilih teknik alternatif. Karena saya biasanya membatalkannya, jadi Anda mungkin ingin mengajukan pertanyaan lain tentang uji good-of-fit yang sesuai.
— aL3xa

3

Apakah Anda akan lebih bahagia dengan objek goodfit yang diubah secara operasi?

> idx <- which(test.gof$observed != 0)
> idx
 [1] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50
> test.gof$par$size <- length(  idx-1)
> test.gof$fitted <- test.gof$fitted[idx]
> test.gof$count <- test.gof$count[idx]
> test.gof$observed <- test.gof$observed[idx]
> summary(test.gof)

     Goodness-of-fit test for binomial distribution

                      X^2 df  P(> X^2)
Pearson               Inf 75 0.0000000
Likelihood Ratio 21.48322 19 0.3107244
Warning message:
In summary.goodfit(test.gof) : Chi-squared approximation may be incorrect

Penipu! / 10char :)
— Brandon Bertelsen

0

Coba rencanakan. Anda akan mendapatkan gagasan yang lebih baik tentang apa yang terjadi. Seperti yang disebutkan sebelumnya, Anda mendapatkan NaN karena Anda melewatkan 0 frekuensi ke chisq.test ()

test.gof <- goodfit(counts, type="binomial", par=list(size=length(counts), prob=0.5)) 
plot(test.gof)
## doesn't look so good 
test.gof <- goodfit(counts, type="binomial", par=list(size=length(counts))) 
plot(test.gof)
## looks a little more clear
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.