Как сделать 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