> Modules non standards > statsmodels > t-test et test de Fisher
t-test et test de Fisher
Faire : import statsmodels.stats.weightstats
t-test :
- Construire un objet CompareMeans :
x1 = numpy.array([2, 4, 5, 6, 8])
x2 = numpy.array([10, 9, 5, 8, 11])
dStat1 = statsmodels.stats.weightstats.DescrStatsW(x1)
dStat2 = statsmodels.stats.weightstats.DescrStatsW(x2)
comp = statsmodels.stats.weightstats.CompareMeans(dStat1, dStat2)
- puis, (t, p, df) = comp.ttest_ind()) : renvoie la statistique t, la p-value et le nombre de degrés de liberté.
- si on veut juste faire le test, on peut aussi faire directement statsmodels.stats.weightstats.ttest_ind(x1, x2)
- paramètres de ttest_ind :
- usevar = 'pooled' : suppose que les variances des 2 samples sont les mêmes (défaut), usevar = 'unequal' : suppose les variances différentes.
- alternative = 'two-sided' : test dans les sens (défaut), alternative = 'smaller' ou alternative = 'larger' : test d'un seul côté (quand c'est larger, on teste l'hypothèse que la différence entre le premier vecteur et le second est plus petite que la valeur donnée (qui vaut 0 par défaut), et donc H1 est que le premier vecteur - le second vecteur est plus grand que la valeur donnée.
- value = 2 : teste H0 avec par exemple v1 - v2 = 2 (si two-sided ici).
- on peut avoir un intervalle de confiance : (lower, upper) = comp.tconfint_diff(alpha = 0.02, usevar = 'unequal'). Paramètres :
- uservar = 'pooled' : suppose que les variances des 2 samples sont les mêmes (défaut), uservar = 'unequal' : suppose les variances différentes.
- alpha = 0.01 : niveau de confiance (défaut est 0.05)
- alternative = 'two-sided' (défaut), 'larger', 'smaller' (si larger ou smaller, l'intervalle est infini d'un côté)
- comp.summary(alpha = 0.02, usevar = 'unequal') : renvoie une SimpleTable.
- si df1 et df2 sont des dataframes avec le même nombre de colonnes : statsmodels.stats.weightstats.CompareMeans.from_data(df1, df2) compare colonne par colonne la moyenne de df1 et la moyenne de df2. Alors (t, p, df) = comp.ttest_ind()) renvoie un triplet où t et p sont des séries, avec un élément par colonne comparée.
paired t-test :
- Contruire simplement un objet DescrStatsW avec la différence des valeurs des 2 conditions :
x1 = numpy.array([2, 4, 5, 6, 8])
x2 = numpy.array([10, 9, 5, 8, 11])
dStat = statsmodels.stats.weightstats.DescrStatsW(x1 - x2)
- (t, p, df) = dStat.ttest_mean()) : renvoie la statistique t, la p-value et le nombre de degrés de liberté.
- paramètres de ttest_mean :
- alternative = 'two-sided' : test dans les sens (défaut), alternative = 'smaller' ou alternative = 'larger' : test d'un seul côté (quand c'est larger, on teste l'hypothèse que la moyenne est plus grande que la valeur donnée (qui vaut 0 par défaut).
- value = 2 : teste H0 que la moyenne est égale à 2 (plutôt que 0 par défaut).
- intervalle de confiance basé sur Student : dStat.tconfint_mean(alpha=0.05, alternative='two-sided')
- si on fait l'hypothèse que les données suivent une loi normale, intervalle de confiance est alors dStat.zconfint_mean(alpha=0.05, alternative='two-sided')
TOST (two on-sided test) :
- le principe est le même que le t-test (ce sont en fait deux t-test one-sided) :
x1 = numpy.array([2, 4, 5, 6, 8])
x2 = numpy.array([10, 9, 5, 8, 11])
dStat1 = statsmodels.stats.weightstats.DescrStatsW(x1)
dStat2 = statsmodels.stats.weightstats.DescrStatsW(x2)
comp = statsmodels.stats.weightstats.CompareMeans(dStat1, dStat2)
- puis (p, (t1, p1), (t2, p2)) = comp.ttost_ind(-7, 0) en donnant la valeur minimale et maximale.
- renvoie la p-value globale, une paire avec les résultats du test sur la valeur minmimale et une paire avec les résultats du test sur la valeur maximale.
- la p-value est la valeur maximale des p-values des 2 tests.
- on peut aussi faire directement statsmodels.stats.weightstats.ttost_ind(x1, x2, -7, 0)
Puissance d'un t-test :
- connaissant la déviation standard d'une mesure, on peut trouver la puissance statistique donnée pour une différence de moyennes données et un effectif donné.
- import statsmodels.stats.power; power = statsmodels.stats.power.TTestIndPower(); power.power(effectSize, n1, alpha = 0.05, ratio = 1) : renvoie la puissance statistique (probabilité de ne pas faire une erreur de type II)
- effectSize : c'est la différence des moyennes divisée par la déviation standard.
- n1 : nombre d'observation pour l'échantillon 1
- alpha : niveau de signification (probabilité d'une erreur de type I)
- ratio : pour l'échantillon 2, on a ratio * n1 observations.
- on peut aussi donner alternative = "two-sided", "larger" ou "smaller" (défaut est "two-sided")
Recherche d'un paramètre quelconque :
- power.solve_power(effectSize = None, nobs1 = None, alpha = None, power = None, ratio = 1, alternative = "two-sided") : un seul des paramètres doit être à None et tous les autres renseignés. Renvoie le paramètre à None (non renseigné).
Test pour savoir si 2 comptes suivent la même loi de Poisson :
- Test si des comptes de 40 et 50 pendant le même intervalle de temps peuvent venir de la même distribution :
import statsmodels.stats.rates
result = statsmodels.stats.rates.test_poisson_2indep(40, 1, 50, 1)
result.pvalue
- result = statsmodels.stats.rates.test_poisson_2indep(40, 1, 50, 2) : idem, mais les 50 ont été obtenus pendant 2 fois plus longtemps.
- seul le rapport entre la 2ème et 4ème valeur est important, pas les valeurs individuelles.
- result = statsmodels.stats.rates.test_poisson_2indep(10, 1, 50, 1, alternative = 'smaller') : test unilatéral (ici, significatif). alternative peut valoir : 'two-sided' (défaut), 'smaller', 'larger'
Test sur les proportions : teste si les 2 proportions données peuvent dériver de la même distribution :
- test si 5 positifs sur 14 est équivalent à 6 positifs sur 60 :
import statsmodels.stats.proportion
result = statsmodels.stats.proportion.test_proportions_2indep(5, 14, 6, 60)
result.pvalue
- on peut utiliser alternative = 'larger' ou 'smaller' plutôt que le défaut 'two-sided'
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert