# -*- coding: utf-8 -*-
"""
Created on Thu Nov 11 14:53:54 2021

@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

no=[2.17, 0.17, 0.83, 3.04, 1.06, 3.93, 5.38, 3.53, 4.54, 
    3.98, 1.02, 3.46, 1.19, 5.64, 2.66, 1.22, 2.64, 2.31, 4.49]
yes=[6.96, 13.00, 5.54, 6.19, 7.31, 14.34, 4.74, 2.50,  1.27,
    4.18,  3.10, 3.01, 6.81, 8.28,  2.33, 7.18, 5.67, 12.68,
    8.94,  3.16, 3.30, 6.99]

v1 = np.var(no, ddof=1)
v2 = np.var(yes, ddof=1)

F, p = test_var_2samp(v1, len(no), v2, len(yes))
print(F, p)

lbd, ubd = ci_var_2samp(v1, len(no), v2, len(yes))
print(lbd, ubd)
