La façon dont vous avez fait le test du chi carré n'est pas correcte. Il y a plusieurs problèmes. Tout d'abord, votre bloc de données ressemble à ceci:
variable frequency
1 0 20
2 1 10
3 2 5
4 3 3
5 4 2
6 5 1
Donc, quand vous courez mean(df$variable)
, vous obtenez 2.5
, ce qui est juste la moyenne de 0:5
. Autrement dit, il n'est pas pondéré. Au lieu de cela, créez votre variable comme ceci:
x = rep(0:5, times=c(20, 10, 5, 3, 2, 1))
table(x)
# x
# 0 1 2 3 4 5
# 20 10 5 3 2 1
mean(x)
# [1] 1.02439
L' table()
appel montre que le code nous donne ce que nous voulions, et mean()
estime donc lambda correctement.
Ensuite, vos probabilités estimées ne vont qu'à 5
, mais la distribution de Poisson va à l'infini. Vous devez donc tenir compte des probabilités des valeurs que vous n'avez pas dans votre ensemble de données. Ce n'est pas difficile à faire, il suffit de calculer le complément:
probs = dpois(0:5, lambda=mean(x))
probs
# [1] 0.359015310 0.367771781 0.188370912 0.064321775 0.016472650 0.003374884
comp = 1-sum(probs)
# [1] 0.0006726867
Enfin, dans R
la chisq.test()
fonction de, les arguments x=
et y=
ne correspondent pas exactement aux valeurs attendues et observées dans la façon dont vous configurez cela. D'une part, ce que vous appelez "attendu" sont en fait des probabilités (c'est-à-dire la sortie de dpois()
), pour faire ces valeurs attendues, vous devrez multiplier ces probabilités (et assurez-vous d'inclure le compliment) par le nombre total. Mais même alors, vous ne les utiliseriez pas y=
. Quoi qu'il en soit, vous n'avez pas vraiment à le faire, vous pouvez simplement affecter les probabilités à l' p=
argument. De plus, vous devrez ajouter un 0
à votre vecteur de valeurs observées pour représenter toutes les valeurs possibles qui n'apparaissent pas dans votre jeu de données:
chisq.test(x=c(20, 10, 5, 3, 2, 1, 0), p=c(probs, comp))
# Chi-squared test for given probabilities
#
# data: c(20, 10, 5, 3, 2, 1, 0)
# X-squared = 12.6058, df = 6, p-value = 0.04974
#
# Warning message:
# In chisq.test(x = c(20, 10, 5, 3, 2, 1, 0), p = c(probs, comp)) :
# Chi-squared approximation may be incorrect
Le message d'avertissement suggère que nous préférons peut-être simuler à la place, nous essayons donc à nouveau:
chisq.test(x=c(20, 10, 5, 3, 2, 1, 0), p=c(probs, comp), simulate.p.value=TRUE)
# Chi-squared test for given probabilities with simulated p-value
# (based on 2000 replicates)
#
# data: c(20, 10, 5, 3, 2, 1, 0)
# X-squared = 12.6058, df = NA, p-value = 0.07046
Il s'agit vraisemblablement d'une valeur de p plus précise, mais cela soulève une question sur la façon de l'interpréter. Vous demandez "Comme la valeur P est> 0,05, j'ai conclu ci-dessous que la distribution de la variable suit une distribution de Poisson - quelqu'un pourrait-il confirmer cela?" En utilisant la bonne approche, nous notons que la première valeur de p était juste <0,05, mais la deuxième valeur de p (simulée) était juste> 0,05. Bien que cette dernière valeur de p soit plus précise, je ne me précipiterais pas pour conclure que les données provenaient d'une distribution de Poisson. Voici quelques faits à garder à l'esprit: