# -*- coding: utf-8 -*-
"""
Created on Tue Jan  4 15:23:28 2022

@author: Sim
"""
import pandas as pd, numpy as np
import scipy.stats as st

df = pd.read_csv(r'D:\HTEX\Pythonbk\codesdata\bmi.csv')[['height', 'weight', 'year']]
pear = df.corr()
print(pear)

spear =  df.corr(method='spearman')
print(spear)

rdf = df.rank() 
spear2 = rdf.corr()
print(spear2)

def fisherr2(r=0.2, n=50, r0=0, clevel=95, alternative='two-sided'):
   z0 = ( 1/2*np.log((1+r)/(1-r)) - 1/2*1/2*np.log((1+r0)/(1-r0)) 
         )/ (1/(n-3)**0.5)
   if alternative == 'greater':
      pval1 = 1-st.norm.cdf(z0)
   elif alternative == 'less':
      pval1 = st.norm.cdf(z0)
   else:
      pval1 = 2*st.norm.cdf(-np.abs(z0))
      
   z_val = st.norm.ppf(1-(1-clevel/100)/2)    
   lower = 1/2*np.log((1+r)/(1-r)) -z_val*np.sqrt(1/(n-3))
   upper = 1/2*np.log((1+r)/(1-r)) +z_val*np.sqrt(1/(n-3))

   lbd = (np.exp(2*lower)-1)/(np.exp(2*lower)+1)
   ubd = (np.exp(2*upper)-1)/(np.exp(2*upper)+1)

   return((z0, pval1, (lbd, ubd)))

z, p, ci = fisherr2(r=pear.iloc[0][1], n=df.shape[0], 
                    r0=0.5, alternative='greater')
print(z, p, ci)

