Tests statistiques (Kolmogorov et T-test) avec Python et Rpy2
-
09-12-2019 - |
Question
J'ai exécuté quelques algorithmes et je voulais faire des analyses statistiques avec les résultats.J'ai deux vecteurs avec les moyennes du taux d'erreur.
Avec R, en utilisant la ligne ci-dessous, j'obtiendrais tout.
t.test(methodresults1,methodresults2,var.equal=FALSE,paired=FALSE,alternative="less")
Puisque j'utilise Python, je voulais utiliser le projet Rpy2.
J'ai essayé ça :
import rpy2.robjects as R
# methodresults1 and methodresults2 are numpy arrays.
# kolmogorov test
normality_res = R.r['ks.test'](R.FloatVector(methodresults1.tolist()),'pnorm',mean=R.FloatVector(methodresults1.mean().tolist()),sd=R.FloatVector(methodresults1.std().tolist())))
# t-test
res = R.r['t.test'](R.FloatVector(methodresults1.tolist()),R.FloatVector(methodresults2.tolist()),alternative='two.sided',var.equal=FALSE,paired=FALSE)
res.rx('p.value')[0][0]
res.rx('statistic')[0][0]
res.rx('parameter')[0][0]
Je n'ai pas pu effectuer les deux tests.
J'ai également découvert que le problème avec le test t vient de l'instruction var.equal et cela me donne un * Erreur de syntaxe:le mot clé ne peut pas être une expression (, ligne 1).
Question supplémentaire :Existe-t-il une meilleure façon de travailler avec numpy et Rpy2 ?
La solution
Comme il est indiqué: " SyntaxError: mot-clé ne peut pas être une expression (, ligne 1). "
en python, les symboles ne peuvent pas contenir le caractère ".".
from rpy2.robjects.packages import importr
from rpy2.robjects.vectors import StrVector
stats = importr("stats")
stats.t_test(methodresults1, methodresults2,
**{'var.equal': False,
'paired': False,
'alternative': StrVector(("less", ))})
vérifier le Documentation RPY2 sur les fonctions pour plusDétails.
Autres conseils
pour effectuer le test ks avec python, dans le cas d'un test à deux échantillons, vous pouvez
>>> from scipy.stats import ks_2samp
>>> import numpy as np
>>>
où x
, y
sont deux nupmy.array
:
>>> ks_2samp(x, y)
(0.022999999999999909, 0.95189016804849658)
la première valeur correspond aux statistiques de test et la deuxième valeur est la valeur p.si la valeur p est inférieure à 95 (pour un niveau de signification de 5 %), cela signifie que vous ne pouvez pas rejeter l'hypothèse nulle selon laquelle les deux distributions d'échantillons sont identiques.
pour un exemple de test ks, voir par exemple ici : http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html#scipy.stats.kstest
ce test vous permet de tester la qualité de l'ajustement de votre distribution empirique à une distribution de probabilité donnée.