我如何在python中进行F测试

Dre*_*ewH 28 python statistics

如何进行F检验以检查Python中两个向量的方差是否相等?

例如,如果我有

a = [1,2,1,2,1,2,1,2,1,2]
b = [1,3,-1,2,1,5,-1,6,-1,2]
Run Code Online (Sandbox Code Playgroud)

是否有类似的东西

scipy.stats.ttest_ind(a, b)
Run Code Online (Sandbox Code Playgroud)

我发现

sp.stats.f(a, b)
Run Code Online (Sandbox Code Playgroud)

但它似乎与F测试有所不同

Joe*_*ett 33

对于等方差的检验统计量F检验很简单:

F = Var(X) / Var(Y)
Run Code Online (Sandbox Code Playgroud)

在哪里F分发为df1 = len(X) - 1, df2 = len(Y) - 1

scipy.stats.f您在问题中提到的CDF方法.这意味着您可以为给定的统计信息生成p值,并测试该p值是否大于您选择的alpha级别.

从而:

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)
Run Code Online (Sandbox Code Playgroud)

请注意,F检验对X和Y的非正态性非常敏感,所以除非你有理由确定X和Y是正常分布的,否则你最好做一个更强大的测试,如Levene测试Bartlett测试..这些测试可以在scipyapi中找到:

  • 这个答案在数学上是正确的,但在概念上是错误的.p_value相当于`1 - CDF`.这是在你的F_critical之上的概率分布下的区域.我会这样写:`p_value = scipy.stats.f.sf(F,df1,df2)`我认为生存函数计算这个略有不同,所以你要仔细检查以防你处理非常小的p_values(到期多重比较)如果`p_value <alpha`,则拒绝原假设 (20认同)

Rys*_*ski 7

要做单向anova你可以使用

import scipy.stats as stats

stats.f_oneway(a,b)
Run Code Online (Sandbox Code Playgroud)

一种方法Anova检查组之间的方差是否大于组内的方差,并计算使用F分布观察此方差比的概率.这里有一个很好的教程:

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


Lar*_*dua 7

这是一个使用 Python 和 SciPy 计算单侧或两侧 F 检验的简单函数。结果已根据var.test()R 中函数的输出进行检查。请记住其他答案中提到的有关 F 检验对非正态性的敏感性的警告。

import scipy.stats as st

def f_test(x, y, alt="two_sided"):
    """
    Calculates the F-test.
    :param x: The first group of data
    :param y: The second group of data
    :param alt: The alternative hypothesis, one of "two_sided" (default), "greater" or "less"
    :return: a tuple with the F statistic value and the p-value.
    """
    df1 = len(x) - 1
    df2 = len(y) - 1
    f = x.var() / y.var()
    if alt == "greater":
        p = 1.0 - st.f.cdf(f, df1, df2)
    elif alt == "less":
        p = st.f.cdf(f, df1, df2)
    else:
        # two-sided by default
        # Crawley, the R book, p.355
        p = 2.0*(1.0 - st.f.cdf(f, df1, df2))
    return f, p
Run Code Online (Sandbox Code Playgroud)


slu*_*shy 6

对于来这里寻求ANOVA F检验或在模型之间进行比较以进行特征选择的任何人