NaN p-Wert bei Verwendung von R's Goodfit für Binomialdaten

8

Ich versuche, die Anpassungsgüte für einen Vektor von Zähldaten zu einem Binomial zu testen. Dazu benutze ich die goodfit()Funktion im vcdPaket. Wenn ich die Funktion ausführe, wird jedoch NaNder p-Wert des Chi-Quadrat-Tests zurückgegeben. In meinem Setup habe ich einen Vektor von Zähldaten mit 75 Elementen.

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

Alles funktioniert gut, aber wenn ich das goodfit()Objekt inspiziere, erhalte ich Folgendes:

> 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

Ich vermutete zunächst, dass es sich um ein kleines Problem mit der Stichprobengröße handelte, habe aber auch einen Datensatz mit 50 Beobachtungen, der NaNfür den p-Wert nicht zurückgegeben wird. Ich habe auch versucht, die Methode goodfit()mit ähnlichen Ergebnissen auf ML umzustellen .

Warum würde diese Funktion NaNin diesem Fall produzieren? Gibt es eine alternative Funktion zur Berechnung des GOF anhand von Zähldaten?

DrewConway
quelle
@ Gavin: Sollte es geschlossen sein oder könnte es verschoben werden?
Joshua Ulrich
@Joshua Wenn es von einem Mod verschoben werden kann, ist das Verschieben am besten, da @DrewConway mit dem Q und der Reproduzierbarkeit einen vernünftigen Job gemacht hat. Wie erreichen wir eine Migration? Post markieren?
Gavin Simpson
Verdammt, ich schrieb eine Antwort und musste mich 10 Minuten von der Maschine entfernen. Und jetzt bin ich zurückgekommen und habe deine Kommentare gesehen. =)
aL3xa
Diese Frage wurde mit ihrem nahezu doppelten Ergebnis zusammengeführt.
whuber

Antworten:

5

Sie haben keine Frequenzen in beobachteten Zählungen. Das erklärt NaNs in Ihren Daten. Wenn Sie sich ein test.gofObjekt ansehen , sehen Sie Folgendes:

table(test.gof$observed)

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

Sie haben 56 Nullen. Wie auch immer, meiner Meinung nach ist diese Frage für http://stats.stackexchange.com .

aL3xa
quelle
1
Vielen Dank für die erneute Veröffentlichung von SO, aber wie empfehlen Sie mir, mit den Nullen umzugehen, da ich immer noch einen GOF schätzen möchte?
DrewConway
Hallo Drew, entschuldige meine späte Antwort. Nun, im Fall von Nullfrequenzen wird empfohlen (zumindest wurde mir das beigebracht), beide Kategorien zusammenzuführen, da das Chi-Quadrat einige 0 Frequenzen zulässt (weniger als 20% Frequenzen können 0 sein, wenn der Faktor mehr als 2 Pegel hat). , wenn das vernünftig ist, oder Chi-Quadrat fallen zu lassen und eine alternative Technik zu wählen. Da ich das Ding normalerweise fallen lasse, möchten Sie vielleicht eine andere Frage bezüglich des geeigneten Anpassungstests stellen.
aL3xa
3

Wären Sie mit einem chirurgisch veränderten Goodfit-Objekt glücklicher?

> 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
DWin
quelle
Betrüger! / 10char :)
Brandon Bertelsen
0

Versuchen Sie es zu zeichnen. Sie erhalten eine bessere Vorstellung davon, was los ist. Wie bereits erwähnt, erhalten Sie NaN, weil Sie 0 Frequenzen an chisq.test () übergeben.

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
Brandon Bertelsen
quelle