def fit_disaggregation_model(model): """Disaggregation approach""" ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline(name='dis', ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method='linear') ## Disaggregate input data a = [] p = [] n = [] for i in model.input_data.index: a_s, a_e = model.input_data.ix[i, 'age_start'], model.input_data.ix[i, 'age_end'] a += range(a_s, a_e) p += [model.input_data.ix[i, 'value']] * (a_e - a_s) n += [float(model.input_data.ix[i, 'effective_sample_size']) / (a_e - a_s)] * (a_e - a_s) a = pl.array(a) p = pl.array(p) n = pl.array(n) model.vars['pi'] = mc.Lambda('pi_dis', lambda mu=model.vars['mu_age'], a=a: mu[a]) delta = mc.Uniform('delta_mid', 0., 1000., value=10.) model.vars += {'delta': delta} ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom(name='dis', pi=model.vars['pi'], delta=model.vars['delta'], p=p, # TODO: change this parameter name to "r" to match the book chapter n=n) fit_model(model)
def fit_age_standardizing_model(model): """Age-standardizing model""" ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline(name='std', ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method='linear') model.vars += dismod3.age_group.age_standardize_approx(name='std', ages=model.ages, age_weights=pl.ones_like(model.ages), mu_age=model.vars['mu_age'], age_start=model.input_data['age_start'], age_end=model.input_data['age_end']) delta = mc.Uniform('delta_mid', 0., 1000., value=10.) model.vars += {'delta': delta} ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom(name='std', pi=model.vars['mu_interval'], delta=model.vars['delta'], p=model.input_data['value'], n=model.input_data['effective_sample_size']) fit_model(model)
def fit_age_integrating_model(model): """Age-integrating model""" ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline( name="std", ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method="linear" ) model.vars += dismod3.age_group.age_integrate_approx( name="int", ages=model.ages, age_weights=model.input_data["age_weights"], mu_age=model.vars["mu_age"], age_start=model.input_data["age_start"], age_end=model.input_data["age_end"], ) model.vars += {"delta": mc.Uniform("delta_std", 0.0, 1000.0, value=10.0)} ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom( name="std", pi=model.vars["mu_interval"], delta=model.vars["delta"], p=model.input_data["value"], n=model.input_data["effective_sample_size"], ) fit_model(model)
def fit_midpoint_covariate_model(model): """Midpoint-covariate model""" # Create age-group model ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline(name='midc', ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method='linear') ## Midpoint model to represent age-group data model.vars += dismod3.age_group.midpoint_covariate_approx(name='midc', ages=model.ages, mu_age=model.vars['mu_age'], age_start=model.input_data['age_start'], age_end=model.input_data['age_end']) ## Uniform prior on negative binomial rate model over-dispersion term delta = mc.Uniform('delta_mid', 0., 1000., value=10.) model.vars += {'delta': delta} ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom(name='midc', pi=model.vars['mu_interval'], delta=model.vars['delta'], p=model.input_data['value'], n=model.input_data['effective_sample_size']) fit_model(model)
def fit_disaggregation_model(model): """Disaggregation approach""" ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline( name="dis", ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method="linear" ) ## Disaggregate input data a = [] p = [] n = [] for i in model.input_data.index: a_s, a_e = model.input_data.ix[i, "age_start"], model.input_data.ix[i, "age_end"] a += range(a_s, a_e) p += [model.input_data.ix[i, "value"]] * (a_e - a_s) n += [float(model.input_data.ix[i, "effective_sample_size"]) / (a_e - a_s)] * (a_e - a_s) a = pl.array(a) p = pl.array(p) n = pl.array(n) model.vars["pi"] = mc.Lambda("pi_dis", lambda mu=model.vars["mu_age"], a=a: mu[a]) model.vars["delta"] = mc.Uniform("delta_dis", 0.0, 1000.0, value=10.0) ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom( name="dis", pi=model.vars["pi"], delta=model.vars["delta"], p=p, # TODO: change this parameter name to "r" to match the book chapter n=n, ) fit_model(model)
def fit_alt_midpoint_covariate_model(model): """Midpoint/covariate model sq""" # Create age-group model ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline( name="midc", ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method="linear" ) ## Midpoint model to represent age-group data model.vars += dismod3.age_group.midpoint_covariate_approx( name="midc", ages=model.ages, mu_age=model.vars["mu_age"], age_start=model.input_data["age_start"], age_end=model.input_data["age_end"], transform=lambda x: x ** 2.0, ) ## Uniform prior on negative binomial rate model over-dispersion term model.vars += {"delta": mc.Uniform("delta_midc", 0.0, 1000.0, value=10.0)} ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom( name="midc", pi=model.vars["mu_interval"], delta=model.vars["delta"], p=model.input_data["value"], n=model.input_data["effective_sample_size"], ) fit_model(model)
def fit_age_integrating_model(model): """Age-integrating model""" ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline(name='std', ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method='linear') model.vars += dismod3.age_group.age_integrate_approx( name='int', ages=model.ages, age_weights=model.input_data['age_weights'], mu_age=model.vars['mu_age'], age_start=model.input_data['age_start'], age_end=model.input_data['age_end']) model.vars += {'delta': mc.Uniform('delta_std', 0., 1000., value=10.)} ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom( name='std', pi=model.vars['mu_interval'], delta=model.vars['delta'], p=model.input_data['value'], n=model.input_data['effective_sample_size']) fit_model(model)
def fit_alt_midpoint_covariate_model(model): """Midpoint/covariate model sq""" # Create age-group model ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline(name='midc', ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method='linear') ## Midpoint model to represent age-group data model.vars += dismod3.age_group.midpoint_covariate_approx( name='midc', ages=model.ages, mu_age=model.vars['mu_age'], age_start=model.input_data['age_start'], age_end=model.input_data['age_end'], transform=lambda x: x**2.) ## Uniform prior on negative binomial rate model over-dispersion term model.vars += {'delta': mc.Uniform('delta_midc', 0., 1000., value=10.)} ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom( name='midc', pi=model.vars['mu_interval'], delta=model.vars['delta'], p=model.input_data['value'], n=model.input_data['effective_sample_size']) fit_model(model)
def fit_disaggregation_model(model): """Disaggregation approach""" ## Spline model to represent age-specific rate model.vars += dismod3.age_pattern.spline(name='dis', ages=model.ages, knots=knots, smoothing=pl.inf, interpolation_method='linear') ## Disaggregate input data a = [] p = [] n = [] for i in model.input_data.index: a_s, a_e = model.input_data.ix[i, 'age_start'], model.input_data.ix[ i, 'age_end'] a += range(a_s, a_e) p += [model.input_data.ix[i, 'value']] * (a_e - a_s) n += [ float(model.input_data.ix[i, 'effective_sample_size']) / (a_e - a_s) ] * (a_e - a_s) a = pl.array(a) p = pl.array(p) n = pl.array(n) model.vars['pi'] = mc.Lambda('pi_dis', lambda mu=model.vars['mu_age'], a=a: mu[a]) delta = mc.Uniform('delta_mid', 0., 1000., value=10.) model.vars += {'delta': delta} ## Negative binomial rate model model.vars += dismod3.rate_model.neg_binom( name='dis', pi=model.vars['pi'], delta=model.vars['delta'], p=p, # TODO: change this parameter name to "r" to match the book chapter n=n) fit_model(model)