Gambar di bawah ini (Gambar 1 dari hal. 646 tulisan ini ) membandingkan nilai yang diamati dengan nilai yang diharapkan di bawah distribusi Poisson. Kemudian menjalankan uji chi-squared untuk melihat apakah nilai yang diamati berbeda dari nilai yang diharapkan di bawah distribusi Poisson.
Dengan menggunakan R, bagaimana mungkin untuk menghasilkan nilai yang diharapkan di bawah distribusi Poisson dan membandingkan nilai yang diamati menggunakan uji chi-squared?
EDIT:
Inilah upaya saya untuk melakukan apa yang mereka lakukan di kertas. Saya ingin tahu apakah distribusi yang diamati variable
berbeda dari distribusi Poisson. Saya juga ingin tahu apakah yang saya lakukan di bawah ini adalah prosedur yang sama dengan apa yang mereka lakukan di kertas. Karena nilai-P> 0,05, saya telah menyimpulkan di bawah ini bahwa distribusi variable
mengikuti distribusi Poisson - dapatkah seseorang mengonfirmasi hal ini?
df <- data.frame(variable = 0:5, frequency = c(20, 10, 5, 3, 2, 1))
# estimate lambda
mean_df_variable <- mean(df$variable)
# calculate expected values if df$frequency follows a poisson distribution
library(plyr)
expected <- laply(0:5, function(x) dpois(x=x, lambda=mean_df_variable, log = FALSE))
# calculate actual distribution of df$frequency
observed <- df$frequency/sum(df$frequency)
# does distribution of df$frequency differ from a poisson distribution? Apparently
# not because P-value is > 0.05
chisq.test(expected, observed)
Jawaban:
Cara Anda melakukan tes chi-squared tidak benar. Ada beberapa masalah. Pertama, bingkai data Anda terlihat seperti ini:
Jadi, ketika Anda berlari
mean(df$variable)
, Anda dapatkan2.5
, yang hanya berarti dari0:5
. Artinya, tidak tertimbang. Sebagai gantinya, buat variabel Anda seperti ini:The
table()
panggilan menunjukkan bahwa kode memberi kita apa yang kita inginkan, danmean()
memperkirakan lambda dengan benar.Selanjutnya, perkiraan probabilitas Anda hanya berlaku
5
, tetapi distribusi Poisson pergi hingga tak terbatas. Jadi, Anda perlu memperhitungkan probabilitas nilai-nilai yang tidak Anda miliki dalam dataset Anda. Ini tidak sulit dilakukan, Anda hanya menghitung komplemen:Terakhir, di
R
'schisq.test()
fungsi,x=
dany=
argumen yang tidak tepat untuk nilai-nilai yang diharapkan dan diamati dalam cara Anda mengatur ini. Untuk satu hal, apa yang Anda sebut "diharapkan" sebenarnya adalah probabilitas (yaitu, output daridpois()
), untuk membuat nilai-nilai yang diharapkan ini, Anda harus melipatgandakan probabilitas tersebut (dan pastikan untuk memasukkan pujian) dengan jumlah total. Tetapi meskipun begitu, Anda tidak akan menggunakannya untuk ituy=
. Bagaimanapun, Anda tidak benar-benar harus melakukan itu, Anda hanya dapat menetapkan probabilitas untukp=
argumen. Selain itu, Anda perlu menambahkan a0
ke vektor nilai yang Anda amati untuk mewakili semua nilai yang mungkin tidak muncul dalam dataset Anda:Pesan peringatan menyarankan agar kami lebih memilih untuk mensimulasikan, jadi kami coba lagi:
Ini mungkin nilai p yang lebih akurat, tetapi menimbulkan pertanyaan tentang bagaimana hal itu harus ditafsirkan. Anda bertanya "Karena nilai-P> 0,05, saya telah menyimpulkan di bawah ini bahwa distribusi variabel mengikuti distribusi Poisson - dapatkah seseorang mengkonfirmasi hal ini?" Dengan menggunakan pendekatan yang benar, kami mencatat bahwa nilai p pertama hanya <.05, tetapi nilai p kedua (disimulasikan) hanya> .05. Meskipun p-value terakhir lebih akurat, saya tidak akan terburu-buru untuk menyimpulkan bahwa data memang berasal dari distribusi Poisson. Berikut adalah beberapa fakta yang perlu diingat:
sumber
Jika saya mengerti maksud Anda, Anda harus:
sumber