Exemple #1
0
    def __init__(self, diagnostic):

        self.diagnostic = diagnostic
        self.probInfectedRVG = None  # list of dirichlet distributions for moving out of the infected state
        self.probAlphaRVG = None  # list of beta distributions for the alpha probability if the diagnostic test is NSB
        self.weeklyStateCostRVG = [
        ]  # list of gamma distributions for the annual cost of states
        self.singleStateCostRVG = [
        ]  # list of gamma distributions for the single cost of states

        # create Dirichlet distributions for transition probabilities
        self.probInfectedRVG = RVGs.Dirichlet(a=[
            Data.P_INFECTED_CLEARED, Data.P_INFECTED_TBD, Data.P_INFECTED_TBM
        ])

        # crate beta distribution for the alpha probability
        if self.diagnostic == Diagnostic.SOC:
            fit_output = MM.get_beta_params(mean=Data.P_DX_SOC,
                                            st_dev=Data.P_DX_SOC / 5)
        else:
            fit_output = MM.get_beta_params(mean=Data.P_DX_NSB,
                                            st_dev=Data.P_DX_NSB / 5)

        self.probAlphaRVG = RVGs.Beta(a=fit_output["a"], b=fit_output["b"])

        # create gamma distributions for annual state cost
        for cost in Data.WEEKLY_STATE_COST:
            # if cost is zero, add a constant 0, otherwise add a gamma distribution
            if cost == 0:
                self.weeklyStateCostRVG.append(RVGs.Constant(value=0))
            else:
                # find shape and scale of the assumed gamma distribution
                # no data available to estimate the standard deviation, so we assumed st_dev=cost / 5
                fit_output = MM.get_gamma_params(mean=cost, st_dev=cost / 5)
                # append the distribution
                self.weeklyStateCostRVG.append(
                    RVGs.Gamma(a=fit_output["a"],
                               loc=0,
                               scale=fit_output["scale"]))

        # create gamma distributions for single state cost
        if self.diagnostic == Diagnostic.SOC:
            single_cost = Data.SOC_ONE_TIME_COST
        else:
            single_cost = Data.NSB_ONE_TIME_COST

        for cost in single_cost:
            # if cost is zero, add a constant 0, otherwise add a gamma distribution
            if cost == 0:
                self.singleStateCostRVG.append(RVGs.Constant(value=0))
            else:
                # find shape and scale of the assumed gamma distribution
                # no data available to estimate the standard deviation, so we assumed st_dev=cost / 5
                fit_output = MM.get_gamma_params(mean=cost, st_dev=cost / 5)
                # append the distribution
                self.singleStateCostRVG.append(
                    RVGs.Gamma(a=fit_output["a"],
                               loc=0,
                               scale=fit_output["scale"]))
    def __init__(self, therapy):

        self.therapy = therapy
        self.probMatrixRVG = [
        ]  # list of dirichlet distributions for transition probabilities
        self.lnRelativeRiskRVG = None  # normal distribution for the natural log of the treatment relative risk
        self.annualStateCostRVG = [
        ]  # list of gamma distributions for the annual cost of states
        self.annualStateUtilityRVG = [
        ]  # list of beta distributions for the annual utility of states

        # create Dirichlet distributions for transition probabilities
        j = 0
        for prob in Data.PROB_MATRIX:
            self.probMatrixRVG.append(RVGs.Dirichlet(a=prob[j:]))
            j += 1

        # treatment relative risk
        rr_ci = [1.2, 3]  # confidence interval of the treatment relative risk

        # find the mean and st_dev of the normal distribution assumed for ln(RR)
        # sample mean ln(RR)
        mean_ln_rr = math.log(Data.TREATMENT_RR)
        # sample standard deviation of ln(RR)
        std_ln_rr = \
            (math.log(rr_ci[1]) - math.log(rr_ci[0])) / (2 * stat.norm.ppf(1 - 0.05 / 2))
        # create a normal distribution for ln(RR)
        self.lnRelativeRiskRVG = RVGs.Normal(loc=mean_ln_rr, scale=std_ln_rr)

        # create gamma distributions for annual state cost
        for cost in Data.ANNUAL_STATE_COST_NO:

            # if cost is zero, add a constant 0, otherwise add a gamma distribution
            if cost == 0:
                self.annualStateCostRVG.append(RVGs.Constant(value=0))
            else:
                # find shape and scale of the assumed gamma distribution
                # no data available to estimate the standard deviation, so we assumed st_dev=cost / 5
                fit_output = MM.get_gamma_params(mean=cost, st_dev=cost / 5)
                # append the distribution
                self.annualStateCostRVG.append(
                    RVGs.Gamma(a=fit_output["a"],
                               loc=0,
                               scale=fit_output["scale"]))

        # create beta distributions for annual state utility
        for utility in Data.ANNUAL_STATE_UTILITY_0:
            # if utility is zero, add a constant 0, otherwise add a beta distribution
            if utility == 0:
                self.annualStateCostRVG.append(RVGs.Constant(value=0))
            else:
                # find alpha and beta of the assumed beta distribution
                # no data available to estimate the standard deviation, so we assumed st_dev=cost / 4
                fit_output = MM.get_beta_params(mean=utility,
                                                st_dev=utility / 4)
                # append the distribution
                self.annualStateUtilityRVG.append(
                    RVGs.Beta(a=fit_output["a"], b=fit_output["b"]))