How do I do a F-test in python

后端 未结 4 1504
借酒劲吻你
借酒劲吻你 2020-12-23 17:17

How do I do an F-test to check if the variance is equivalent in two vectors in Python?

For example if I have

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


        
4条回答
  •  感情败类
    2020-12-23 17:18

    if you need a two-tailed test, you can proceed as follow, i choosed alpha =0.05:

    a = [1,2,1,2,1,2,1,2,1,2]
    b = [1,3,-1,2,1,5,-1,6,-1,2]
    print('Variance a={0:.3f}, Variance b={1:.3f}'.format(np.var(a, ddof=1), np.var(b, ddof=1)))
    fstatistics = np.var(a, ddof=1)/np.var(b, ddof=1) # because we estimate mean from data
    fdistribution = stats.f(len(a)-1,len(b)-1) # build an F-distribution object
    p_value = 2*min(fdistribution.cdf(f_critical), 1-fdistribution.cdf(f_critical))
    f_critical1 = fdistribution.ppf(0.025)
    f_critical2 = fdistribution.ppf(0.975)
    print(fstatistics,f_critical1, f_critical2 )
    if (p_value<0.05):
        print('Reject H0', p_value)
    else:
        print('Cant Reject H0', p_value)
    

    if you want to proceed to an ANOVA like test where only large values can cause rejection, you can proceed to right-tail test, you need to pay attention to the order of variances (fstatistics = var1/var2 or var2/var1):

    a = [1,2,1,2,1,2,1,2,1,2]
    b = [1,3,-1,2,1,5,-1,6,-1,2]
    print('Variance a={0:.3f}, Variance b={1:.3f}'.format(np.var(a, ddof=1), np.var(b, ddof=1)))
    fstatistics = max(np.var(a, ddof=1), np.var(b, ddof=1))/min(np.var(a, ddof=1), np.var(b, ddof=1)) # because we estimate mean from data
    fdistribution = stats.f(len(a)-1,len(b)-1) # build an F-distribution object 
    p_value = 1-fdistribution.cdf(fstatistics)
    f_critical = fd.ppf(0.95)
    print(fstatistics, f_critical)
    if (p_value<0.05):
        print('Reject H0', p_value)
    else:
        print('Cant Reject H0', p_value)
    

    The left-tailed can be done as follow :

    a = [1,2,1,2,1,2,1,2,1,2]
    b = [1,3,-1,2,1,5,-1,6,-1,2]
    print('Variance a={0:.3f}, Variance b={1:.3f}'.format(np.var(a, ddof=1), np.var(b, ddof=1)))
    fstatistics = min(np.var(a, ddof=1), np.var(b, ddof=1))/max(np.var(a, ddof=1), np.var(b, ddof=1)) # because we estimate mean from data
    fdistribution = stats.f(len(a)-1,len(b)-1) # build an F-distribution object
    p_value = fdistribution.cdf(fstatistics)
    f_critical = fd.ppf(0.05)
    print(fstatistics, f_critical)
    if (p_value<0.05):
        print('Reject H0', p_value)
    else:
        print('Cant Reject H0', p_value)
    

提交回复
热议问题