def update(self, k, current_state, next_state):
        """ updates the discounted total cost and health utility
        :param k: simulation time step
        :param current_state: current health state
        :param next_state: next health state
        """

        # update cost
        cost = 0.5 * (self.params.annualStateCosts[current_state.value] +
                      self.params.annualStateCosts[next_state.value])
        # update utility
        utility = 0.5 * (self.params.annualStateUtilities[current_state.value]
                         + self.params.annualStateUtilities[next_state.value])

        # add the cost of treatment
        # if HIV death will occur, add the cost for half-year of treatment
        if next_state == HealthStates.HIV_DEATH:
            cost += 0.5 * self.params.annualTreatmentCost
        else:
            cost += 1 * self.params.annualTreatmentCost

        # update total discounted cost and utility (corrected for the half-cycle effect)
        self.totalDiscountedCost += Econ.pv_single_payment(
            payment=cost,
            discount_rate=self.params.discountRate / 2,
            discount_period=2 * k + 1)
        self.totalDiscountedUtility += Econ.pv_single_payment(
            payment=utility,
            discount_rate=self.params.discountRate / 2,
            discount_period=2 * k + 1)
Example #2
0
    def update(self, t, current_state, next_state):

        cost = 0.5 * (self.params.annualStateCosts[current_state.value] +
                      self.params.annualStateCosts[next_state.value])

        utility = 0.5 * (self.params.annualStateUtilities[current_state.value]
                         + self.params.annualStateUtilities[next_state.value])

        self.totalDiscountedCost += Econ.pv_single_payment(
            payment=cost,
            discount_rate=self.params.discountRate / 2,
            discount_period=2 * t + 1)
        self.totalDiscountedUtility += Econ.pv_single_payment(
            payment=utility,
            discount_rate=self.params.discountRate / 2,
            discount_period=2 * t + 1)
Example #3
0
    def update(self, time, current_state, next_state):

        # cost (per unit of time) during the period since the last recording until now
        cost = self.params.annualStateCosts[current_state.value]
        if current_state == HealthStates.POST_STROKE:
            cost += self.params.annuaAntiCoagCost

        # discounted cost and utility (continuously compounded)
        discounted_cost = Econ.pv_continuous_payment(payment=cost,
                                                     discount_rate=self.params.discountRate,
                                                     discount_period=(self.tLastRecorded, time))

        # add discounted stoke cost, if stroke occurred
        if next_state == HealthStates.STROKE:
            discounted_cost += Econ.pv_single_payment(payment=self.params.strokeCost,
                                                      discount_rate=self.params.discountRate,
                                                      discount_period=time,
                                                      discount_continuously=True)

        # utility (per unit of time) during the period since the last recording until now
        utility = self.params.annualStateUtilities[current_state.value]
        discounted_utility = Econ.pv_continuous_payment(payment=utility,
                                                        discount_rate=self.params.discountRate,
                                                        discount_period=(self.tLastRecorded, time))

        # update total discounted cost and utility
        self.totalDiscountedCost += discounted_cost
        self.totalDiscountedUtility += discounted_utility

        # update the time since last recording to the current time
        self.tLastRecorded = time
Example #4
0
import SimPy.EconEval as Econ


print('Present value of $10 collected in year 20 at discount rate 5%:')
print(Econ.pv_single_payment(payment=10, discount_rate=0.05, discount_period=20))

print('\nPresent value of $10 collected in year 20 at discount rate 5% (discounted continuously):')
print('These 2 numbers should be almost the same:')
print(Econ.pv_single_payment(payment=10, discount_rate=0.05,
                             discount_period=20, discount_continuously=True))
print(Econ.pv_single_payment(payment=10, discount_rate=0.05 / 100,
                             discount_period=20 * 100, discount_continuously=False))

print('\nPresent value of a continuous payment of $10 over the period [10, 20] at discount rate 5%:')
print(Econ.pv_continuous_payment(payment=10, discount_rate=0.05, discount_period=(10, 20)))
print('\nPresent value of a continuous payment of $10 over the period [10, 20] at discount rate 0%:')
print(Econ.pv_continuous_payment(payment=10, discount_rate=0, discount_period=(10, 20)))

print('\nEquivalent annual value of $50 over 10 years at discount rate 5%:')
print(Econ.equivalent_annual_value(present_value=50, discount_rate=0.05, discount_period=10))