Science gets validated through predictions. Using satellite derived wind speed estimates from tropical cyclones Elsner, Kossin, and Jagger (2008) showed that the strongest hurricanes got stronger in the period 1981-2006. In particular, they found that 15% (85th quantile) of all named storms across the North Atlantic had wind speeds exceeding 48.9 m/s (Table 1) with an upward trend of .63 m/s/yr in this quantile wind speed. They related this increase to a corresponding rise in ocean temperatures consistent with theory (Emanuel 1988). The oceans have continued to warm since that paper was published so we would predict that the upward trend in the intensity of the strongest hurricanes has continued.

To check this, consider all North Atlantic named storms (tropical storms and hurricanes) over the 13-year period 2007–2019 [data taken from Wikipedia]. NS and MH are the annual number of named storms and major hurricanes respectively.

Year <- c(2007, 2007, 2008, 2008, 2008, 2008, 2008, 2009, 2009, 2010, 2010, 2010, 2010, 2010,
          2011, 2011, 2011, 2011, 2012, 2012, 2014, 2014, 2015, 2015, 2016, 2016, 2016, 2016,
          2017, 2017, 2017, 2017, 2017, 2017, 2018, 2018, 2019, 2019)
Name <- c("Dean", "Felix", "Bertha", "Gustav", "Ike", "Omar", "Paloma", "Bill", "Fred",
          "Danielle", "Earl", "Igor", "Julia", "Karl", "Irene", "Katia", "Ophelia", "Rina",
          "Michael", "Sandy", "Edouard", "Gonzalo", "Danny", "Joaquin", "Gaston", "Matthew",
          "Nicole", "Otto", "Harvey", "Irma", "Jose", "Lee", "Maria", "Ophelia", "Florence",
          "Michael", "Dorian", "Humburto")
MPH <- c(175, 175, 125, 150, 145, 130, 140, 130, 120, 130, 145, 155, 140, 125, 120, 140, 140,
         115, 115, 115, 120, 145, 125, 155, 120, 165, 140, 115, 130, 180, 155, 115, 175, 115, 
         150, 160, 185, 115)
LMI.df <- data.frame(Year, Name, MPH, MPS = MPH * .44704)

NS <- c(15, 16, 9, 19, 19, 19, 14, 8, 11, 15, 17, 15, 12)
MH <- c(2, 5, 2, 5, 4, 2, 0, 2, 2, 4, 6, 2, 2)
Year <- 2007:2019

Counts.df <- data.frame(Year, NS, MH)
# sum(MH)/sum(NS) * 100

We note that 20% of them had wind speeds exceeding 48.9 m/s. An increase of 5 percentage points.

suppressPackageStartupMessages(library(dplyr))
LMI.df %>%
  arrange(desc(MPS))
##    Year     Name MPH     MPS
## 1  2019   Dorian 185 82.7024
## 2  2017     Irma 180 80.4672
## 3  2007     Dean 175 78.2320
## 4  2007    Felix 175 78.2320
## 5  2017    Maria 175 78.2320
## 6  2016  Matthew 165 73.7616
## 7  2018  Michael 160 71.5264
## 8  2010     Igor 155 69.2912
## 9  2015  Joaquin 155 69.2912
## 10 2017     Jose 155 69.2912
## 11 2008   Gustav 150 67.0560
## 12 2018 Florence 150 67.0560
## 13 2008      Ike 145 64.8208
## 14 2010     Earl 145 64.8208
## 15 2014  Gonzalo 145 64.8208
## 16 2008   Paloma 140 62.5856
## 17 2010    Julia 140 62.5856
## 18 2011    Katia 140 62.5856
## 19 2011  Ophelia 140 62.5856
## 20 2016   Nicole 140 62.5856
## 21 2008     Omar 130 58.1152
## 22 2009     Bill 130 58.1152
## 23 2010 Danielle 130 58.1152
## 24 2017   Harvey 130 58.1152
## 25 2008   Bertha 125 55.8800
## 26 2010     Karl 125 55.8800
## 27 2015    Danny 125 55.8800
## 28 2009     Fred 120 53.6448
## 29 2011    Irene 120 53.6448
## 30 2014  Edouard 120 53.6448
## 31 2016   Gaston 120 53.6448
## 32 2011     Rina 115 51.4096
## 33 2012  Michael 115 51.4096
## 34 2012    Sandy 115 51.4096
## 35 2016     Otto 115 51.4096
## 36 2017      Lee 115 51.4096
## 37 2017  Ophelia 115 51.4096
## 38 2019 Humburto 115 51.4096

Plot as an ordered bar plot.

LMI.df <- LMI.df %>%
  mutate(NAME = paste(Year, Name))

suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(forcats))

ggplot(data = LMI.df) +
  geom_segment(aes(x = reorder(NAME, MPS), y = 50,
                   xend = reorder(NAME, MPS), yend = MPS, 
                   color = MPS), size = 2.5) +
  coord_flip() + 
  scale_y_continuous(position = 'right') +
  xlab("") + ylab("Lifetime Highest Intensity (m/s)") +
  theme_minimal() +
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        legend.position = "none")

percentile <- (cumsum(table(LMI.df$MPS)) + (sum(NS) - sum(MH)))/sum(NS)
percentile.df <- as.data.frame(percentile)
percentile.df$MPS <- as.numeric(rownames(percentile.df))

p85ws <- round(approx(x = percentile.df$percentile, y = percentile.df$MPS, xout = .85)$y, 1)

Further we note that the 85th quantile wind speed has increased from 48.9 m/s to 52.9 m/s which is an increase of 4 m/s and which matches an extrapolation by taking the trend of .63 m/s/yr from Table 1 of Elsner et al. (2008) and multipling it by 7 (mid point number of years in a 13-year period). [48.9 + .63 * 7 = 53.3 m/s].

p95 <- round(approx(x = percentile.df$MPS, y = percentile.df$percentile, xout = 60.3)$y, 1)
p95ws <- round(approx(x = percentile.df$percentile, y = percentile.df$MPS, xout = .95)$y, 1)

Furthermore we note that 5% of the storms exceeded 60.3 m/s over the earlier period (Table 1, 95th quantile) but has increased to 10% over the later period. The 95th quantile wind speed has increased from 60.3 m/s to 67.5 m/s consistent with extrapolating the trend [60.3 + .81 * 7 = 66 m/s].

It is hard to argue against this straightforward post publication analysis and the results raise the question of why this work was largely ignored when writing “state-of-the-knowledge” reports on hurricanes and climate change.

References

Elsner, James B., James P. Kossin, and Thomas H. Jagger. 2008. “The Increasing Intensity of the Strongest Tropical Cyclones.” Nature 455 (7209): 92–95. doi:10.1038/nature07234.

Emanuel, Kerry A. 1988. “The Maximum Intensity of Hurricanes.” Journal of the Atmospheric Sciences 45 (7): 1143–55.