Chi-Squared test en Python
J'ai utilisé le code suivant dans R
à déterminer comment les valeurs observées (20, 20, 0 et 0 par exemple) l'ajustement des valeurs attendues/ratios (25% pour chacun des quatre cas, par exemple):
> chisq.test(c(20,20,0,0), p=c(0.25, 0.25, 0.25, 0.25))
Chi-squared test for given probabilities
data: c(20, 20, 0, 0)
X-squared = 40, df = 3, p-value = 1.066e-08
Comment puis-je reproduire cela en Python? J'ai essayé d'utiliser le chisquare
fonction de scipy
mais les résultats que j'ai obtenus étaient très différents; je ne sais pas si c'est encore le bon fonctionnement de l'utiliser. J'ai cherché à travers le scipy
de la documentation, mais c'est assez intimidant, car il fonctionne à 1000+ pages; la numpy
la documentation est presque 50% de plus que cela.
Vous devez vous connecter pour publier un commentaire.
scipy.les stats.chisquare
attend observés et attendus fréquences absolues, pas de ratios. Vous pouvez obtenir ce que vous voulez avecBien que dans le cas que les valeurs attendues sont distribués de manière uniforme sur les classes, vous pouvez laisser le calcul des valeurs attendues:
La première valeur retournée est du χ2 statistique, la seconde le p-valeur du test.
Voulais juste faire remarquer que, bien que la réponse semble être correcte du point de vue syntaxique, vous ne devriez pas être à l'aide d'un Chi-carré de distribution avec votre exemple parce que vous avez observé des fréquences qui sont trop petits pour une précision de test du Chi carré.
"Ce test n'est pas valide lorsque l'observé ou prévu des fréquences dans chaque catégorie sont trop petites. Une règle générale est que tous les observés et attendus des fréquences doit être d'au moins 5." voir:
http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chisquare.html#scipy.stats.chisquare
Une alternative serait d'appeler votre R code de python. Vous pouvez faire ceci:
Rscript
. À partir de python que vous pouvez ensuite exécuter un script R par l'exécution d'un système d'appel à l'aide soitsubprocess
ouos.system
. Tout échange de données se fait à travers le texte ou des fichiers binaires. J'aime cette approche, car il est très simple et il est facile à déboguer le script R distinct du code python. L'inconvénient est que toutes les données passe par le disque dur, ce qui pourrait s'avérer très lent.rpy
auparavant, mais a décidé contre elle, ici, comme je l'ai peut-être besoin de transférer une assez grande quantité de données avec une structure complexe.