Valeur p de NaN lors de l'utilisation du goodfit de R sur des données binomiales


8

J'essaie de tester l'adéquation d'un vecteur de données de comptage à un binôme. Pour ce faire, j'utilise la goodfit()fonction dans le vcdpackage. Cependant, lorsque j'exécute la fonction, elle renvoie NaNla valeur de p du test du chi carré. Dans ma configuration, j'ai un vecteur de données de comptage avec 75 éléments.

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

Tout fonctionne bien, mais lorsque j'inspecte l' goodfit()objet, j'obtiens ce qui suit:

> 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

Je soupçonnais que c'était un petit problème d'échantillon au début, mais j'ai également un ensemble de données avec 50 observations qui ne revient pas NaNpour la valeur de p. J'ai également essayé de basculer la méthode en goodfit()ML avec des résultats similaires.

Pourquoi cette fonction se produirait-elle NaNdans ce cas? Existe-t-il une fonction alternative pour calculer GOF sur les données de comptage?


@Gavin: faut-il le fermer ou le déplacer?
Joshua Ulrich

@Joshua S'il peut être déplacé par un mod, ce serait mieux car @DrewConway a fait un travail raisonnable avec le Q et la reproductibilité. Comment réaliser une migration? Signaler le message?
Gavin Simpson

Merde, j'écrivais une réponse et j'ai dû me déplacer pendant 10 minutes de la machine. Et maintenant je suis revenu et j'ai vu vos commentaires. =)
aL3xa

Cette question a été fusionnée avec son quasi-doublon.
whuber

Réponses:


5

Vous avez zéro fréquence dans les comptes observés. Cela explique NaNs dans vos données. Si vous regardez un test.gofobjet, vous verrez que:

table(test.gof$observed)

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

vous avez 56 zéros. Quoi qu'il en soit, à mon humble avis, cette question s'adresse à http://stats.stackexchange.com .


1
Merci pour la nouvelle publication de SO, mais comment recommandez-vous que je gère les zéros étant donné que je veux toujours estimer un GOF?
DrewConway

Salut Drew, désolé pour ma réponse tardive. Eh bien, dans le cas de fréquences nulles, il est conseillé (du moins on m'a appris) de fusionner les catégories, car le chi carré autorise environ 0 fréquences (moins de 20% des fréquences peuvent être égales à 0 lorsque le facteur a plus de 2 niveaux) , si cela est raisonnable, ou pour supprimer le chi carré et choisir une autre technique. Comme je laisse habituellement tomber la chose, vous voudrez peut-être poser une autre question concernant le test de qualité d'ajustement approprié.
aL3xa

3

Seriez-vous plus heureux avec un objet goodfit modifié chirurgicalement?

> 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

Tricheur! / 10char :)
Brandon Bertelsen

0

Essayez de le tracer. Vous aurez une meilleure idée de ce qui se passe. Comme mentionné précédemment, vous obtenez NaN parce que vous passez 0 fréquences à chisq.test ()

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.