Skip to content

Conversation

@mmsuarezcosta
Copy link
Collaborator

@mmsuarezcosta mmsuarezcosta commented Oct 30, 2025

Files

Files changes:

  • parameters.csv
  • scaleup_parameters.csv
    • It is important to review the modifications I have made to this file. I have updated to the standard parameters.csv format, thus the column target_value has been renamed value, and the max and mins have been changed to prior_min and prior_max. The logic is that anything within the scale_up file is a target by definition, so it is not required to label the value itself as target.

Files used in hiv module that require refactoring (request for @mnjowe to support in future iterations):

  • hiv_prevalence.csv
  • time_since_infection_at_baselin.csv
  • MoH_numbers_tests.csv, spectrum_treatment_cascade.csv (they contain historical data, so refactoring may not be required)

Calibration Data Files

  • LHC_samples.csv
  • unaids_infections_art2021.csv
  • unaids_mortality_dalys2021.csv
  • children0_14_prev_AIDSinfo.csv
  • unaids_program_perf.csv
  • DHS_prevalence.csv
  • MoH_number_art.csv
  • MPHIA_incidence2020.csv
  • MPHIA_prevalence_art2020.csv
  • MoH_numbers_tests.csv (also used in HIV.py)

Files Not Used in Code (May be legacy - consider deleting)

  • calibration_from_aids_info.csv
  • MoH_CPT_IPT2020.csv
  • unaids_pmtct2021.csv
  • MPHIA_incidence2020.csv (output_plots.py references 2015 version that doesn't exist, consider updating reference)
  • MPHIA_prevalence_art2020.csv (output_plots.py references 2015 version that doesn't exist, consider updating reference)

Parameters

Assumptions

  • mean_months_between_aids_and_death
  • mean_months_between_aids_and_death_infant
  • rr_fsw (discrepancy in write-up value 20 and parameter.csv value of 25)
  • rr_behaviour_change
  • proportion_reduction_in_risk_of_hiv_aq_if_on_prep
  • mean_months_between_aids_and_death_infant

Undetermined, calibration

I cross-checked the write-up and notes in the parameter CSV file to determine which I believed to be calibrated.

  • hiv_testing_rate_adjustment, treatment_initiation_adjustment,vs_adjustment: believe all these are calibrated based on write-up and parameter documentation in code
  • Circumcision parameters (prob_circ_after_hiv_test, increase_in_prob_circ_2019, prob_circ_for_child_before_2020, prob_circ_for_child_from_2020): Based on write-up, vmc was calibrated to national rates, so I have labeled all these as calibrated
  • aids_tb_treatment_adjustment: believe it is calibrated because of adjustment label
  • Other testing rate probabilities (e.g. prob_hiv_test_at_anc_or_delivery) I have marked as local, but they may have been adjusted for calibration.

Hard-Coding

  • Any values the LinearModels I have left hard-coded. Example:
        predictors = [
            Predictor("age_years").when("<15", 0.0).when("<49", 1.0).otherwise(0.0),
            Predictor("sex").when("F", p["rr_sex_f"]),
  • Consumables and equipment

Notes (Future development)

  • More thoroughly review designation of local and universal (I did not have time to exhaustively review)

@mmsuarezcosta mmsuarezcosta linked an issue Oct 30, 2025 that may be closed by this pull request
@mmsuarezcosta mmsuarezcosta requested review from joehcollins, marghe-molaro, mnjowe, tbhallett and tdm32 and removed request for joehcollins October 30, 2025 13:04
@mmsuarezcosta mmsuarezcosta changed the title remove hardcoding and param revamp Param Revamp - HIV Oct 30, 2025
@mmsuarezcosta mmsuarezcosta marked this pull request as ready for review November 3, 2025 13:00
@marghe-molaro
Copy link
Collaborator

Thanks @mmsuarezcosta, this looks good to me, and I think is ready for @tdm32's review!


# check still eligible, person must be <30 years old or a fsw
if (person["age_years"] > 30) or not person["li_is_sexworker"]:
if (person["age_years"] > p['age_max_prep']) or not person["li_is_sexworker"]:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be the max age of AGYW (age_max_agyw)

self,
priority=1,
topen=self.sim.date + pd.DateOffset(days=7),
topen=self.sim.date + pd.DateOffset(days=p['prep_cons_notavailable_retry_days']),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

prep_cons_notavailable_retry_days - should these parameters which describe repeat healthcare seeking behaviour if no cons available be standardised? One param for repeat ARV/PrEP/VMMC etc if no consumables on the day?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @tdm32 , I think you are in the best position to decide how disaggregated these should be. If currently there is one single assumption around repeated tries, regardless of the consumable type, then we could definitely standardise/unify it.

@tdm32
Copy link
Collaborator

tdm32 commented Dec 1, 2025

On the sheet scaleup_parameters.csv columns max and min have been changed to prior_min and prior_max. This is not quite right, these values are hypothetical values for reducing program to min performance and scaling up to max performance for scenario analyses.

@marghe-molaro
Copy link
Collaborator

On the sheet scaleup_parameters.csv columns max and min have been changed to prior_min and prior_max. This is not quite right, these values are hypothetical values for reducing program to min performance and scaling up to max performance for scenario analyses.

Thanks @tdm32 , absolutely prior_min and prior_max should be N/A for scenario parameters so I will correct this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HIV Module

4 participants