# -*- coding: utf-8 -*-
"""
Created on Tue Jan  4 12:45:19 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

yes = [10.6, 11.7, 9.5, 9.3, 10.0, 6.9, 13.6, 7.5, 11.9, 5.6]
no = [10.0, 11.8, 8.6, 7.4, 10.0, 9.6, 13.3, 10.2, 10.8, 6.2]

F, p = test_var_2samp(np.var(yes, ddof=1), len(yes), 
                      np.var(no, ddof=1), len(no))
print(F,p)

lbd, ubd = ci_var_2samp(np.var(yes, ddof=1), len(yes), 
                        np.var(no, ddof=1), len(no), level=99)
print(lbd, ubd)



