# -*- 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

ctrl=[89, 78, 82, 94, 81, 82, 70, 93, 79, 86, 87, 81, 80, 
      89, 79, 78, 84]
trt=[85, 89, 75, 85, 99, 74, 82, 92, 92, 81, 77, 85, 77, 
     84, 83, 88, 85, 78, 88, 82, 94, 77, 79, 84, 73, 83]

v1 = np.var(ctrl, ddof=1)
v2 = np.var(trt, ddof=1)

F, p = test_var_2samp(v1, len(ctrl), v2, len(trt))
print(F, p)

lbd, ubd = ci_var_2samp(v1, len(ctrl), v2, len(trt))
print(lbd, ubd)
