Pv_mod issueshttps://gitlab.pasteur.fr/mwhite/pv_mod/-/issues2019-06-11T14:21:01+02:00https://gitlab.pasteur.fr/mwhite/pv_mod/-/issues/4Definition of "overtreatment" in STAT affects impact measure2019-06-11T14:21:01+02:00Thomas OBADIADefinition of "overtreatment" in STAT affects impact measureSo, turns out that between [a version slightly prior to 'finalized' v2.5](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/efbf475cf6914a15b5502cf23739fb933be8efed/Pv_mod/Source.cpp#L3175) and [current working version](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/master/Pv_mod/Intervention.cpp#L1765), overtreatment has changed definition and this affects how we draw the STAT screening result.
Screening can have two definitions.
Was (option 1):
**"any person whose last BS infection was >= 270 days ago but still received PQ", i.e. those "treated | unlikely to harbor HPZ", as per the definition of the STAT test**
Is now (option 2):
**"any person who doesn't have any HPZ but still receives PQ", i.e. those "treated | not carrying HPZ"**
Both definitions make sense, but have different implications: the former one links overtreatment to Sp, while the latter doesn't.
For STAT, we define:
Se = P(STAT_pos == 1 | "Individual likely to carry HPZ") = P(STAT_pos == 1 | T_last_BS <= 270)
<=>
Se ~ Nb(STAT_pos == 1 && T_last_BS <= 270) / Nb(T_last_BS <= 270)
Sp = P(STAT_pos == 0 | "Individual unlikely to carry HPZ") = P(STAT_pos == 0 | T_last_BS > 270)
<=>
Sp ~ Nb(STAT_pos == 0 && T_last_BS > 270) / Nb(T_last_BS > 270)
While the definition of `PQ_overtreat`and `PQ_overtreat_9m` [remains consistent with that of other interventions](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/master/Pv_mod/Intervention.cpp#L1779), the way we screen persons will have an impact on how we measure "overtreatment". With option 1, it will make overtreatment independent on sensitivity. With option 2, it introduces some correlation, allowing increasing overtreatment to increase with sensitivity (when keeping specificity fixed).
Rationale: if Sp remains constant but Se increases, we identify more persons that have `T_last_BS <= 270`, and this will include more and more those how don't have HPZ (so, PQ_overtreat will increase but PQ_overtreat_9m shouldn't)
Does that make sense ?So, turns out that between [a version slightly prior to 'finalized' v2.5](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/efbf475cf6914a15b5502cf23739fb933be8efed/Pv_mod/Source.cpp#L3175) and [current working version](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/master/Pv_mod/Intervention.cpp#L1765), overtreatment has changed definition and this affects how we draw the STAT screening result.
Screening can have two definitions.
Was (option 1):
**"any person whose last BS infection was >= 270 days ago but still received PQ", i.e. those "treated | unlikely to harbor HPZ", as per the definition of the STAT test**
Is now (option 2):
**"any person who doesn't have any HPZ but still receives PQ", i.e. those "treated | not carrying HPZ"**
Both definitions make sense, but have different implications: the former one links overtreatment to Sp, while the latter doesn't.
For STAT, we define:
Se = P(STAT_pos == 1 | "Individual likely to carry HPZ") = P(STAT_pos == 1 | T_last_BS <= 270)
<=>
Se ~ Nb(STAT_pos == 1 && T_last_BS <= 270) / Nb(T_last_BS <= 270)
Sp = P(STAT_pos == 0 | "Individual unlikely to carry HPZ") = P(STAT_pos == 0 | T_last_BS > 270)
<=>
Sp ~ Nb(STAT_pos == 0 && T_last_BS > 270) / Nb(T_last_BS > 270)
While the definition of `PQ_overtreat`and `PQ_overtreat_9m` [remains consistent with that of other interventions](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/master/Pv_mod/Intervention.cpp#L1779), the way we screen persons will have an impact on how we measure "overtreatment". With option 1, it will make overtreatment independent on sensitivity. With option 2, it introduces some correlation, allowing increasing overtreatment to increase with sensitivity (when keeping specificity fixed).
Rationale: if Sp remains constant but Se increases, we identify more persons that have `T_last_BS <= 270`, and this will include more and more those how don't have HPZ (so, PQ_overtreat will increase but PQ_overtreat_9m shouldn't)
Does that make sense ?https://gitlab.pasteur.fr/mwhite/pv_mod/-/issues/3Streamline PQ and TQ distirbution2019-06-11T12:21:11+02:00Thomas OBADIAStreamline PQ and TQ distirbutionIn interventions where PQ and/or TQ id given, there seems to be some redundancies in propagating individual-based flags (PQ_treat, TQ_treat...) to vectorized population-level data.
For instance, the whole block found in commit d51e87db2c65ee2d70e5de92cee6c4f91cffa7a6 [at lines 899-905](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/master/Pv_mod/Intervention.cpp#L899) could be simplified into something like:
```
POP.people[n].PQ_treat = PQ_treat;
```
To be discussed with @mwhite before making changes here, because this could be to keep the code consistent across interventions.
Again, just keeping this issue opened for now as a reference for future code refactoring if needed.In interventions where PQ and/or TQ id given, there seems to be some redundancies in propagating individual-based flags (PQ_treat, TQ_treat...) to vectorized population-level data.
For instance, the whole block found in commit d51e87db2c65ee2d70e5de92cee6c4f91cffa7a6 [at lines 899-905](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/master/Pv_mod/Intervention.cpp#L899) could be simplified into something like:
```
POP.people[n].PQ_treat = PQ_treat;
```
To be discussed with @mwhite before making changes here, because this could be to keep the code consistent across interventions.
Again, just keeping this issue opened for now as a reference for future code refactoring if needed.https://gitlab.pasteur.fr/mwhite/pv_mod/-/issues/2Review G6PD inclusion/exclusion implementaion for TQ and PQ2019-06-24T15:12:32+02:00Thomas OBADIAReview G6PD inclusion/exclusion implementaion for TQ and PQCurrently (commit d51e87db2c65ee2d70e5de92cee6c4f91cffa7a6), G6PD activity-based decisions of giving/not giving PQ or TQ are only checking if the activity is below a fixed threshold ([4.0 for PQ and TQ](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/master/Pv_mod/Intervention.cpp#L682)).
Yet, in the model parameters, G6PD mean and standard deviations are passed for normal/def-heterozygous/def-homozygous persons. These should be used instead.
Just keeping this issue opened here so I can address that at a later stage, maybe based on further developments already done by by @nnekkabCurrently (commit d51e87db2c65ee2d70e5de92cee6c4f91cffa7a6), G6PD activity-based decisions of giving/not giving PQ or TQ are only checking if the activity is below a fixed threshold ([4.0 for PQ and TQ](https://gitlab.pasteur.fr/mwhite/pv_mod/blob/master/Pv_mod/Intervention.cpp#L682)).
Yet, in the model parameters, G6PD mean and standard deviations are passed for normal/def-heterozygous/def-homozygous persons. These should be used instead.
Just keeping this issue opened here so I can address that at a later stage, maybe based on further developments already done by by @nnekkab