Financial risk protection (catastrophic health expenditures and poverty averted)
Distributional consequences across wealth quintiles
Equity weights to value health gains among the poor
Insurance value (risk premium reduction)
1.1 Key ECEA Parameters
Parameter Value Source Discount rate (costs & DALYs) 3% per year WHO guidelines Catastrophic threshold 10% of income WHO Poverty line 785/year(785/year(2.15/day) World Bank Risk aversion coefficient (r) 3 Arrow-Pratt Equity weight elasticity (η) 1.0 Verguet et al. Kenya GDP per capita (WTP) $2,090 World Bank
Clear Workspace
1.2. Load Required Libraries
1.3 Wealth Quintile Income Distribution (Kenya)
# Quintile income data
quintile_income <- data.frame(
Wealth_Quintile = c("Q1_Poorest", "Q2", "Q3", "Q4", "Q5_Richest"),
Mean_Income_USD = c(420, 850, 1450, 2650, 5900),
Income_Label = c("Poorest", "Second", "Middle", "Fourth", "Richest")
)
knitr::kable(quintile_income, caption = "Mean Annual Income by Wealth Quintile (Kenya)")| Wealth_Quintile | Mean_Income_USD | Income_Label |
|---|---|---|
| Q1_Poorest | 420 | Poorest |
| Q2 | 850 | Second |
| Q3 | 1450 | Middle |
| Q4 | 2650 | Fourth |
| Q5_Richest | 5900 | Richest |
2 Load the data
# Path to the saved analysis data
data_path <- "/Users/jamesoguta/Documents/James Oguta/PhD Thesis_James Oguta/James Oguta Model/Kenya CVD Model/KenyaCVDModelFinal/inst/rmarkdown/templates/equity_analysis/skeleton/kenya_equity_analysis_data.rds"
# Load the data
df_compare <- readRDS(data_path)
# Verify the data loaded correctly
cat("\n=== DATA LOADED SUCCESSFULLY ===\n")##
## === DATA LOADED SUCCESSFULLY ===
## Number of rows: 100000
## Number of columns: 45
##
## Column names:
## [1] "individual_id" "total_costs_Emp" "total_dalys_Emp"
## [4] "life_years_Emp" "cycles_survived_Emp" "alive_at_end_Emp"
## [7] "had_morbidity_Emp" "total_costs_UC" "total_dalys_UC"
## [10] "life_years_UC" "cycles_survived_UC" "alive_at_end_UC"
## [13] "had_morbidity_UC" "age" "wealth"
## [16] "region" "bmi" "sbp"
## [19] "tc" "htn" "htn_grade"
## [22] "htn_treatment" "dm" "dm_treatment"
## [25] "smk" "female" "male"
## [28] "subgroup" "mi_risk_annual" "stroke_risk_annual"
## [31] "total_cvd_annual" "cvd_risk_10yr_lab" "cvd_risk_10yr_no_lab"
## [34] "wealth_quintile_num" "wealth_quintile" "sex"
## [37] "delta_costs" "delta_dalys" "dalys_averted"
## [40] "delta_life_years" "life_years_gained" "delta_survival"
## [43] "delta_mortality" "delta_morbidity" "wealth_quintile_char"
# Calculate overall totals if not already present
if (!exists("total_dalys_averted")) {
total_dalys_averted <- sum(df_compare$dalys_averted, na.rm = TRUE)
}
if (!exists("total_net_cost")) {
total_net_cost <- sum(df_compare$delta_costs, na.rm = TRUE)
}
# Extract wealth results if needed
if (!exists("wealth_results")) {
wealth_results <- df_compare %>%
group_by(wealth_quintile) %>%
summarise(
n = n(),
dalys_averted = mean(dalys_averted, na.rm = TRUE),
dalys_ci_lower = dalys_averted - 1.96 * sd(dalys_averted, na.rm = TRUE) / sqrt(n()),
dalys_ci_upper = dalys_averted + 1.96 * sd(dalys_averted, na.rm = TRUE) / sqrt(n()),
delta_costs = mean(delta_costs, na.rm = TRUE),
costs_ci_lower = delta_costs - 1.96 * sd(delta_costs, na.rm = TRUE) / sqrt(n()),
costs_ci_upper = delta_costs + 1.96 * sd(delta_costs, na.rm = TRUE) / sqrt(n())
) %>%
mutate(
wealth_quintile = factor(wealth_quintile,
levels = c("Q1_Poorest", "Q2", "Q3", "Q4", "Q5_Richest"))
) %>%
arrange(wealth_quintile)
}
cat("\n✓ Data loaded successfully\n")##
## ✓ Data loaded successfully
ECEA Methodology (Verguet et al. 2016) The ECEA framework examines four domains across wealth quintiles:
Health gains (DALYs averted)
Private expenditures averted (out-of-pocket costs reduced)
Financial risk protection (catastrophic and poverty cases averted)
Policy costs (net cost to government)
3.1 Domain 1: Health Gains
# Health gains by wealth quintile
health_gains <- wealth_results %>%
select(Wealth_Quintile = wealth_quintile,
DALYs_Averted = dalys_averted,
CI_Lower = dalys_ci_lower,
CI_Upper = dalys_ci_upper)
knitr::kable(health_gains, caption = "Health Gains (DALYs Averted) by Wealth Quintile", digits = 6)| Wealth_Quintile | DALYs_Averted | CI_Lower | CI_Upper |
|---|---|---|---|
| Q1_Poorest | 0.099889 | NA | NA |
| Q2 | 0.111872 | NA | NA |
| Q3 | 0.117798 | NA | NA |
| Q4 | 0.126490 | NA | NA |
| Q5_Richest | 0.131233 | NA | NA |
3.2 Domain 2: Private Expenditures Averted Private expenditures averted represent the reduction in out-of-pocket payments for healthcare as a result of the intervention.
# Calculate private expenditures averted
df_ecea <- df_compare %>%
mutate(wealth_quintile_char = as.character(wealth_quintile)) %>%
left_join(quintile_income, by = c("wealth_quintile_char" = "Wealth_Quintile"))
private_expenditures <- df_ecea %>%
group_by(wealth_quintile_char) %>%
summarise(
Wealth_Quintile = first(wealth_quintile_char),
Mean_OOP_UC = mean(total_costs_UC, na.rm = TRUE),
Mean_OOP_Emp = mean(total_costs_Emp, na.rm = TRUE),
PE_Averted = Mean_OOP_UC - Mean_OOP_Emp,
Percent_Reduction = (Mean_OOP_UC - Mean_OOP_Emp) / Mean_OOP_UC * 100,
Total_PE_Averted = sum(total_costs_UC - total_costs_Emp, na.rm = TRUE)
) %>%
select(-wealth_quintile_char)
knitr::kable(private_expenditures, caption = "Private Expenditures Averted by Wealth Quintile", digits = 2)| Wealth_Quintile | Mean_OOP_UC | Mean_OOP_Emp | PE_Averted | Percent_Reduction | Total_PE_Averted |
|---|---|---|---|---|---|
| Q1_Poorest | 4098.29 | 4482.81 | -384.53 | -9.38 | -7018025 |
| Q2 | 4456.93 | 4889.15 | -432.21 | -9.70 | -10102138 |
| Q3 | 4805.75 | 5286.65 | -480.90 | -10.01 | -11189110 |
| Q4 | 5010.57 | 5510.23 | -499.65 | -9.97 | -11207219 |
| Q5_Richest | 5308.19 | 5867.48 | -559.28 | -10.54 | -7091150 |
3.3 Domain 3: Financial Risk Protection (FRP)
3.3.1 Catastrophic Health Expenditures Averted
A catastrophic health expenditure occurs when out-of-pocket payments exceed 10% of household income.
# Calculate catastrophic expenditures
CATASTROPHIC_THRESHOLD <- 0.10
df_ecea <- df_ecea %>%
mutate(
individual_income = Mean_Income_USD,
oop_Emp = total_costs_Emp,
oop_UC = total_costs_UC,
catastrophic_Emp = (oop_Emp / individual_income) > CATASTROPHIC_THRESHOLD,
catastrophic_UC = (oop_UC / individual_income) > CATASTROPHIC_THRESHOLD
)
catastrophic_averted <- df_ecea %>%
group_by(wealth_quintile_char) %>%
summarise(
Wealth_Quintile = first(wealth_quintile_char),
Catastrophic_Rate_UC = mean(catastrophic_UC, na.rm = TRUE) * 100,
Catastrophic_Rate_Emp = mean(catastrophic_Emp, na.rm = TRUE) * 100,
Catastrophic_Cases_Averted = sum(catastrophic_UC, na.rm = TRUE) -
sum(catastrophic_Emp, na.rm = TRUE),
Rate_Reduction = Catastrophic_Rate_UC - Catastrophic_Rate_Emp
) %>%
select(-wealth_quintile_char)
knitr::kable(catastrophic_averted, caption = "Catastrophic Health Expenditure Cases Averted", digits = 2)| Wealth_Quintile | Catastrophic_Rate_UC | Catastrophic_Rate_Emp | Catastrophic_Cases_Averted | Rate_Reduction |
|---|---|---|---|---|
| Q1_Poorest | 76.20 | 76.20 | 0 | 0.00 |
| Q2 | 79.22 | 79.22 | 0 | 0.00 |
| Q3 | 81.51 | 81.51 | 0 | 0.00 |
| Q4 | 81.85 | 82.00 | -34 | -0.15 |
| Q5_Richest | 83.15 | 83.56 | -51 | -0.40 |
3.3.2 Poverty Cases Averted
A poverty case occurs when out-of-pocket payments push a household below the poverty line.
# Poverty line ($2.15/day = $785/year)
POVERTY_LINE <- 785
df_ecea <- df_ecea %>%
mutate(
net_income_Emp = individual_income - oop_Emp,
net_income_UC = individual_income - oop_UC,
impoverished_Emp = (individual_income > POVERTY_LINE) & (net_income_Emp < POVERTY_LINE),
impoverished_UC = (individual_income > POVERTY_LINE) & (net_income_UC < POVERTY_LINE)
)
poverty_averted <- df_ecea %>%
group_by(wealth_quintile_char) %>%
summarise(
Wealth_Quintile = first(wealth_quintile_char),
Poverty_Rate_UC = mean(impoverished_UC, na.rm = TRUE) * 100,
Poverty_Rate_Emp = mean(impoverished_Emp, na.rm = TRUE) * 100,
Poverty_Cases_Averted = sum(impoverished_UC, na.rm = TRUE) -
sum(impoverished_Emp, na.rm = TRUE),
Rate_Reduction = Poverty_Rate_UC - Poverty_Rate_Emp
) %>%
select(-wealth_quintile_char)
knitr::kable(poverty_averted, caption = "Poverty Cases Averted by Wealth Quintile", digits = 2)| Wealth_Quintile | Poverty_Rate_UC | Poverty_Rate_Emp | Poverty_Cases_Averted | Rate_Reduction |
|---|---|---|---|---|
| Q1_Poorest | 0.00 | 0.00 | 0 | 0.00 |
| Q2 | 79.23 | 79.23 | 0 | 0.00 |
| Q3 | 78.32 | 79.02 | -164 | -0.70 |
| Q4 | 70.93 | 73.26 | -523 | -2.33 |
| Q5_Richest | 47.46 | 54.32 | -870 | -6.86 |
3.3.3 Money-Metric Value of Insurance (Risk Premium)
Following Arrow-Pratt theory, the value of insurance is the risk premium individuals are willing to pay to avoid financial uncertainty.
RISK_AVERSION <- 3 # Coefficient of relative risk aversion
df_ecea <- df_ecea %>%
mutate(
# Risk premium for each arm (simplified approximation)
risk_premium_UC = 0.5 * RISK_AVERSION * (oop_UC^2) / individual_income,
risk_premium_Emp = 0.5 * RISK_AVERSION * (oop_Emp^2) / individual_income,
# Insurance value = reduction in risk premium
insurance_value = pmax(0, risk_premium_UC - risk_premium_Emp)
)
insurance_summary <- df_ecea %>%
group_by(wealth_quintile_char) %>%
summarise(
Wealth_Quintile = first(wealth_quintile_char),
Mean_Insurance_Value = mean(insurance_value, na.rm = TRUE),
Total_Insurance_Value = sum(insurance_value, na.rm = TRUE),
Mean_Risk_Premium_UC = mean(risk_premium_UC, na.rm = TRUE),
Mean_Risk_Premium_Emp = mean(risk_premium_Emp, na.rm = TRUE)
) %>%
select(-wealth_quintile_char)
knitr::kable(insurance_summary, caption = "Insurance Value (Risk Premium Reduction) by Wealth Quintile", digits = 2)| Wealth_Quintile | Mean_Insurance_Value | Total_Insurance_Value | Mean_Risk_Premium_UC | Mean_Risk_Premium_Emp |
|---|---|---|---|---|
| Q1_Poorest | 13951.40 | 254627086 | 122729.81 | 139101.33 |
| Q2 | 8043.18 | 187993241 | 67435.49 | 76638.45 |
| Q3 | 5271.40 | 122649599 | 44348.79 | 50701.20 |
| Q4 | 3370.43 | 75598738 | 26022.98 | 29514.30 |
| Q5_Richest | 1555.61 | 19723611 | 12149.09 | 13944.43 |
3.4 Domain 4: Policy Costs
policy_costs <- df_compare %>%
group_by(wealth_quintile) %>%
summarise(
Wealth_Quintile = as.character(first(wealth_quintile)),
Total_Net_Cost = sum(delta_costs, na.rm = TRUE),
Mean_Net_Cost = mean(delta_costs, na.rm = TRUE),
Population = n()
) %>%
mutate(Cost_per_Person = Mean_Net_Cost)
knitr::kable(policy_costs, caption = "Policy Costs by Wealth Quintile", digits = 2)| wealth_quintile | Wealth_Quintile | Total_Net_Cost | Mean_Net_Cost | Population | Cost_per_Person |
|---|---|---|---|---|---|
| Q1_Poorest | Q1_Poorest | 7018025 | 384.53 | 18251 | 384.53 |
| Q2 | Q2 | 10102138 | 432.21 | 23373 | 432.21 |
| Q3 | Q3 | 11189110 | 480.90 | 23267 | 480.90 |
| Q4 | Q4 | 11207219 | 499.65 | 22430 | 499.65 |
| Q5_Richest | Q5_Richest | 7091150 | 559.28 | 12679 | 559.28 |
Following Verguet et al., we apply equity weights that give higher value to health gains among the poor:
Weight = (Poverty Line / Income)^η
where η = 1.0 (elasticity parameter)
EQUITY_ELASTICITY <- 1.0
df_ecea <- df_ecea %>%
mutate(
equity_weight = (POVERTY_LINE / individual_income)^EQUITY_ELASTICITY,
equity_weight = pmin(equity_weight, 5), # Cap at 5
equity_weight = pmax(equity_weight, 0.2), # Floor at 0.2
weighted_dalys = dalys_averted * equity_weight
)
weighted_summary <- df_ecea %>%
group_by(wealth_quintile_char) %>%
summarise(
Wealth_Quintile = first(wealth_quintile_char),
Equity_Weight = mean(equity_weight, na.rm = TRUE),
Unweighted_DALYs = mean(dalys_averted, na.rm = TRUE),
Weighted_DALYs = mean(weighted_dalys, na.rm = TRUE),
Equity_Ratio = Weighted_DALYs / Unweighted_DALYs
) %>%
select(-wealth_quintile_char)
knitr::kable(weighted_summary, caption = "Distributional Equity Weights by Wealth Quintile", digits = 3)| Wealth_Quintile | Equity_Weight | Unweighted_DALYs | Weighted_DALYs | Equity_Ratio |
|---|---|---|---|---|
| Q1_Poorest | 1.869 | 0.100 | 0.187 | 1.869 |
| Q2 | 0.924 | 0.112 | 0.103 | 0.924 |
| Q3 | 0.541 | 0.118 | 0.064 | 0.541 |
| Q4 | 0.296 | 0.126 | 0.037 | 0.296 |
| Q5_Richest | 0.200 | 0.131 | 0.026 | 0.200 |
total_catastrophic <- sum(catastrophic_averted$Catastrophic_Cases_Averted, na.rm = TRUE)
total_poverty <- sum(poverty_averted$Poverty_Cases_Averted, na.rm = TRUE)
total_insurance <- sum(insurance_summary$Total_Insurance_Value, na.rm = TRUE)
efficiency_metrics <- data.frame(
Metric = c(
"Cost per DALY averted",
"Cost per catastrophic case averted",
"Cost per poverty case averted",
"DALYs averted per $1,000",
"Catastrophic cases averted per $1,000",
"Poverty cases averted per $1,000"
),
Value = c(
sprintf("$%.0f", total_net_cost / total_dalys_averted),
sprintf("$%.0f", total_net_cost / total_catastrophic),
sprintf("$%.0f", total_net_cost / total_poverty),
sprintf("%.2f", total_dalys_averted / total_net_cost * 1000),
sprintf("%.2f", total_catastrophic / total_net_cost * 1000),
sprintf("%.2f", total_poverty / total_net_cost * 1000)
)
)
knitr::kable(efficiency_metrics, caption = "ECEA Efficiency Metrics")| Metric | Value |
|---|---|
| Cost per DALY averted | \(3990 | |Cost per catastrophic case averted |\)-548325 |
| Cost per poverty case averted | $-29934 |
| DALYs averted per $1,000 | 0.25 |
| Catastrophic cases averted per $1,000 | -0.00 |
| Poverty cases averted per $1,000 | -0.03 |
Figure 1: Health Gains and Private Expenditures Averted
# Prepare data for plotting
plot_data_health <- health_gains %>%
mutate(Type = "Health Gains", Value = DALYs_Averted)
plot_data_pe <- private_expenditures %>%
mutate(Type = "Private Expenditures Averted", Value = PE_Averted / 100)
fig1 <- ggplot(plot_data_health, aes(x = Wealth_Quintile, y = DALYs_Averted, fill = "Health Gains")) +
geom_bar(stat = "identity", alpha = 0.7, width = 0.4) +
geom_bar(data = plot_data_pe, aes(x = Wealth_Quintile, y = Value, fill = "Private Expenditures Averted"),
stat = "identity", alpha = 0.7, width = 0.4, position = position_nudge(x = 0.4)) +
scale_y_continuous(
name = "DALYs Averted",
sec.axis = sec_axis(~.*100, name = "Private Expenditures Averted ($)")
) +
scale_fill_manual(values = c("Health Gains" = "steelblue",
"Private Expenditures Averted" = "darkorange"),
name = "Domain") +
labs(x = "\nWealth Quintile", y = "DALYs Averted\n",
title = "A) Health Gains and Private Expenditures Averted") +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"), legend.position = "bottom")
print(fig1)
Figure 2: Financial Risk Protection Benefits
# Prepare FRP data
frp_data <- catastrophic_averted %>%
select(Wealth_Quintile, Catastrophic_Cases_Averted) %>%
mutate(Type = "Catastrophic Cases") %>%
bind_rows(
poverty_averted %>%
select(Wealth_Quintile, Poverty_Cases_Averted) %>%
mutate(Type = "Poverty Cases",
Catastrophic_Cases_Averted = Poverty_Cases_Averted)
) %>%
rename(Cases_Averted = Catastrophic_Cases_Averted)
fig2 <- ggplot(frp_data, aes(x = Wealth_Quintile, y = Cases_Averted, fill = Type)) +
geom_bar(stat = "identity", alpha = 0.7, position = position_dodge(0.8)) +
scale_fill_manual(values = c("Catastrophic Cases" = "darkred", "Poverty Cases" = "darkgreen"),
name = "FRP Metric") +
labs(x = "\nWealth Quintile", y = "Cases Averted\n",
title = "B) Financial Risk Protection (FRP) Benefits") +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"), legend.position = "bottom")
print(fig2)
Figure 3: Insurance Value by Wealth Quintile
fig3 <- insurance_summary %>%
ggplot(aes(x = Wealth_Quintile, y = Mean_Insurance_Value, fill = Wealth_Quintile)) +
geom_bar(stat = "identity", alpha = 0.7) +
labs(x = "\nWealth Quintile", y = "Mean Insurance Value ($)\n",
title = "C) Money-Metric Value of Insurance (Risk Premium)") +
scale_fill_brewer(palette = "RdYlGn", direction = -1) +
theme_minimal(base_size = 12) +
theme(legend.position = "none", plot.title = element_text(face = "bold"))
print(fig3)
Figure 4: Distributional Equity Weights
fig4 <- weighted_summary %>%
ggplot(aes(x = Wealth_Quintile, y = Equity_Weight, fill = Wealth_Quintile)) +
geom_bar(stat = "identity", alpha = 0.7) +
geom_text(aes(label = sprintf("%.2f", Equity_Weight)), vjust = -0.5, size = 4) +
labs(x = "\nWealth Quintile", y = "Mean Equity Weight\n",
title = "D) Distributional Equity Weights") +
scale_fill_brewer(palette = "RdYlGn", direction = -1) +
theme_minimal(base_size = 12) +
theme(legend.position = "none", plot.title = element_text(face = "bold"))
print(fig4)
Figure 5: Unweighted vs Equity-Weighted Health Benefits
weighted_plot <- weighted_summary %>%
select(Wealth_Quintile, Unweighted_DALYs, Weighted_DALYs) %>%
pivot_longer(cols = c(Unweighted_DALYs, Weighted_DALYs),
names_to = "Type", values_to = "DALYs") %>%
mutate(Type = ifelse(Type == "Unweighted_DALYs", "Unweighted", "Equity-Weighted"))
fig5 <- ggplot(weighted_plot, aes(x = Wealth_Quintile, y = DALYs, fill = Type)) +
geom_bar(stat = "identity", alpha = 0.7, position = position_dodge(0.8)) +
labs(x = "\nWealth Quintile", y = "DALYs Averted\n",
title = "E) Unweighted vs Equity-Weighted Health Benefits") +
scale_fill_manual(values = c("Unweighted" = "steelblue", "Equity-Weighted" = "darkgreen")) +
theme_minimal(base_size = 12) +
theme(legend.position = "bottom", plot.title = element_text(face = "bold"))
print(fig5)
7. ECEA Summary Results
ecea_complete <- health_gains %>%
left_join(private_expenditures, by = "Wealth_Quintile") %>%
left_join(catastrophic_averted, by = "Wealth_Quintile") %>%
left_join(poverty_averted, by = "Wealth_Quintile") %>%
left_join(insurance_summary, by = "Wealth_Quintile") %>%
left_join(weighted_summary, by = "Wealth_Quintile") %>%
select(
Wealth_Quintile,
DALYs_Averted,
PE_Averted,
Catastrophic_Cases_Averted,
Poverty_Cases_Averted,
Mean_Insurance_Value,
Equity_Weight,
Equity_Ratio
)
knitr::kable(ecea_complete, caption = "Complete ECEA Results by Wealth Quintile",
digits = c(0, 6, 2, 0, 0, 2, 3, 3))| Wealth_Quintile | DALYs_Averted | PE_Averted | Catastrophic_Cases_Averted | Poverty_Cases_Averted | Mean_Insurance_Value | Equity_Weight | Equity_Ratio |
|---|---|---|---|---|---|---|---|
| Q1_Poorest | 0.099889 | -384.53 | 0 | 0 | 13951.40 | 1.869 | 1.869 |
| Q2 | 0.111872 | -432.21 | 0 | 0 | 8043.18 | 0.924 | 0.924 |
| Q3 | 0.117798 | -480.90 | 0 | -164 | 5271.40 | 0.541 | 0.541 |
| Q4 | 0.126490 | -499.65 | -34 | -523 | 3370.43 | 0.296 | 0.296 |
| Q5_Richest | 0.131233 | -559.28 | -51 | -870 | 1555.61 | 0.200 | 0.200 |
ecea_policy <- data.frame(
Domain = c(
"Health Gains",
"Financial Protection",
"Financial Protection",
"Financial Protection",
"Distributional Equity",
"Distributional Equity",
"Efficiency",
"Efficiency"
),
Metric = c(
"Total DALYs averted",
"Total catastrophic cases averted",
"Total poverty cases averted",
"Total insurance value",
"Mean equity weight (poorest)",
"Mean equity weight (richest)",
"Cost per DALY averted",
"Cost per poverty case averted"
),
Value = c(
sprintf("%.0f", total_dalys_averted),
sprintf("%.0f", total_catastrophic),
sprintf("%.0f", total_poverty),
sprintf("$%.0f", total_insurance),
sprintf("%.2f", weighted_summary$Equity_Weight[1]),
sprintf("%.2f", weighted_summary$Equity_Weight[5]),
sprintf("$%.0f", total_net_cost / total_dalys_averted),
sprintf("$%.0f", total_net_cost / total_poverty)
)
)
knitr::kable(ecea_policy, caption = "ECEA Policy Summary")| Domain | Metric | Value |
|---|---|---|
| Health Gains | Total DALYs averted | 11680 |
| Financial Protection | Total catastrophic cases averted | -85 |
| Financial Protection | Total poverty cases averted | -1557 |
| Financial Protection | Total insurance value | $660592274 |
| Distributional Equity | Mean equity weight (poorest) | 1.87 |
| Distributional Equity | Mean equity weight (richest) | 0.20 |
| Efficiency | Cost per DALY averted | \(3990 | |Efficiency |Cost per poverty case averted |\)-29934 |
9.1 Key Findings
## ========================================
## ECEA KEY FINDINGS
## ========================================
## Total DALYs averted: 11680
## Total poverty cases averted: -1557
## Total catastrophic cases averted: -85
cat(sprintf("\nEquity weighting: Poorest receive %.1fx higher weight than richest\n",
weighted_summary$Equity_Weight[1] / weighted_summary$Equity_Weight[5]))##
## Equity weighting: Poorest receive 9.3x higher weight than richest
## Cost per DALY: $3990
## Cost per poverty case averted: $-29934
## ========================================