Как сделать F-тест в python

Как мне выполнить F-тест, чтобы проверить, является ли дисперсия эквивалентной в двух векторах в Python?

Например, если у меня есть

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

есть что-то похожее на

scipy.stats.ttest_ind(a, b)

Я нашел

sp.stats.f(a, b)

Но это похоже на нечто иное, чем F-тест

Ответы

Ответ 1

Тест статистики F для равных дисперсий просто:

F = Var(X) / Var(Y)

Где F распределяется как df1 = len(X) - 1, df2 = len(Y) - 1

scipy.stats.f, который вы упомянули в своем вопросе, имеет метод CDF. Это означает, что вы можете сгенерировать значение p для данной статистики и проверить, больше ли это p-значение, чем выбранный вами альфа-уровень.

Таким образом:

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)

Обратите внимание, что F-тест чрезвычайно чувствителен к ненормальности X и Y, поэтому вам, вероятно, лучше провести более надежный тест, например тест Levene или Bartlett test, если вы не уверены, что X и Y распределены нормально. Эти тесты можно найти в scipy api:

Ответ 2

Для всех, кто пришел сюда, для поиска ANOVA F-теста или для сравнения между моделями для выбора функции

Ответ 3

Чтобы сделать один способ anova, вы можете использовать

import scipy.stats as stats

stats.f_oneway(a,b)

В одном случае Anova проверяет, больше ли дисперсия между группами, чем дисперсия внутри групп, и вычисляет вероятность наблюдения этого отношения дисперсии с помощью F-распределения. Здесь можно найти хороший учебник:

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