カイ二乗検定を使用して、データがポアソン分布に従うかどうかを判断する方法


10

次の図(このペーパーの 646ページの図1 )は、ポアソン分布の下で観測値と期待値を比較しています。次に、カイ二乗検定を実行して、観測値がポアソン分布での期待値と異なるかどうかを確認します。

ここに画像の説明を入力してください

Rを使用して、ポアソン分布の下で期待値を生成し、カイ2乗検定を使用して観測値を比較するにはどうすればよいですか?

編集:

これが彼らが紙でしたことをやろうとする私の試みです。の観測された分布がvariableポアソン分布と異なるかどうか知りたい。また、私が以下で行ったことは、彼らが紙で行ったのと同じ手順であるかどうかも知りたいです。P値が> 0.05であるため、variable以下の分布はポアソン分布に従うと結論しました-誰かがこれを確認できますか?

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)

λ

回答:


12

カイ2乗検定の方法は正しくありません。いくつかの問題があります。まず、データフレームは次のようになります。

  variable frequency
1        0        20
2        1        10
3        2         5
4        3         3
5        4         2
6        5         1

したがって、実行するとmean(df$variable)、が得られます2.5。これは、の平均値です0:5。つまり、重み付けされていません。代わりに、次のように変数を作成します。

x = rep(0:5, times=c(20, 10, 5, 3, 2, 1))
table(x)
# x
#  0  1  2  3  4  5 
# 20 10  5  3  2  1
mean(x)
# [1] 1.02439

table()コードは、私たちが望んで私たちに与え、そのことをコールショーmean()正しくラムダを推定します。

次に、推定確率はにのみ行きます5が、ポアソン分布は無限大に行きます。したがって、データセットにない値の確率を考慮する必要があります。これは難しくありません。補数を計算するだけです。

probs = dpois(0:5, lambda=mean(x))
probs
# [1] 0.359015310 0.367771781 0.188370912 0.064321775 0.016472650 0.003374884
comp = 1-sum(probs)
# [1] 0.0006726867

最後に、Rchisq.test()関数では、x=およびy=引数は、これを設定した方法で期待された値と観測された値に対して正確ではありません。1つは、「期待される」と呼んでいるのは実際には確率(つまり、からの出力dpois())であり、これらの期待値を作成するには、それらの確率(および、補数を含めること)に合計数を掛ける必要があります。しかし、それでも、それらをに使用することはありませんy=。とにかく、実際にそうする必要はありませんp=。引数に確率を割り当てるだけです。さらに、0観測値ベクトルにを追加して、データセットに表示されないすべての可能な値を表す必要があります。

chisq.test(x=c(20, 10, 5, 3, 2, 1, 0), p=c(probs, comp))

#  Chi-squared test for given probabilities
# 
# data:  c(20, 10, 5, 3, 2, 1, 0)
# X-squared = 12.6058, df = 6, p-value = 0.04974
# 
# Warning message:
#   In chisq.test(x = c(20, 10, 5, 3, 2, 1, 0), p = c(probs, comp)) :
#   Chi-squared approximation may be incorrect

警告メッセージは、代わりにシミュレートすることをお勧めする可能性があることを示唆しているため、再試行します。

chisq.test(x=c(20, 10, 5, 3, 2, 1, 0), p=c(probs, comp), simulate.p.value=TRUE)

# Chi-squared test for given probabilities with simulated p-value 
#   (based on 2000 replicates)
# 
# data:  c(20, 10, 5, 3, 2, 1, 0)
# X-squared = 12.6058, df = NA, p-value = 0.07046

これはおそらくより正確なp値ですが、それをどのように解釈する必要があるかという疑問が生じます。「P値が0.05より大きいので、変数の分布がポアソン分布に従うと私は以下に結論しました-誰かがこれを確認できますか?」正しいアプローチを使用すると、最初のp値は<.05でしたが、2番目の(シミュレーションされた)p値は> .05でした。後者のp値の方が正確ですが、データがポアソン分布からのものであると私が急いで結論付けることはありません。ここで、覚えておくべき事実をいくつか示します。


3

私があなたが何を意味するのか理解したなら、あなたはすべきです:

  1. ポアソン分布であると仮定して、データのポアソン分布のパラメーターを推定します。
lambdaEst = mean(x)
  1. 0,1,2,...
probTheo0 = dpois(x = 0, lambda = lambdaEst, log = FALSE)
  1. 次に、このアプローチに従うカイ二乗検定を介して、実際の確率と理論確率を比較します。カイ二乗検定CVソリューション
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.