def to_gbd_avgint(self, parent_location_id, sex_id): """ Converts the demographics of the model to the avgint table. :return: """ LOG.info(f"Getting grid for the avgint table " f"for parent location ID {parent_location_id} " f"and sex_id {sex_id}.") grid = expand_grid({ 'sex_id': [sex_id], 'location_id': self.location_dag.parent_children(parent_location_id), 'year_id': self.demographics.year_id, 'age_group_id': self.demographics.age_group_id }) grid['time_lower'] = grid['year_id'].astype(int) grid['time_upper'] = grid['year_id'] + 1. grid = BaseInput( gbd_round_id=self.gbd_round_id).convert_to_age_lower_upper(df=grid) LOG.info("Adding covariates to avgint grid.") grid = self.add_covariates_to_data(df=grid) return grid
def get_prior_avgint_grid(settings, integrands, sexes, locations, midpoint=False): """ Get a data frame to use for setting up posterior predictions on a grid. Will still need to have covariates added to it, and prep data from dismod.api.data_tables.prep_data_avgint to convert nodes and covariate names before it can be input into the avgint table in a database. Args: settings: (cascade_at.settings.settings_configuration.SettingsConfiguration) integrands: (list of str) sexes: (list of int) locations: (list of int) midpoint: (bool) Returns: (pd.DataFrame) with columns "avgint_id", "integrand_id", "location_id", "weight_id", "subgroup_id", "age_lower", "age_upper", "time_lower", "time_upper", "sex_id" """ posterior_dfs = pd.DataFrame() alchemy = Alchemy(settings) grids = integrand_grids(alchemy=alchemy, integrands=integrands) for k, v in grids.items(): if midpoint: time = vec_to_midpoint(v['time']) age = vec_to_midpoint(v['age']) else: time = v['time'] age = v['age'] posterior_df = expand_grid({ 'age_lower': age, 'time_lower': time, 'location_id': locations, 'sex_id': sexes }) posterior_df['time_upper'] = posterior_df['time_lower'] posterior_df['age_upper'] = posterior_df['age_lower'] posterior_df['rate'] = k posterior_df['integrand'] = posterior_df['rate'].map(RateToIntegrand) posterior_df['integrand_id'] = posterior_df['integrand'].apply( lambda x: IntegrandEnum[x].value) posterior_df['weight_id'] = posterior_df["integrand"].apply( lambda x: INTEGRAND_TO_WEIGHT[x].value) posterior_df['subgroup_id'] = 0 posterior_dfs = posterior_dfs.append(posterior_df) return posterior_dfs[[ "integrand_id", "location_id", "weight_id", "subgroup_id", "age_lower", "age_upper", "time_lower", "time_upper", "sex_id" ]]
def population(Demographics, ihme): pop = Population(demographics=Demographics, decomp_step='step3', gbd_round_id=6) raw = expand_grid({ 'age_group_id': Demographics.age_group_id, 'location_id': np.array([70., 72.]), 'year_id': np.array([1990.]), 'sex_id': np.array([1., 2.]) }) raw['population'] = 3000. raw['run_id'] = np.nan pop.raw = raw return pop
def get_prior_avgint_grid(grids: Dict[str, Dict[str, np.ndarray]], sexes: List[int], locations: List[int], midpoint: bool = False) -> pd.DataFrame: """ Get a data frame to use for setting up posterior predictions on a grid. The grids are specified in the grids parameter. Will still need to have covariates added to it, and prep data from dismod.api.data_tables.prep_data_avgint to convert nodes and covariate names before it can be input into the avgint table in a database. Parameters --------- grids A dictionary of grids with keys for each integrand, which are dictionaries for "age" and "time". sexes A list of sexes locations A list of locations midpoint Whether to midpoint the grid lower and upper values (recommended for rates). Returns ------- Dataframe with columns "avgint_id", "integrand_id", "location_id", "weight_id", "subgroup_id", "age_lower", "age_upper", "time_lower", "time_upper", "sex_id" """ posterior_dfs = pd.DataFrame() for k, v in grids.items(): if midpoint: time = vec_to_midpoint(v['time']) age = vec_to_midpoint(v['age']) else: time = v['time'] age = v['age'] posterior_df = expand_grid({ 'age_lower': age, 'time_lower': time, 'location_id': locations, 'sex_id': sexes }) posterior_df['time_upper'] = posterior_df['time_lower'] posterior_df['age_upper'] = posterior_df['age_lower'] posterior_df['rate'] = k posterior_df['integrand'] = posterior_df['rate'].map(RateToIntegrand) posterior_df['integrand_id'] = posterior_df['integrand'].apply( lambda x: IntegrandEnum[x].value ) posterior_df['weight_id'] = posterior_df["integrand"].apply( lambda x: INTEGRAND_TO_WEIGHT[x].value ) posterior_df['subgroup_id'] = 0 posterior_dfs = posterior_dfs.append(posterior_df) return posterior_dfs[[ "integrand_id", "location_id", "weight_id", "subgroup_id", "age_lower", "age_upper", "time_lower", "time_upper", "sex_id" ]]