Comment faire un F-test en python

Comment faire un test F pour vérifier si la variance est équivalente dans deux vecteurs en Python?

Par exemple si j'ai

a = [1,2,1,2,1,2,1,2,1,2]
b = [1,3,-1,2,1,5,-1,6,-1,2]

est-il quelque chose de similaire à

scipy.stats.ttest_ind(a, b)

j'ai trouvé

sp.stats.f(a, b)

Mais il semble être quelque chose de différent pour un F-test

19
demandé sur DrewH 2014-02-01 08:39:51

3 réponses

la statistique d'essai F test for equal variances est simplement:

F = Var(X) / Var(Y)

F est distribué comme df1 = len(X) - 1, df2 = len(Y) - 1

scipy.stats.f que vous avez mentionné dans votre question a une méthode CDF. Cela signifie que vous pouvez générer une valeur p pour la statistique donnée et tester si cette valeur p est supérieure à votre niveau alpha choisi.

ainsi:

alpha = 0.05 #Or whatever you want your alpha to be.
p_value = scipy.stats.f.cdf(F, df1, df2)
if p_value > alpha:
    # Reject the null hypothesis that Var(X) == Var(Y)

notez que le test F est extrêmement sensible à la non-normalité de X et Y, donc vous feriez probablement mieux de faire un test plus robuste comme test de Levene ou test de Bartlett sauf si vous êtes raisonnablement sûr que X et Y sont distribués normalement. Ces tests peuvent être trouvés dans le scipy api:

24
répondu Joel Cornett 2014-02-01 20:38:17
4
répondu slushy 2015-08-24 01:15:23

Pour faire un one-way anova vous pouvez utiliser

import scipy.stats as stats

stats.f_oneway(a,b)

Anova à Sens Unique vérifie si la variance entre les groupes est plus grande que la variance à l'intérieur des groupes, et calcule la probabilité d'observer ce rapport de variance en utilisant la distribution de F -. Un bon tutoriel peut être trouvé ici:

https://www.khanacademy.org/math/probability/statistics-inferential/anova/v/anova-1-calculating-sst-total-sum-of-squares

4
répondu Ryszard Cetnarski 2016-03-23 12:58:21