def stack_mtslice(tdata_list): """stack tdata in the list into one instance""" mean_temp_list = [tdata.mean_temp for tdata in tdata_list] daily_temp_list = [tdata.daily_temp for tdata in tdata_list] obs_mean_list = [tdata.obs_mean for tdata in tdata_list] obs_std_list = [tdata.obs_std for tdata in tdata_list] study_id_list = [tdata.study_id for tdata in tdata_list] data_id_list = [tdata.data_id for tdata in tdata_list] trimming_weights_list = [tdata.trimming_weights for tdata in tdata_list] mean_temp = np.hstack(mean_temp_list) daily_temp = np.hstack(daily_temp_list) obs_mean = np.hstack(obs_mean_list) obs_std = np.hstack(obs_std_list) study_id = np.hstack(study_id_list) data_id = np.hstack(data_id_list) trimming_weights = np.hstack(trimming_weights_list) if np.any(data_id == None): data_id = None return utils.TempData(mean_temp, daily_temp, obs_mean, obs_std, study_id, data_id, trimming_weights=trimming_weights)
def aggregate_mtslice(tdata): """aggregate data by the weighted mean""" # extract the unique mean and daily pair unique_pair = np.unique(np.vstack((tdata.mean_temp, tdata.daily_temp)).T, axis=0) mean_temp = unique_pair[:, 0] daily_temp = unique_pair[:, 1] obs_mean = [] obs_std = [] for p in unique_pair: valid_id = (tdata.mean_temp == p[0]) &\ (tdata.daily_temp == p[1]) &\ (tdata.trimming_weights > 0.5) obs_mean_atp = tdata.obs_mean[valid_id] obs_std_atp = tdata.obs_std[valid_id] ivar = 1.0 / obs_std_atp**2 obs_mean_atp = obs_mean_atp.dot(ivar) / np.sum(ivar) obs_std_atp = np.sqrt(1.0 / np.sum(ivar)) obs_mean.append(obs_mean_atp) obs_std.append(obs_std_atp) obs_mean = np.array(obs_mean) obs_std = np.array(obs_std) study_id = np.arange(obs_mean.size) data_id = None return utils.TempData(mean_temp, daily_temp, obs_mean, obs_std, study_id, data_id)
def extract_mtslice(tdata, mt): """extract the temperature data at given mean_temp""" valid_id = tdata.mean_temp == mt mean_temp = tdata.mean_temp[valid_id] daily_temp = tdata.daily_temp[valid_id] obs_mean = tdata.obs_mean[valid_id] obs_std = tdata.obs_std[valid_id] study_id = tdata.study_id[valid_id] if tdata.data_id is not None: data_id = tdata.data_id[valid_id] else: data_id = None trimming_weights = tdata.trimming_weights[valid_id] return utils.TempData(mean_temp, daily_temp, obs_mean, obs_std, study_id, data_id, trimming_weights=trimming_weights)
def load_data(path_to_data, outcome): """load data csv file""" df = pd.read_csv(path_to_data) mean_temp = df['meanTempDegree'].values daily_temp = df['dailyTempCat'].values obs_mean = df['lnRr_' + outcome].values obs_std = df['se_' + outcome].values study_id = df['adm1'].values data_id = np.arange(df.shape[0]) valid_id = ~(np.isnan(obs_std) | np.isnan(obs_mean) | np.isinf(obs_std) | np.isinf(obs_mean)) mean_temp = mean_temp[valid_id] daily_temp = daily_temp[valid_id] obs_mean = obs_mean[valid_id] obs_std = obs_std[valid_id] study_id = study_id[valid_id] data_id = data_id[valid_id] return utils.TempData(mean_temp, daily_temp, obs_mean, obs_std, study_id, data_id)