def calc_monthly_linpatterncorr(ncdt,lin='one',northof=0,conv=1,vert=False): """ Computes the pattern correlation b/w the 'SUM' and 'FULL' for given 'lin'. Input data is climatology of spatial data. computes the correlation for area north of 'northof' value for e/ month. returns rval,pval """ pico = ncdt['prei2xco2iceb'] pipi = ncdt['preipreiice'] copi = ncdt['2xco2preiice'] coco = ncdt['2xco22xco2ice'] lat = ncdt['lat'] if lin=='one': ice = (pico - pipi)*conv co2 = (copi - pipi)*conv ctl = pipi*conv suff='' suff1='cold'; suff2='hi' elif lin=='two': ice = (coco - copi)*conv co2 = (coco - pico)*conv ctl = coco*conv suff='2' suff1='warm'; suff2='lo' combo = ice+co2 full = (coco - pipi)*conv #print lat>northof rvals=np.zeros((12,)) pvals=np.zeros_like(rvals) for moii in range(0,12): if vert: # lat in 2nd dim rvals[moii],pvals[moii] = cutl.pattcorr_pearson(combo[moii,:,lat>northof].flatten(), full[moii,:,lat>northof].flatten()) else: # lat in 1st dim rvals[moii],pvals[moii] = cutl.pattcorr_pearson(combo[moii,lat>northof,:].flatten(), full[moii,lat>northof,:].flatten()) return rvals,pvals
def calc_linpatterncorr(ncdt,lin='one',northof=0,conv=1,vert=False): """ Computes the pattern correlation b/w the 'SUM' and 'FULL' for given 'lin'. Input data is seasonal avg timeseries of spatial data. computes the correlation for area north of 'northof' value. returns rval,pval """ pico = ncdt['prei2xco2iceb'] pipi = ncdt['preipreiice'] copi = ncdt['2xco2preiice'] coco = ncdt['2xco22xco2ice'] lat = ncdt['lat'] if lin=='one': ice = (np.mean(pico,axis=0) - np.mean(pipi,axis=0))*conv co2 = (np.mean(copi,axis=0) - np.mean(pipi,axis=0))*conv ctl = np.mean(pipi,axis=0)*conv suff='' suff1='cold'; suff2='hi' elif lin=='two': ice = (np.mean(coco,axis=0) - np.mean(copi,axis=0))*conv co2 = (np.mean(coco,axis=0) - np.mean(pico,axis=0))*conv ctl = np.mean(coco,axis=0)*conv suff='2' suff1='warm'; suff2='lo' combo = ice+co2 full = (np.mean(coco,axis=0) - np.mean(pipi,axis=0))*conv if vert: # lat in 2nd dim rval,pval = cutl.pattcorr_pearson(combo[:,lat>northof].flatten(), full[:,lat>northof].flatten()) else: # lat in 1st dim rval,pval = cutl.pattcorr_pearson(combo[lat>northof,:].flatten(), full[lat>northof,:].flatten()) #print cutl.pattcorr(combo[lat>northof,:].flatten(),full[lat>northof,:].flatten()) return rval,pval
fldpsea = np.zeros((4,len(lat),len(lon))) flddsea = np.zeros((4,len(lat),len(lon))) pcsea = np.zeros((4)) pcsea2 = np.zeros((4)) # test pattcorr_pearson() @@ pcsea2pval = np.zeros((4)) # test pattcorr_pearson() for seaii,sea in enumerate(seasons): fldcsea[seaii,...] = np.mean(cnc.getNCvar(fnamec,ncfield,timesel=timesel,seas=sea)*conv,axis=0) fldpsea[seaii,...] = np.mean(cnc.getNCvar(fnamep,ncfield,timesel=timesel,seas=sea)*conv,axis=0) flddsea[seaii,...] = fldpsea[seaii,...]-fldcsea[seaii,...] tmp = np.squeeze(flddsea[seaii,lat>latlim,...]) tmpcmp = np.squeeze(flddcsea[seaii,lat>latlim,...]) pcsea[seaii] = cutl.pattcorr(tmp.flatten()*weights.flatten(), tmpcmp.flatten()*weights.flatten()) pcsea2[seaii],pcsea2pval[seaii] = cutl.pattcorr_pearson(tmp.flatten()*weights.flatten(), tmpcmp.flatten()*weights.flatten()) seadiffdict[skey] = flddsea pcseameandict[skey] = pcsea pcsea2meandict[skey] = pcsea2 pcsea2pvalmeandict[skey] = pcsea2pval colordict = ccm.get_colordict() # <codecell> import pandas as pd pcmeandf = pd.DataFrame(pcmeandict)
def pattcorr_ensemble(ename, field, latlim=60): # @@@@@@@@@@@@ is this fully implemented? Don't think so. 12/2/14 if ename=='ANT': ename='HistIC' elif ename=='TOT': ename='HistBC' enssims = con.build_ensemblesims(ename) ensnum=len(enssims) # ======= copied from Canam4_BCpatterncorr-Copy0.py =========== #ensnum=5 diffdict = {} pcmeandict = {} # fldp-fldc pattern corr compared to mean BC pchaddict = {} # fldp-fldc pattern corr compared to hadisst seadiffdict = {} # seasonal mean pcseameandict = {} pcsea2meandict = {} # to test the other pattern corr calc pcsea2pvalmeandict = {} # to test the other pattern corr calc # generate weights for the pattern corr lat = con.get_t63lat() lon = con.get_t63lon() areas = cutl.calc_cellareas(lat,lon) areas = areas[lat>latlim,:] weights = areas / np.sum(np.sum(areas,axis=1),axis=0) #for eii in range(1,ensnum+1): for skey in enssims: #skey = etype + str(eii) #casenamec = bcasenamec + skey #casenamep = bcasenamep + skey #fnamec = basepath + casenamec+ subdir + casenamec + '_' + field + '_001-121_ts.nc' #fnamep = basepath + casenamep+ subdir + casenamep + '_' + field + '_001-121_ts.nc' fnamec,fnamep = con.build_filepathpair(skey,field) # monthly calc fldc = cnc.getNCvar(fnamec,ncfield,timesel=timesel)*conv fldp = cnc.getNCvar(fnamep,ncfield,timesel=timesel)*conv fldd = fldp-fldc # take the pattern correlation flddclimo,flddstd = cutl.climatologize(fldd) # climo first (don't need to do for BCs technically) flddcclimo,flddcstd = cutl.climatologize(flddc) # climo first. baseline diff data diffdict[skey] = flddclimo # for each month, compute pattern corr pc = np.zeros((12)) for mii,mon in enumerate(con.get_mon()): tmp = np.squeeze(flddclimo[mii,lat>latlim,...]) tmpcmp = np.squeeze(flddcclimo[mii,lat>latlim,...]) pc[mii] = cutl.pattcorr(tmp.flatten()*weights.flatten(),tmpcmp.flatten()*weights.flatten()) pcmeandict[skey] = pc # monthly # seasonal calc fldcsea = np.zeros((4,len(lat),len(lon))) fldpsea = np.zeros((4,len(lat),len(lon))) flddsea = np.zeros((4,len(lat),len(lon))) pcsea = np.zeros((4)) pcsea2 = np.zeros((4)) # test pattcorr_pearson() @@ pcsea2pval = np.zeros((4)) # test pattcorr_pearson() for seaii,sea in enumerate(seasons): fldcsea[seaii,...] = np.mean(cnc.getNCvar(fnamec,ncfield,timesel=timesel,seas=sea)*conv,axis=0) fldpsea[seaii,...] = np.mean(cnc.getNCvar(fnamep,ncfield,timesel=timesel,seas=sea)*conv,axis=0) flddsea[seaii,...] = fldpsea[seaii,...]-fldcsea[seaii,...] tmp = np.squeeze(flddsea[seaii,lat>latlim,...]) tmpcmp = np.squeeze(flddcsea[seaii,lat>latlim,...]) pcsea[seaii] = cutl.pattcorr(tmp.flatten()*weights.flatten(), tmpcmp.flatten()*weights.flatten()) pcsea2[seaii],pcsea2pval[seaii] = cutl.pattcorr_pearson(tmp.flatten()*weights.flatten(), tmpcmp.flatten()*weights.flatten()) seadiffdict[skey] = flddsea pcseameandict[skey] = pcsea pcsea2meandict[skey] = pcsea2 pcsea2pvalmeandict[skey] = pcsea2pval