二項データでRの適合度を使用する場合のNaN p値


8

二項式へのカウントデータのベクトルの適合度をテストしようとしています。そのためにgoodfit()vcdパッケージの関数を使用しています。ただし、関数を実行するNaNと、カイ2乗検定のp値が返されます。私のセットアップでは、75要素のカウントデータのベクトルがあります。

> 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))

すべて正常に動作しますが、goodfit()オブジェクトを検査すると、次のようになります。

> 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

最初は小さなサンプルサイズの問題だったのではないかと思いましたがNaN、p値に対して返されない50の観測値を持つデータセットもあります。また、メソッドgoodfit()をML に切り替えて、同様の結果を得ようとしました。

NaNこの場合、この関数が生成するのはなぜですか?カウントデータでGOFを計算する代替関数はありますか?


@Gavin:閉じなければならないのか、それとも動かせるのか?
ジョシュアウルリッヒ

@Joshua MODで移動できる場合は、@ DrewConwayがQと再現性に関して妥当な作業を行っているため、移動するのが最適です。どのようにして移行を実現しますか?投稿にフラグを付けますか?
Gavin Simpson

くそー、私は答えを書いていて、機械から10分移動しなければなりませんでした。そして今私は戻ってきてあなたのコメントを見ました。=)
aL3xa 2011

この質問は、ほぼ重複する質問と統合されています。
whuber

回答:


5

観測されたカウントの頻度はゼロです。これはNaN、データのsを説明しています。test.gofオブジェクトを見ると、次のことがわかります。

table(test.gof$observed)

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

56個のゼロがあります。とにかく、この質問はhttp://stats.stackexchange.comに対するものです。


1
SOからの再投稿をありがとう
DrewConway 2011

こんにちはドリュー、私の遅い答えでごめんなさい。まあ、周波数がゼロの場合は、カイ二乗で0の周波数をいくつか許可しているため(少なくとも私はそう教えられました)、どちらかのカテゴリをマージすることをお勧めします(因子が2レベルを超える場合、20%未満の周波数は0になる可能性があります)。 、それが妥当である場合、またはカイ二乗を削除して別の手法を選択する場合。私はいつも物を落とすので、適切な適合度テストについて別の質問をしたいと思うかもしれません。
aL3xa 2011

3

外科的に変更されたgoodfitオブジェクトで幸せになりますか?

> 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

詐欺師!/ 10char :)
Brandon Bertelsen

0

プロットしてみてください。あなたは何が起こっているのかより良いアイデアを得るでしょう。前述のように、chisq.test()に0の周波数を渡しているため、NaNを取得しています。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.