La figure ci-dessous (figure 1 de la page 646 de cet article ) compare les valeurs observées aux valeurs attendues sous la distribution de Poisson. Il exécute ensuite un test du chi carré pour voir si les valeurs observées diffèrent des valeurs attendues sous la distribution de Poisson.
En utilisant R, comment est-il possible de générer des valeurs attendues sous distribution de Poisson et de comparer les valeurs observées à l'aide d'un test du chi carré?
ÉDITER:
Voici ma tentative de faire ce qu'ils ont fait sur papier. Je veux savoir si la distribution observée de variable
diffère d'une distribution de Poisson. Je veux également savoir si ce que j'ai fait ci-dessous est la même procédure que ce qu'ils ont fait sur papier. Comme la valeur P est> 0,05, j'ai conclu ci-dessous que la distribution de variable
suit une distribution de Poisson - quelqu'un pourrait-il le confirmer?
df <- data.frame(variable = 0:5, frequency = c(20, 10, 5, 3, 2, 1))
# estimate lambda
mean_df_variable <- mean(df$variable)
# calculate expected values if df$frequency follows a poisson distribution
library(plyr)
expected <- laply(0:5, function(x) dpois(x=x, lambda=mean_df_variable, log = FALSE))
# calculate actual distribution of df$frequency
observed <- df$frequency/sum(df$frequency)
# does distribution of df$frequency differ from a poisson distribution? Apparently
# not because P-value is > 0.05
chisq.test(expected, observed)
Réponses:
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:
Donc, quand vous courez
mean(df$variable)
, vous obtenez2.5
, ce qui est juste la moyenne de0:5
. Autrement dit, il n'est pas pondéré. Au lieu de cela, créez votre variable comme ceci:L'
table()
appel montre que le code nous donne ce que nous voulions, etmean()
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:Enfin, dans
R
lachisq.test()
fonction de, les argumentsx=
ety=
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 dedpois()
), 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 pasy=
. 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 un0
à votre vecteur de valeurs observées pour représenter toutes les valeurs possibles qui n'apparaissent pas dans votre jeu de données:Le message d'avertissement suggère que nous préférons peut-être simuler à la place, nous essayons donc à nouveau:
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:
la source
Si j'ai compris ce que vous vouliez dire, vous devriez:
la source