Comment puis-je tester si des échantillons donnés proviennent d'une distribution de Poisson?

41

Je connais des tests de normalité, mais comment puis-je tester "Poisson-ness"?

J'ai un échantillon d'environ 1 000 entiers non négatifs, dont je soupçonne qu'ils sont tirés d'une distribution de Poisson, et j'aimerais le tester.

David B
la source

Réponses:

18

Tout d'abord, je vous conseille de ne pas essayer une distribution de Poisson telle qu'elle est pour les données. Je suggère que vous deviez d'abord faire une théorie sur les raisons pour lesquelles la distribution de Poisson devrait correspondre à un ensemble de données ou à un phénomène particulier.

Une fois que vous avez établi cela, la question suivante est de savoir si la distribution est homogène ou non. Cela signifie que toutes les parties des données sont traitées par la même distribution Poisson ou est-ce qu'il y a une variation en fonction d'un aspect tel que le temps ou l'espace. Une fois que vous avez convaincu de ces aspects, essayez les trois tests suivants:

  1. test du rapport de vraisemblance utilisant une variable du chi carré
  2. utilisation de la statistique conditionnelle du chi carré; également appelé test de dispersion de poisson ou test de variance
  3. utilisation de la statistique neyman-scott, basée sur une transformation stabilisante de la variance de la variable de poisson

recherchez-les et vous les trouverez facilement sur le net.

htrahdis
la source
4
"si la distribution est homogène ou non ... Une fois que vous avez convaincu de ces aspects" Pouvez-vous nous dire un peu comment déterminer cela?
signifie-à-sens
13

Voici une séquence de commandes R qui peuvent être utiles. N'hésitez pas à commenter ou à modifier si vous remarquez des erreurs.

set.seed(1)
x.poi<-rpois(n=200,lambda=2.5) # a vector of random variables from the Poisson distr.

hist(x.poi,main="Poisson distribution")

lambda.est <- mean(x.poi) ## estimate of parameter lambda
(tab.os<-table(x.poi)) ## table with empirical frequencies


freq.os<-vector()
for(i in 1: length(tab.os)) freq.os[i]<-tab.os[[i]]  ## vector of emprical frequencies

freq.ex<-(dpois(0:max(x.poi),lambda=lambda.est)*200) ## vector of fitted (expected) frequencies

acc <- mean(abs(freq.os-trunc(freq.ex))) ## absolute goodness of fit index acc
acc/mean(freq.os)*100 ## relative (percent) goodness of fit index

h <- hist(x.poi ,breaks=length(tab.os))
xhist <- c(min(h$breaks),h$breaks)
yhist <- c(0,h$density,0)
xfit <- min(x.poi):max(x.poi)
yfit <- dpois(xfit,lambda=lambda.est)
plot(xhist,yhist,type="s",ylim=c(0,max(yhist,yfit)), main="Poison density and histogram")
lines(xfit,yfit, col="red")

#Perform the chi-square goodness of fit test 
#In case of count data we can use goodfit() included in vcd package
library(vcd) ## loading vcd package
gf <- goodfit(x.poi,type= "poisson",method= "MinChisq")
summary(gf)
plot(gf,main="Count data vs Poisson distribution")
George Dontas
la source
3
Cette ligne: freq.ex <- (dpois (0: max (x.poi), lambda = lambda.est) * 200) génère des erreurs avec certaines données réelles, car la longueur de freq.ex ne correspond pas à freq. obs sur cette ligne acc <- mean (abs (freq.os-trunc (freq.ex))). J'ai adapté cette ligne à freq.ex <- (dpois (seq (0, max (x.poi))) [seq (0: max (x.poi))% en% x.poi], lambda = lambda.est * 200) mais quelque chose ne va toujours pas, car goodfit produit des avertissements.
russellpierce
En utilisant votre code, je reçois un indice de qualité d'adaptation de 121. Mais c'est relatif, n'est-ce pas? Donc, il devrait être compris entre 0 et 100, non?
MERose
5

Vous pouvez utiliser la dispersion (rapport de variance à la moyenne) comme statistique de test, car le Poisson devrait donner une dispersion de 1. Voici un lien pour savoir comment l'utiliser comme test sur modèle.

Eric Suh
la source
+1 merci par exemple, une distribution normale a une valeur p plus élevée que celle de poisson, où lambda est relativement petit (ainsi, en apparence, seule la normale et poisson ne sont pas du tout similaires)
David B
6
404 NON TROUVÉ !!
Rodrigo
5

Pour une distribution de Poisson, la moyenne est égale à la variance. Si la moyenne de votre échantillon est très différente de la variance de votre échantillon, vous ne disposez probablement pas de données de Poisson. Le test de dispersion également mentionné ici est une formalisation de cette notion.

Si votre variance est beaucoup plus grande que votre moyenne, comme c'est généralement le cas, vous voudrez peut-être essayer une distribution binomiale négative.

John D. Cook
la source
6
Et donc, si la moyenne est la même que la variance, pourriez-vous en conclure que les données étaient de Poisson? À peine!
PeterR
1
Vrai. Nécessaire mais pas suffisant.
John D. Cook
2

Vous pouvez dessiner une seule figure dans laquelle les fréquences observées et attendues sont dessinées côte à côte. Si les distributions sont très différentes et que vous avez également un ratio de variance moyen supérieur à un, le bon binôme est un bon candidat. Lisez la section Distributions de fréquence de The R Book. Il s'agit d'un problème très similaire.

Brani
la source
1

Je pense que le point principal est celui que sidmaestro a soulevé. La configuration expérimentale ou le mécanisme de génération de données confortent-ils le principe selon lequel les données pourraient provenir d’une distribution de Poisson?

Je ne suis pas un grand partisan des tests sur des hypothèses de répartition, car ces tests ne sont généralement pas très utiles. Ce qui me semble plus utile, c’est de formuler des hypothèses de modèle ou de répartition souples et raisonnablement robustes face aux écarts par rapport au modèle, généralement à des fins d’inférence. D'après mon expérience, il n'est pas courant de voir la variance moyenne =, si bien que le modèle binomial négatif semble plus approprié et inclut le cas de Poisson comme cas particulier.

Un autre point important pour les tests de distribution, si c'est ce que vous voulez faire, est de vous assurer qu'il n'y a pas de strates en cause qui feraient de votre distribution observée un mélange d'autres distributions. Des distributions individuelles spécifiques à une strate peuvent apparaître de Poisson, mais le mélange observé peut ne pas l'être. Une situation analogue issue de la régression suppose uniquement que la distribution conditionnelle de Y | X est normalement distribuée et non pas réellement la distribution de Y elle-même.

Abhijit
la source
Votre dernier point sur la régression ne serait vrai que si X est aléatoire. Si X est fixe, alors Y serait aussi une normale. non?
Oui, c’est vrai, mais pour les problèmes de régression généraux (par opposition à des problèmes anova ou conçus), X n’est vraiment pas figé mais constitue une observation du processus sous-jacent. Cependant, dans le cas de Poisson, le point reste valable, car les mélanges de Poissons ne sont pas nécessairement de Poisson.
Abhijit
0

Une autre façon de le vérifier consiste à utiliser un tracé quantile quantile. Dans R, il y a qqplot. Ceci trace directement vos valeurs par rapport à une distribution normale avec une moyenne et une SD similaires.

Peter Flom - Rétablir Monica
la source