resplab / epicR

R package for the Evaluation Platform in COPD (EPIC), an agent-based whole-disease model for projection of health and economic outcomes and COPD interventions.
11 stars 11 forks source link

Diagnosis effect in exacerbation rate #129

Closed rachaelmountain closed 1 year ago

rachaelmountain commented 2 years ago

Diagnosis is included as a predictor in the latest version of epic. @aminadibi - Kate said this was something played with over the summer but should've been removed before the pull request?

double event_exacerbation_tte(agent *ag)
{
  if((*ag).gold==0 || (*ag).exac_status>0) return(HUGE_VAL);

  double rate=exp((*ag).ln_exac_rate_intercept
                    +input.exacerbation.ln_rate_betas[0]
                    +input.exacerbation.ln_rate_betas[1]*(*ag).sex
                    +input.exacerbation.ln_rate_betas[2]*((*ag).age_at_creation+(*ag).local_time)
                    +input.exacerbation.ln_rate_betas[3]*(*ag).fev1
                    +input.exacerbation.ln_rate_betas[4]*(*ag).smoking_status
                    +input.exacerbation.ln_rate_betas[5]*((*ag).gold==1)
                    +input.exacerbation.ln_rate_betas[6]*((*ag).gold==2)
                    +input.exacerbation.ln_rate_betas[7]*((*ag).gold==3)
                    +input.exacerbation.ln_rate_betas[8]*((*ag).gold==4)
                    +input.exacerbation.ln_rate_betas[9]*((*ag).diagnosis)
                    +input.medication.medication_ln_hr_exac[(*ag).medication_status] );

  (*ag).tmp_exac_rate= rate;

  if((*ag).medication_status>0)
  {
    for(int i=0;i<N_MED_CLASS;i++)
      if(((*ag).medication_status >> i) & 1)
        rate=rate*exp(input.medication.ln_rr_exac_by_class[i]);
  }

  double tte;

  if(rate==0) tte=HUGE_VAL; else tte=rand_exp()/rate;

  return(tte);
}
KateJohnson commented 2 years ago

The coefficients for the exacerbation rate equation calibrated to diagnosed patients without a term for diagnosis are:

[Input.R]: input$exacerbation$ln_rate_betas = t(as.matrix(c(intercept = 1.7, female = 0, age = 0.04082 * 0.1, fev1 = -1.5, smoking_status = 0, gold1 = 0.6 , gold2 = 0.35 , gold3 = 0.08 , gold4 = -0.35)))

I suggest changing it to this for now until the calibration in undiagnosed patients is done

aminadibi commented 1 year ago

Recalibrated in https://github.com/resplab/epicR/commit/983e45283b11e05a882173da92c935964f4794e3