100-year flood: Poisson distribution

In the previous post we considered the occurrence of 100-year floods as a Binomial random variable. We can do similar analysis using the Poisson distribution.  As noted by Jones et al.  “For n large, the Binom(n,p) distribution is approximately Pois(np)”.

In the examples we’ve been looking at, n is reasonably large i.e. 100 (years).   So binom(100, 0.01) is approximately pois(100 x 0.01) = pois(1).

Lets try it:

Consider the probability of 1, 100-year flood in 100 years.

The poisson distribution can be expressed as follows:

P(X = x) = \frac{e^{-\lambda} \lambda^x} {x!}

In this case, x = 1, \lambda = 1

P(X = x) = 0.367894

So, using the Poisson distribution the probability of 1, 100-year flood in 100 years is 0.367894. Using the Binomial distribution it is 100 x 0.01 x (1-0.01)^99 = 0.3697296. i.e. pretty close. The approximation gets better for larger n.

Similar to the Binomial example, we can use a Poisson random variable to simulate flood occurrence – although the Binomial approach will be more accurate.  The figure below shows a simulation of 100, 100-year sequences in a 10 x 10 grid.  You can see that most of the time there is 0 or 1 flood but occasionally there are a lot more.

Simulation of the number of 100-year floods occurring in 100 (10 x 10), 100-year sequences.

Simulation of the number of 100-year floods occurring in 100 (10 x 10), 100-year sequences

R code (also available as a gist)

 
dpois(0,1)  # prob of zero 100-year floods in 100 years
dpois(0,1)  # prob of zero 100-year floods in 100 years
[1] 0.3678794
dpois(1,1)  # prob of one 100-year floods in 100 years
[1] 0.3678794
dpois(2,1)  # prob of two 100-year floods in 100 years
[1] 0.1839397


# simulation

library(ggplot2)
df <- expand.grid(x = 1:10, y = 1:10)
df$z <- rbinom(100, 100, 0.01) # could also use rpois(100,1)


ggplot(data=df, aes(x,y)) + geom_tile(aes(fill=z)) + 
  scale_fill_gradient(low="green", high = "red", name = 'Floods') +
  geom_text(data = df, aes(x, y, label = z)) +
  scale_x_continuous(breaks = NULL) +
  scale_y_continuous(breaks = NULL) +
  xlab('') +
  ylab('') 



set.seed(2000)
rpois(10, 1)
[1] 0 1 0 1 2 1 3 1 2 1
# number of 100-year floods in each of 10 100-year sequences



Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s