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?


@ 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 .


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.