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
Ejemplo n.º 2
0
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)
Ejemplo n.º 4
0
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)