# -*- coding: utf-8 -*-
"""
Created on Tue Jan  4 12:54:41 2022

@author: Sim
"""

def test_var_2samp(var1, n1, var2, n2, alternative='two-sided'):
    import scipy.stats as st
    
    df1 = n1 - 1; df2 = n2 - 1 
    F0 = var1/var2
   
    if alternative == 'greater':
        pval = 1 - st.f.cdf(F0, df1, df2)
    elif alternative == 'less':
        pval = st.f.cdf(F0,df2, df2)
    else:
        pval = st.f.cdf(F0,df1,df2)
        if pval < 0.5:
            pval = pval * 2
        else:
            pval = (1-pval)*2
    
    return(F0, pval)

def ci_var_2samp(var1, n1, var2, n2, level=95):
    import scipy.stats as st
    
    F0 = var1/var2
    df1 = n1 - 1; df2 = n2 - 1 
    
    lbd = F0/st.f.ppf(1-(100-level)/100/2, df1, df2)
    ubd = F0/st.f.ppf((100-level)/100/2, df1, df2)
    return((lbd,ubd))

import numpy as np, scipy.stats as st

one = [74.9, 74.0, 75.5, 73.9, 74.7, 74.3, 75.8, 74.2, 74.4, 73.3]
two = [75.3, 76.5, 74.4, 74.9, 75.0, 76.9, 75.3, 75.0, 75.2]

F, p = test_var_2samp(np.var(two, ddof=1), len(two), 
                      np.var(one, ddof=1), len(one))
print(F,p)

lbd, ubd = ci_var_2samp(np.var(two, ddof=1), len(two), 
                        np.var(one, ddof=1), len(one), level=95)
print(lbd, ubd)
#-----------------------------------------------------
F, p = st.levene(one, two)
print(F, p)






