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"]))
Exemple #2
0
def test_normal(rnd, loc=0, scale=1):
    #normal random variate generator
    normal_dist = RVGs.Normal(loc, scale)

    # obtain samples
    samples = get_samples(normal_dist, rnd)

    # report mean and variance
    print_test_results('Normal', samples, expectation=loc, variance=scale**2)
Exemple #3
0
    def __init__(self, err_sigma):
        """"
        :param err_sigma is the standard deviation of noise term
        """

        SimModel.__init__(self)

        # create a normal distribution to model noise
        self._err = RVGs.Normal(loc=0, scale=err_sigma)
Exemple #4
0
    def __init__(self):

        self.hospdaycost = None
        self.fadcost = None
        self.sadcost = None
        self.icucost = None


        self.sequtility = None # annual state utilities
        self.hosputility = None
        self.rsvinfection = None   # list of dirichlet distributions for transition probabilities
        self.lnRelativeRiskRVG = None
        self.probnhpd = None
        # normal distribution for the natural log of the treatment relative risk


        self.probhops = None
        self.probICU = None
        self.probhpd = None
        self.probseq = None

        self.weight = None
        self.hoptime = None
        self.icutime = None

        # hospital cost
        # per unit P cost


        # utility
        hua = MM.get_beta_params(mean=Data.hospital_utility, st_dev=0.07)

        self.hosputility = RVGs.Beta(a=hua["a"], b=hua["b"])

        nhu = MM.get_beta_params(mean=Data.rsv_nh_u, st_dev=0.07)
        # append the distribution
        self.rsvinfection = RVGs.Beta(a=nhu["a"], b=nhu["b"])

        seq = MM.get_beta_params(mean=Data.Asthma_utility, st_dev=0.07)
        # append the distribution
        self.sequtility = RVGs.Beta(a=seq["a"], b=seq["b"])


        ##### cost

        hos = MM.get_gamma_params(mean=Data.cost_hos, st_dev=149)
        # append the distribution
        self.hospdaycost = RVGs.Gamma(a=hos["a"],
                               loc=0,
                               scale=hos["scale"])

        icu = MM.get_gamma_params(mean=Data.ICU, st_dev=271)
        # append the distribution
        self.icucost = RVGs.Gamma(a=icu["a"],
                               loc=0,
                               scale=icu["scale"])

        sad = MM.get_gamma_params(mean=Data.sadcost, st_dev=5)
        # append the distribution
        self.sadcost = RVGs.Gamma(a=sad["a"],
                                  loc=0,
                                  scale=icu["scale"])
        fad = MM.get_gamma_params(mean=Data.fadcost, st_dev=6)
        # append the distribution
        self.fadcost = RVGs.Gamma(a=fad["a"],
                                  loc=0,
                                  scale=icu["scale"])

        ##### prob

        hp = MM.get_beta_params(mean=Data.hos_rate, st_dev=0.023)
        # append the distribution
        self.probhops = RVGs.Beta(a=hp["a"], b=hp["b"])


        hu = MM.get_beta_params(mean=Data.prob_ICU, st_dev=0.0967)
        # append the distribution
        self.probICU = RVGs.Beta(a=hu["a"], b=hu["b"])

        dea = MM.get_beta_params(mean=Data.Hos_MORTALITY_PROB, st_dev=0.0253)
        # append the distribution
        self.probhpd = RVGs.Beta(a=dea["a"], b=dea["b"])

        se = MM.get_beta_params(mean=Data.prob_seq, st_dev=0.115)
        # append the distribution
        self.probseq = RVGs.Beta(a=se["a"], b=se["b"])

        de = MM.get_beta_params(mean=Data.death_rate, st_dev=0.0004836235)
        self.probnhpd = RVGs.Beta(a=de["a"], b=de["b"])


        ### stay time

        hoss = MM.get_gamma_params(mean=Data.hoptime, st_dev=3.1)
        # append the distribution
        self.hoptime = RVGs.Gamma(a=hoss["a"],
                                      loc=0,
                                      scale=hoss["scale"])

        ic = MM.get_gamma_params(mean=Data.icutime, st_dev=3.8)
        # append the distribution
        self.icutime = RVGs.Gamma(a=ic["a"],
                                  loc=0,
                                  scale=ic["scale"])

        ## weight

        we = MM.get_gamma_params(mean=Data.weight, st_dev=392)
        # append the distribution
        self.weight = RVGs.Gamma(a=we["a"],
                                      loc=0,
                                      scale=we["scale"])

        rr_ci = [0.181, 0.634]   # 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(0.453)
        # 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)
# 11 LogNormal
dist = RVGs.LogNormal(s=1, loc=1, scale=2)
dat_lognorm = np.array(get_samples(dist, np.random))  # mean, sigma
dictResults = Fit.fit_lognorm(dat_lognorm, 'Data',
                              fixed_location=1)  # fit (scale=exp(mean))
print("Fitting LogNormal:", dictResults)

# 12 NegativeBinomial
dist = RVGs.NegativeBinomial(3, 0.3, 1)
dat_neg_bin = np.array(get_samples(dist, np.random))  # mean, sigma
dictResults = Fit.fit_negative_binomial(dat_neg_bin, 'Data', fixed_location=1)
print("Fitting NegativeBinomial:", dictResults)

# 13 Normal
dist = RVGs.Normal(0, 1)
dat_norm = np.array(get_samples(dist, np.random))  # mean, sigma
dictResults = Fit.fit_normal(dat_norm, 'Data')  # fit
print("Fitting Normal:", dictResults)

# 14 Triangular
dist = RVGs.Triangular(0.5, loc=1, scale=2)
dat_tri = np.array(get_samples(dist, np.random))
dictResults = Fit.fit_triang(dat_tri, 'Data', fixed_location=1)  # fit
print("Fitting Triangular:", dictResults)

# 15 Uniform
dist = RVGs.Uniform(0, 1)
dat_unif = np.array(get_samples(dist, np.random))  # mean, sigma
dictResults = Fit.fit_uniform(dat_unif, 'Data')  # fit
print("Fitting Uniform:", dictResults)