カイ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
最後に、R
のchisq.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値の方が正確ですが、データがポアソン分布からのものであると私が急いで結論付けることはありません。ここで、覚えておくべき事実をいくつか示します。