R Markdown

# Monte Carlo QRA: Flood EAL (10,000 sims)
set.seed(2025)

# Observed counts for probability
x_events <- 10   # observed floods
n_years  <- 50   # observation window

# Monetary damage assumptions (mean & sd in pesos)
C_mean <- 5e6    # ₱5,000,000
C_sd   <- 2e6    # ₱2,000,000

# Sim settings
R <- 10000

# 1) Probability samples: Beta posterior (uniform prior)
alpha <- x_events + 1
beta  <- n_years - x_events + 1
P_samples <- rbeta(R, alpha, beta)   # P ~ Beta(11,41)

# 2) Parameterize lognormal for consequence from mean & sd
var_C <- C_sd^2
# Solve for mu and sigma of lognormal
mu_log <- log( (C_mean^2) / sqrt(var_C + C_mean^2) )
sigma_log <- sqrt( log( 1 + var_C / C_mean^2 ) )

C_samples <- rlnorm(R, meanlog = mu_log, sdlog = sigma_log)

# 3) Compute EAL for each draw
EAL_samples <- P_samples * C_samples

# 4) Summaries
summary_stats <- function(x) {
  c(mean = mean(x),
    median = median(x),
    sd = sd(x),
    p5 = quantile(x, 0.05),
    p25 = quantile(x, 0.25),
    p75 = quantile(x, 0.75),
    p95 = quantile(x, 0.95))
}

res_P <- summary_stats(P_samples)
res_C <- summary_stats(C_samples)
res_EAL <- summary_stats(EAL_samples)

print("Probability P (summary):")
## [1] "Probability P (summary):"
print(round(res_P, 4))
##    mean  median      sd   p5.5% p25.25% p75.75% p95.95% 
##  0.2114  0.2077  0.0561  0.1256  0.1709  0.2469  0.3096
print("Consequence C (₱, summary):")
## [1] "Consequence C (₱, summary):"
print(round(res_C))
##    mean  median      sd   p5.5% p25.25% p75.75% p95.95% 
## 4982390 4633653 1990938 2449274 3564424 6011712 8682381
print("EAL (₱, summary):")
## [1] "EAL (₱, summary):"
print(round(res_EAL))
##    mean  median      sd   p5.5% p25.25% p75.75% p95.95% 
## 1052570  951846  512746  429030  686703 1302878 2032372
# 5) Plots ----

# (a) Histogram + density of EAL
hist(EAL_samples / 1e6, breaks = 50,
     main = "EAL distribution (Millions ₱)",
     xlab = "EAL (₱ millions)",
     col = "lightblue", border = "white")
lines(density(EAL_samples / 1e6), col = "blue", lwd = 2)

# (b) Convergence check
running_mean <- cumsum(EAL_samples) / seq_along(EAL_samples)
plot(running_mean, type = "l",
     main = "Convergence of EAL estimate",
     xlab = "Simulation Iterations", ylab = "Running Mean of EAL")
abline(h = mean(EAL_samples), col = "red", lty = 2)

# (c) Scatter plots for sensitivity
par(mfrow = c(1, 2))  # 2 plots side by side
plot(P_samples, EAL_samples,
     main = "EAL vs Flood Probability (P)",
     xlab = "P", ylab = "EAL (₱)",
     col = rgb(0,0,1,0.3), pch = 16)
plot(C_samples, EAL_samples,
     main = "EAL vs Flood Consequence (C)",
     xlab = "C (₱)", ylab = "EAL (₱)",
     col = rgb(1,0.5,0,0.3), pch = 16)

par(mfrow = c(1, 1))  # reset layout

# 6) Simple sensitivity: Pearson correlations with EAL
cor_P <- cor(P_samples, EAL_samples)
cor_C <- cor(C_samples, EAL_samples)
cat("Correlation EAL vs P:", round(cor_P, 3), "\n")
## Correlation EAL vs P: 0.537
cat("Correlation EAL vs C:", round(cor_C, 3), "\n")
## Correlation EAL vs C: 0.813