def regress_data(alldata, indname='onset', axis=0): data = alldata['data_latlon'] var_sector = alldata['var_sector'] index = alldata[indname] print('Computing regressions') reg_data = xray.Dataset() for nm in data.data_vars: print(nm) reg = atm.regress_field(data[nm], index, axis) for nm2 in reg.data_vars: reg_data[nm + '_' + nm2] = reg[nm2] reg_sector = atm.regress_field(var_sector, index, axis) reg_out = {'latlon' : reg_data, 'sector' : reg_sector} return reg_out
with xray.open_dataset(ptsfile) as index_pts: index_pts.load() for nm in index_pts.data_vars: if pts_xroll is not None: index_pts[nm] = atm.rolling_mean(index_pts[nm], pts_xroll, axis=-1, center=True) if pts_yroll is not None: index_pts[nm] = atm.rolling_mean(index_pts[nm], pts_yroll, axis=-2, center=True) # Regression of gridpoint indices onto large-scale index print('Regression of gridpoint indices onto large-scale index') pts_reg, pts_mask = {}, {} for nm in index_pts.data_vars: ind = index[nm].sel(year=index_pts['year']) pts_reg[nm] = atm.regress_field(index_pts[nm], ind, axis=0) pts_reg[nm]['pts_mask'] = (pts_reg[nm]['p'] >= 0.05) # Mask out grid points where CHP index is ill-defined def applymask(ds, mask_in): for nm in ds.data_vars: mask = atm.biggify(mask_in, ds[nm], tile=True) vals = np.ma.masked_array(ds[nm], mask=mask).filled(np.nan) ds[nm].values = vals return ds if ptsmaskfile is not None: fracmin = 0.5 day1 = atm.mmdd_to_jday(6, 1) day2 = atm.mmdd_to_jday(9, 30) with xray.open_dataset(ptsmaskfile) as ds:
data = collections.OrderedDict() for nm in datafiles: var, onset, retreat = utils.load_dailyrel(datafiles[nm]) data[nm] = var # ---------------------------------------------------------------------- # Test atm.regress_field day = -60 # 1-d timeseries var = data['U200'].sel(dayrel=day) ts = atm.mean_over_geobox(var, 10, 30, 60, 100) ts_reg = atm.Linreg(onset, ts) ts_reg2 = atm.regress_field(ts, onset) print(ts_reg.r, ts_reg2.r.values) print(ts_reg.slope, ts_reg2.m.values) print(ts_reg.p, ts_reg2.p.values) # x-y data regdays = [-60, -30, 0, 30, 60] plotdays = [-60, -30] clev_r = np.arange(-1.0, 1.01, 0.05) for nm in varnms: print(nm) var = data[nm].sel(dayrel=regdays) reg_daily = atm.regress_field(var, onset, axis=0) for day in plotdays: reg = reg_daily.sel(dayrel=day) title = '%s day %d vs. Onset ' % (var.name, day)