Mercurial > repos > jay > gaiac_violin_plot
diff gaiac_bias_calculation/gaiac_bias_calculation.py @ 0:abfc2c9779d6 draft
planemo upload for repository https://github.com/jaidevjoshi83/gaiac.git commit c29a769ed165f313a6410925be24f776652a9663-dirty
author | jay |
---|---|
date | Thu, 15 May 2025 14:47:54 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gaiac_bias_calculation/gaiac_bias_calculation.py Thu May 15 14:47:54 2025 +0000 @@ -0,0 +1,61 @@ +import scipy +#from scipy.stats.distributions import chi2,t +from scipy.stats import t +from scipy import stats +import pandas as pd +import numpy as np +import argparse + +def Bias_abs(infile, clm1, clm2, Out): + + df = pd.read_csv(infile, sep="\t") + lOc = int(df.shape[0]) + cl = df.columns.tolist() +#making a column of absolute di as per us epa + df['PM10_OPC_DIFF']=abs(((df[cl[int(clm1)-1]])-(df[cl[int(clm2)-1]]))/(df[cl[int(clm2)-1]]))*100 +#square of di + df['PM10_OPC_DIFFs']=(df['PM10_OPC_DIFF'])*(df['PM10_OPC_DIFF']) +#summation of the columns + d10=df.PM10_OPC_DIFF.sum() + d10_2=df.PM10_OPC_DIFFs.sum() +#AB and AS calculations + AB= d10/lOc + AS=(np.sqrt((lOc*(d10_2)-(d10)**2)/(2*lOc*(lOc-1)))) + +#T distribution calculation + T=stats.t.ppf(1-0.05, lOc) +#Absolute bias calculation + Bias_abs = abs(AB + T*AS/(np.sqrt(lOc))) + +#di column with sign + df['Di']=(((df[cl[int(clm1)-1]])-(df[cl[int(clm2)-1]]))/(df[cl[int(clm2)-1]]))*100 +#quantiles of di without sign + q1=df['Di'].quantile([0.25]) + q2=df['Di'].quantile([0.75]) +#assigning sign to absolute bias based on q1 and q2 values + + if (q1[0.25] < 0) & (q2[0.75] < 0): + Bias_abs=Bias_abs*-1 + elif (q1[0.25] > 0) & (q2[0.75] > 0): + Bias_abs=Bias_abs + elif (q1[0.25] >0) & (q2[0.75]<0): + Bias_abs=(u"\u00B1"+str(Bias_abs)) + elif (q1[0.25] <0) & (q2[0.75]>0): + Bias_abs=(u"\u00B1"+str(Bias_abs)) + +#output file + df1 = pd.DataFrame([Bias_abs], columns=['Percent Bias']) + df1.round(4).to_csv(Out, sep="\t") + + +if __name__=="__main__": + + parser = argparse.ArgumentParser() + + parser.add_argument("-I", "--infile", required=True, default=None, help="Input file") + parser.add_argument("-c1", "--column_1", required=True, default=None, help="First column") + parser.add_argument("-c2", "--column_2", required=True, default=None, help="Second column") + parser.add_argument("-o", "--output", required=True, default=None, help="OutFile") + args = parser.parse_args() + + Bias_abs(args.infile, args.column_1, args.column_2, args.output)