I previously wrote about considering the occurrence of 1% floods as a binomial distribution, this post extends that analysis to look at conditional probabilities. Some of the results are counter intuitive, at least to me, in that the risk of multiple 1% floods is larger than I would have guessed.
The probability of a 1% (1 in 100) annual exceedance probability (AEP) flood occurring in any year is 1%. This can be treated as the probability of a “success” in the binomial distribution, with the number of trials being the number of years. So the probability of having exactly one 1% flood in 100 years is
In R this can be calculated as dbinom(x = 1, size = 100, prob = 0.01)
or in excel =BINOM.DIST(1,100, 0.01, FALSE).
The cumulative distribution function of the binomial distribution is also useful for flood calculations.
What is the probability of 2 or more 1% floods in 100 years:
R: pbinom(q = 1, size = 100, prob = 0.01, lower.tail = FALSE)
= 0.264
Excel: =1 - BINOM.DIST(1,100, 0.01, TRUE)
= 0.264
We can check this by calculating the probability of zero or one flood in 100 years and subtracting that value from 1.
1 - (dbinom(x = 1, size = 100, prob = 0.01) + dbinom(x = 0, size = 100, prob = 0.01))
= 0.264
We can also do conditional probability calculations which could be useful for risk assessment scenarios.
What is the probability that exactly two 1% floods occur in 100 years given that at least one occurs?
=
dbinom(x = 2, size = 100, prob = 0.01)/pbinom(q = 0, size = 100, prob = 0.01, lower.tail = FALSE)
= 0.291
What is the probability that at least two 1% floods occur in 100 years given that at least one occurs?
=
pbinom(q = 1, size = 100, prob = 0.01, lower.tail = FALSE)/pbinom(q = 0, size = 100, prob = 0.01, lower.tail = FALSE)
= 0.416
We can also check this by simulation. This code generates the number of 1% floods in each of 100,000 100-year sequences. We can then count the number of interest.
set.seed(1969) # use a random number seed so the analysis can be repeated if necessary floods = rbinom(100000,100, 0.01) # generate the number of 1% floods in each of 100,000, 100-year sequences floods_subset = floods[floods >= 1] # Subset of sequences that have 1 or more floods # Number of times there are two or more floods in the subset of 1 or more floods sum(floods_subset >= 2) / length(floods_subset) # 0.4167966 # or sum(floods >= 2)/sum(floods >= 1) #[1] 0.4167966
A slightly tricker situation is a question like: What is the probability of three or fewer floods in 100-years given there is more than one.
floods_subset = floods[floods > 1] # Subset of sequences that have more than one flood # Number of times there are three or fewer floods in the subset of more than one flood sum(floods_subset ≤ 3) / length(floods_subset) #[1] 0.9310957 # Or, for the exact value # (Probability that X = 3 + Probability that X = 2)/(Probability that X > 1) (dbinom(x = 3, size = 100, prob = 0.01) + dbinom(x = 2, size = 100, prob = 0.01))/ pbinom(q = 1, size = 100, prob = 0.01, lower.tail = FALSE) #[1] 0.9304641
The probability of experiencing at least one 1% flood in 100-years is = 0.634. How many years would we need to wait to have a 99% chance of experiencing a 1% flood?
. The next largest integer is 459.
We can also solve this numerically. In R the formula is 0.99 = pbinom(q=0, size = n, prob = 0.01), solve for n. Using the uniroot
function gives n = 459 years (see below).
So all these areas subject to a 1% flood risk will flood eventually, but it may take a while.
f = function(n) { n = as.integer(n) #n must be an integer 0.99 - pbinom(q = 0, size = n, prob = 0.01, lower.tail = FALSE) } # $root # [1] 458.4999 uniroot(f, lower = 100, upper = 1000) pbinom(q = 0, size = 459, prob = 0.01, lower.tail = FALSE) # [1] 0.990079
How many years before there is a >99% chance of experiencing more than one flood? This is one minus (the probability of zero floods + the probability of one flood).
Let the number of years equal n.
. Solving for n gives 662 years