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"]))
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)
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)
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)