Example #1
0
    def test_baseline_gcp(self):
        # check that all of the random elements have been removed for testing...
        self.assertEqual(
            GCPModel().get_risk_for_person(person=self._test_case_one,
                                           test=True),
            GCPModel().get_risk_for_person(person=self._test_case_one,
                                           test=True),
        )

        # this is for the first person in teh spreadsheet (1569nomas)...comparator is GCP + backing out the cohort effect (NOMAS)
        self.assertAlmostEqual(
            64.45419405 - 2.7905,
            GCPModel().get_risk_for_person(person=self._test_case_one,
                                           test=True),
            places=1,
        )

        # this is for the 2nd person in the spreadhsheet (204180409594cardia)...comparabor is GCP margin + backing out the cohort effect (cardia)
        self.assertAlmostEqual(
            50.01645213 + 1.3320,
            GCPModel().get_risk_for_person(person=self._test_case_two,
                                           test=True),
            places=1,
        )

        # this is for the the first black person in the spreadsheet (J150483aric)...comparator is GCP + no cohort effect (ARIC)
        self.assertAlmostEqual(
            42.99471241,
            GCPModel().get_risk_for_person(person=self._test_case_three,
                                           test=True),
            places=1,
        )
def init_vectorized_population_dataframe(person_list: List[Person],
                                         *,
                                         with_base_gcp=False):
    if with_base_gcp:
        gcp_model = GCPModel()
        for p in person_list:
            if len(p._gcp) == 0:
                base_gcp = gcp_model.get_risk_for_person(p)
                p._gcp.append(base_gcp)
    people = pd.Series(person_list)
    population = Population(people)
    return population.get_people_current_state_and_summary_as_dataframe()
    def get_or_init_population_dataframe(cls):
        if VectorizedTestFixture._population_dataframe is None:
            test_person = Person(
                age=71,
                gender=NHANESGender.MALE,
                raceEthnicity=NHANESRaceEthnicity.NON_HISPANIC_WHITE,
                sbp=144.667,
                dbp=52.6667,
                a1c=9.5,
                hdl=34,
                totChol=191,
                bmi=30.05,
                ldl=110.0,
                trig=128,
                waist=45,
                anyPhysicalActivity=0,
                education=Education.COLLEGEGRADUATE,
                smokingStatus=SmokingStatus.FORMER,
                alcohol=AlcoholCategory.NONE,
                antiHypertensiveCount=0,
                statin=0,
                otherLipidLoweringMedicationCount=0,
                creatinine=0.6,
                initializeAfib=(lambda _: None),
                randomEffects={"gcp": 0},
            )
            base_gcp = GCPModel().get_risk_for_person(test_person)
            test_person._gcp.append([base_gcp])

            VectorizedTestFixture._population_dataframe = init_vectorized_population_dataframe(
                [test_person])
        return VectorizedTestFixture._population_dataframe
Example #4
0
    def test_gcp_random_effect_independent_per_person(self):
        expected_case_one_gcp = 66.66369405
        expected_case_two_gcp = 51.34845213
        self._test_case_one._randomEffects["gcp"] = 5
        gcp_model = GCPModel()

        actual_case_one_gcp = gcp_model.get_risk_for_person(
            self._test_case_one, test=True)
        actual_case_two_gcp = gcp_model.get_risk_for_person(
            self._test_case_two, test=True)

        self.assertAlmostEqual(expected_case_one_gcp,
                               actual_case_one_gcp,
                               places=1)
        self.assertAlmostEqual(expected_case_two_gcp,
                               actual_case_two_gcp,
                               places=1)
Example #5
0
 def test_gcp_random_effect(self):
     self._test_case_one._randomEffects["gcp"] = 5
     self.assertAlmostEqual(
         64.45419405 - 2.7905 + 5,
         GCPModel().get_risk_for_person(person=self._test_case_one,
                                        years=1,
                                        test=True),
         places=1,
     )
Example #6
0
    def test_dont_advance_dead_people_in_population(self):
        # add GCP to advance successfully
        joe_base_gcp = GCPModel().get_risk_for_person(self.joe)
        self.joe._gcp.append(joe_base_gcp)
        # use ClonePopulation: sets up repositories, populationIndex, and 2+ people to workaround
        self.dummy_population = ClonePopulation(self.joe, 2)
        initial_joe = self.dummy_population._people.iloc[0]
        initial_joe._alive.append(False)
        expected_risk_factor_length = len(initial_joe._sbp)

        # this should NOT raise an error if it is (correctly) not trying to
        #  advance on poor dead, joe
        self.dummy_population.advance_vectorized(1)

        advanced_joe = self.dummy_population._people.iloc[0]
        self.assertEqual(expected_risk_factor_length, len(advanced_joe._sbp))
Example #7
0
 def __init__(self):
     super(OutcomeModelRepository, self).__init__()
     self._models = {}
     self._models[OutcomeModelType.GLOBAL_COGNITIVE_PERFORMANCE] = GCPModel()
Example #8
0
 def get_gcp_vectorized(self, person):
     return GCPModel().get_risk_for_person(person,
                                           vectorized=True,
                                           test=True)
Example #9
0
 def get_gcp(self, person):
     return GCPModel().get_risk_for_person(person, test=True)
    def __init__(self):
        self.mi_case_fatality = CVOutcomeDetermination.default_mi_case_fatality
        self.secondary_mi_case_fatality = CVOutcomeDetermination.default_secondary_mi_case_fatality
        self.stroke_case_fatality = CVOutcomeDetermination.default_stroke_case_fatality
        self.secondary_stroke_case_fatality = (
            CVOutcomeDetermination.default_secondary_stroke_case_fatality)
        self.secondary_prevention_multiplier = (
            CVOutcomeDetermination.default_secondary_prevention_multiplier)

        self.outcomeDet = CVOutcomeDetermination(
            self.mi_case_fatality,
            self.stroke_case_fatality,
            self.secondary_mi_case_fatality,
            self.secondary_stroke_case_fatality,
            self.secondary_prevention_multiplier,
        )

        # variable used in testing to control whether a patient will have a stroke or mi
        self.manualStrokeMIProbability = None

        self._models = {}
        femaleCVCoefficients = {
            "lagAge": 0.106501,
            "black": 0.432440,
            "lagSbp#lagSbp": 0.000056,
            "lagSbp": 0.017666,
            "current_bp_treatment": 0.731678,
            "current_diabetes": 0.943970,
            "current_smoker": 1.009790,
            "lagAge#black": -0.008580,
            "lagSbp#current_bp_treatment": -0.003647,
            "lagSbp#black": 0.006208,
            "black#current_bp_treatment": 0.152968,
            "lagAge#lagSbp": -0.000153,
            "black#current_diabetes": 0.115232,
            "black#current_smoker": -0.092231,
            "lagSbp#black#current_bp_treatment": -0.000173,
            "lagAge#lagSbp#black": -0.000094,
            "Intercept": -12.823110,
        }

        maleCVCoefficients = {
            "lagAge": 0.064200,
            "black": 0.482835,
            "lagSbp#lagSbp": -0.000061,
            "lagSbp": 0.038950,
            "current_bp_treatment": 2.055533,
            "current_diabetes": 0.842209,
            "current_smoker": 0.895589,
            "lagAge#black": 0,
            "lagSbp#current_bp_treatment": -0.014207,
            "lagSbp#black": 0.011609,
            "black#current_bp_treatment": -0.119460,
            "lagAge#lagSbp": 0.000025,
            "black#current_diabetes": -0.077214,
            "black#current_smoker": -0.226771,
            "lagSbp#black#current_bp_treatment": 0.004190,
            "lagAge#lagSbp#black": -0.000199,
            "Intercept": -11.679980,
        }

        self._models[OutcomeModelType.CARDIOVASCULAR] = {
            "female":
            ASCVDOutcomeModel(
                RegressionModel(
                    coefficients=femaleCVCoefficients,
                    coefficient_standard_errors={
                        key: 0
                        for key in femaleCVCoefficients
                    },
                    residual_mean=0,
                    residual_standard_deviation=0,
                ),
                tot_chol_hdl_ratio=0.151318,
                black_race_x_tot_chol_hdl_ratio=0.070498,
            ),
            "male":
            ASCVDOutcomeModel(
                RegressionModel(
                    coefficients=maleCVCoefficients,
                    coefficient_standard_errors={
                        key: 0
                        for key in maleCVCoefficients
                    },
                    residual_mean=0,
                    residual_standard_deviation=0,
                ),
                tot_chol_hdl_ratio=0.193307,
                black_race_x_tot_chol_hdl_ratio=-0.117749,
            ),
        }
        self._models[
            OutcomeModelType.GLOBAL_COGNITIVE_PERFORMANCE] = GCPModel()
        self._models[OutcomeModelType.DEMENTIA] = DementiaModel()

        # This represents non-cardiovascular mortality..
        nonCVModelSpec = load_model_spec("nhanesMortalityModelLogit")
        mortModel = StatsModelLogisticRiskFactorModel(
            RegressionModel(**nonCVModelSpec), False)
        # Recalibrate mortalitly model to align with life table data, as explored in notebook
        # buildNHANESMortalityModel
        mortModel.non_intercept_params[
            "age"] = mortModel.non_intercept_params["age"] * -1
        mortModel.non_intercept_params["squareAge"] = (
            mortModel.non_intercept_params["squareAge"] * 4)
        self._models[OutcomeModelType.NON_CV_MORTALITY] = mortModel
 def get_initializers(self):
     return {
         "_gcp": GCPModel().get_risk_for_person,
         "_qalys": QALYAssignmentStrategy().get_next_qaly,
     }
    def __init__(self):
        self.mi_case_fatality = CVOutcomeDetermination.default_mi_case_fatality
        self.secondary_mi_case_fatality = CVOutcomeDetermination.default_secondary_mi_case_fatality
        self.stroke_case_fatality = CVOutcomeDetermination.default_stroke_case_fatality
        self.secondary_stroke_case_fatality = CVOutcomeDetermination.default_secondary_stroke_case_fatality
        self.secondary_prevention_multiplier = CVOutcomeDetermination.default_secondary_prevention_multiplier

        # variable used in testing to control whether a patient will have a stroke or mi
        self.manualStrokeMIProbability = None

        self._models = {}
        femaleCVCoefficients = {
            'lagAge': 0.106501,
            'black': 0.432440,
            'lagSbp#lagSbp': 0.000056,
            'lagSbp': 0.017666,
            'current_bp_treatment': 0.731678,
            'current_diabetes': 0.943970,
            'current_smoker': 1.009790,
            'lagAge#black': -0.008580,
            'lagSbp#current_bp_treatment': -0.003647,
            'lagSbp#black': 0.006208,
            'black#current_bp_treatment': 0.152968,
            'lagAge#lagSbp': -0.000153,
            'black#current_diabetes': 0.115232,
            'black#current_smoker': -0.092231,
            'lagSbp#black#current_bp_treatment': -0.000173,
            'lagAge#lagSbp#black': -0.000094,
            'Intercept': -12.823110
        }

        maleCVCoefficients = {
            'lagAge': 0.064200,
            'black': 0.482835,
            'lagSbp#lagSbp': -0.000061,
            'lagSbp': 0.038950,
            'current_bp_treatment': 2.055533,
            'current_diabetes': 0.842209,
            'current_smoker': 0.895589,
            'lagAge#black': 0,
            'lagSbp#current_bp_treatment': -0.014207,
            'lagSbp#black': 0.011609,
            'black#current_bp_treatment': -0.119460,
            'lagAge#lagSbp': 0.000025,
            'black#current_diabetes': -0.077214,
            'black#current_smoker': -0.226771,
            'lagSbp#black#current_bp_treatment': 0.004190,
            'lagAge#lagSbp#black': -0.000199,
            'Intercept': -11.679980
        }

        self._models[OutcomeModelType.CARDIOVASCULAR] = {
            "female":
            ASCVDOutcomeModel(RegressionModel(
                coefficients=femaleCVCoefficients,
                coefficient_standard_errors={
                    key: 0
                    for key in femaleCVCoefficients
                },
                residual_mean=0,
                residual_standard_deviation=0),
                              tot_chol_hdl_ratio=0.151318,
                              black_race_x_tot_chol_hdl_ratio=0.070498),
            "male":
            ASCVDOutcomeModel(RegressionModel(coefficients=maleCVCoefficients,
                                              coefficient_standard_errors={
                                                  key: 0
                                                  for key in maleCVCoefficients
                                              },
                                              residual_mean=0,
                                              residual_standard_deviation=0),
                              tot_chol_hdl_ratio=0.193307,
                              black_race_x_tot_chol_hdl_ratio=-0.117749)
        }
        self._models[
            OutcomeModelType.GLOBAL_COGNITIVE_PERFORMANCE] = GCPModel()

        # This represents non-cardiovascular mortality..
        self._models[
            OutcomeModelType.NON_CV_MORTALITY] = self.initialize_cox_model(
                "nhanesMortalityModel")