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.