Historic data indicates that the occurrence and intensity of cyclonic storms (Hurricanes, Typhoons and Tornados) increases with the increased earth temperature. For this assignment you will need to tell this story to a non-technical audience (eg: a high-school earth science class).
Notes:
Source historic data for a period of at least 25 years on a measure of the earth’s temperature.
Source data on the occurrence and intensity of hurricanes, typhoons and tornados for the same historic period.
Perform the data analysis to establish the correlations between earth temperature and storm occurrence and intensity.
Tell the story of this data and your analysis using data visualizations and other illustrations (eg: pictures of storm damage) in a presentation that will be accessible to a high-school earth science class.
Loading tornados.
## [1] "Date,Tornadoes,Fatalities" "1998,1428,130"
## [3] "1999,1342,94" "2000,1073,41"
## [5] "2001,1212,37"
data <- read.csv("C:\\Users\\aleja\\Downloads\\data (1).csv")
#View the first few rows of the dataset
head(data)## Date Tornadoes Fatalities
## 1 1998 1428 130
## 2 1999 1342 94
## 3 2000 1073 41
## 4 2001 1212 37
## 5 2002 934 55
## 6 2003 1385 54
## 'data.frame': 27 obs. of 3 variables:
## $ Date : int 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 ...
## $ Tornadoes : int 1428 1342 1073 1212 934 1385 1813 1262 1106 1100 ...
## $ Fatalities: int 130 94 41 37 55 54 35 38 67 81 ...
#Converting 'Date' column to character
data$Date <- as.character(data$Date)
#Extracting year from 'Date' column
data$Year <- substr(data$Date, 1, 4)
#Converting 'Year' column back to integer (if needed)
data$Year <- as.integer(data$Year)
#Removing the original 'Date' column
data <- data[, -which(names(data) == "Date")]
#Viewing the first few rows of the updated dataset
head(data)## Tornadoes Fatalities Year
## 1 1428 130 1998
## 2 1342 94 1999
## 3 1073 41 2000
## 4 1212 37 2001
## 5 934 55 2002
## 6 1385 54 2003
#Converting 'Tornadoes' column to numeric
data$Tornadoes <- as.numeric(data$Tornadoes)
#Aggregating the tornado counts by year and calculate the sum
tornado_sum <- aggregate(Tornadoes ~ Year, data = data, sum)
#Printing the resulting data frame
print(tornado_sum)## Year Tornadoes
## 1 1998 1428
## 2 1999 1342
## 3 2000 1073
## 4 2001 1212
## 5 2002 934
## 6 2003 1385
## 7 2004 1813
## 8 2005 1262
## 9 2006 1106
## 10 2007 1100
## 11 2008 1692
## 12 2009 1146
## 13 2010 1282
## 14 2011 1691
## 15 2012 938
## 16 2013 906
## 17 2014 886
## 18 2015 1177
## 19 2016 976
## 20 2017 1429
## 21 2018 1126
## 22 2019 1517
## 23 2020 1082
## 24 2021 1314
## 25 2022 1143
## 26 2023 1294
## 27 2024 97
#Converting 'Tornadoes' column to numeric
data$Tornadoes <- as.numeric(data$Tornadoes)
#Aggregating the tornado counts by year and calculate the sum
tornado_sum <- aggregate(Tornadoes ~ Year, data = data, sum)
#Merging the aggregated data back into the original dataset by 'Year'
data <- merge(data, tornado_sum, by = "Year", suffixes = c("", ".sum"))
#Removing the original 'Tornadoes' column if not needed anymore
data <- data[, -which(names(data) == "Tornadoes")]
#Renaming the new column
names(data)[which(names(data) == "Tornadoes.sum")] <- "Tornadoes"
#Printing the first few rows of the updated dataset
head(data)## Year Fatalities Tornadoes
## 1 1998 130 1428
## 2 1999 94 1342
## 3 2000 41 1073
## 4 2001 37 1212
## 5 2002 55 934
## 6 2003 54 1385
#Removing duplicate rows
data <- unique(data)
#Printing the first few rows of the updated dataset
head(data)## Year Fatalities Tornadoes
## 1 1998 130 1428
## 2 1999 94 1342
## 3 2000 41 1073
## 4 2001 37 1212
## 5 2002 55 934
## 6 2003 54 1385
Loading cyclones
#Loading the dataset
datac <- read.csv("C:\\Users\\aleja\\Downloads\\time-series-US-cost-1980-2024 (1).csv")
#showing the first few rows of the dataset
head(datac)## State Year Drought.Count Drought.Cost Drought.Lower.75 Drought.Upper.75
## 1 US 1998 1 6.7 5.7 7.1
## 2 US 1999 1 4.7 4.3 5.1
## 3 US 2000 1 9.1 8.6 9.9
## 4 US 2001 0 0.0 0.0 0.0
## 5 US 2002 1 15.7 15.7 17.2
## 6 US 2003 1 8.5 7.8 8.7
## Drought.Lower.90 Drought.Upper.90 Drought.Lower.95 Drought.Upper.95
## 1 5.5 7.4 5.3 7.6
## 2 4.1 5.1 4.1 5.3
## 3 8.2 10.2 8.1 10.4
## 4 0.0 0.0 0.0 0.0
## 5 15.3 17.6 15.1 17.7
## 6 7.7 8.8 7.5 9.0
## Flooding.Count Flooding.Cost Flooding.Lower.75 Flooding.Upper.75
## 1 1 1.8 1.5 2.3
## 2 0 0.0 0.0 0.0
## 3 1 1.6 0.9 1.8
## 4 0 0.0 0.0 0.0
## 5 0 0.0 0.0 0.0
## 6 0 0.0 0.0 0.0
## Flooding.Lower.90 Flooding.Upper.90 Flooding.Lower.95 Flooding.Upper.95
## 1 1.5 2.4 1.3 2.4
## 2 0.0 0.0 0.0 0.0
## 3 1.2 1.9 0.9 1.9
## 4 0.0 0.0 0.0 0.0
## 5 0.0 0.0 0.0 0.0
## 6 0.0 0.0 0.0 0.0
## Freeze.Count Freeze.Cost Freeze.Lower.75 Freeze.Upper.75 Freeze.Lower.90
## 1 1 4.8 3.8 5.7 3.6
## 2 0 0.0 0.0 0.0 0.0
## 3 0 0.0 0.0 0.0 0.0
## 4 0 0.0 0.0 0.0 0.0
## 5 0 0.0 0.0 0.0 0.0
## 6 0 0.0 0.0 0.0 0.0
## Freeze.Upper.90 Freeze.Lower.95 Freeze.Upper.95 Severe.Storm.Count
## 1 5.9 3.6 5.9 4
## 2 0.0 0.0 0.0 1
## 3 0.0 0.0 0.0 1
## 4 0.0 0.0 0.0 2
## 5 0.0 0.0 0.0 2
## 6 0.0 0.0 0.0 4
## Severe.Storm.Cost Severe.Storm.Lower.75 Severe.Storm.Upper.75
## 1 8.9 7.9 9.5
## 2 3.7 3.2 4.1
## 3 1.2 1.6 2.2
## 4 6.6 5.9 6.7
## 5 4.8 4.5 5.1
## 6 13.4 12.1 15.0
## Severe.Storm.Lower.90 Severe.Storm.Upper.90 Severe.Storm.Lower.95
## 1 7.3 10.1 7.1
## 2 3.2 4.3 3.0
## 3 1.6 2.3 1.6
## 4 5.7 7.1 5.6
## 5 4.3 5.5 4.1
## 6 11.5 15.6 11.2
## Severe.Storm.Upper.95 Tropical.Cyclone.Count Tropical.Cyclone.Cost
## 1 10.7 3 14.5
## 2 4.5 1 11.9
## 3 2.3 0 0.0
## 4 7.3 1 14.7
## 5 5.5 2 3.9
## 6 16.1 1 9.2
## Tropical.Cyclone.Lower.75 Tropical.Cyclone.Upper.75 Tropical.Cyclone.Lower.90
## 1 12.4 16.3 11.7
## 2 10.5 12.9 10.1
## 3 0.0 0.0 0.0
## 4 12.5 15.7 11.9
## 5 3.4 4.2 3.1
## 6 7.8 9.5 7.5
## Tropical.Cyclone.Upper.90 Tropical.Cyclone.Lower.95 Tropical.Cyclone.Upper.95
## 1 17.4 11.5 17.8
## 2 13.4 9.8 13.8
## 3 0.0 0.0 0.0
## 4 16.6 11.6 17.1
## 5 4.6 3.1 4.8
## 6 10.0 7.5 10.2
## Wildfire.Count Wildfire.Cost Wildfire.Lower.75 Wildfire.Upper.75
## 1 0 0.0 0.0 0.0
## 2 0 0.0 0.0 0.0
## 3 1 1.9 1.8 2.2
## 4 0 0.0 0.0 0.0
## 5 1 2.2 1.9 2.6
## 6 1 6.5 5.5 6.8
## Wildfire.Lower.90 Wildfire.Upper.90 Wildfire.Lower.95 Wildfire.Upper.95
## 1 0.0 0.0 0.0 0.0
## 2 0.0 0.0 0.0 0.0
## 3 1.8 2.2 1.6 2.3
## 4 0.0 0.0 0.0 0.0
## 5 1.7 2.7 1.7 2.9
## 6 5.3 7.2 5.2 7.5
## Winter.Storm.Count Winter.Storm.Cost Winter.Storm.Lower.75
## 1 1 2.7 2.1
## 2 2 3.6 3.4
## 3 1 1.3 1.1
## 4 0 0.0 0.0
## 5 0 0.0 0.0
## 6 0 0.0 0.0
## Winter.Storm.Upper.75 Winter.Storm.Lower.90 Winter.Storm.Upper.90
## 1 2.7 2.1 2.9
## 2 4.2 3.2 4.5
## 3 1.5 0.9 1.5
## 4 0.0 0.0 0.0
## 5 0.0 0.0 0.0
## 6 0.0 0.0 0.0
## Winter.Storm.Lower.95 Winter.Storm.Upper.95 All.Disasters.Count
## 1 1.9 3.1 11
## 2 3.0 4.9 5
## 3 0.9 1.6 5
## 4 0.0 0.0 3
## 5 0.0 0.0 6
## 6 0.0 0.0 7
## All.Disasters.Cost All.Disasters.Lower.75 All.Disasters.Upper.75
## 1 39.4 33.4 43.6
## 2 23.9 21.4 26.3
## 3 15.1 14.0 17.6
## 4 21.3 18.4 22.4
## 5 26.6 25.5 29.1
## 6 37.6 33.2 40.0
## All.Disasters.Lower.90 All.Disasters.Upper.90 All.Disasters.Lower.95
## 1 31.7 46.1 30.7
## 2 20.6 27.3 19.9
## 3 13.7 18.1 13.1
## 4 17.6 23.7 17.2
## 5 24.4 30.4 24.0
## 6 32.0 41.6 31.4
## All.Disasters.Upper.95
## 1 47.5
## 2 28.5
## 3 18.5
## 4 24.4
## 5 30.9
## 6 42.8
## 'data.frame': 27 obs. of 66 variables:
## $ State : chr "US" "US" "US" "US" ...
## $ Year : int 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 ...
## $ Drought.Count : int 1 1 1 0 1 1 0 1 1 1 ...
## $ Drought.Cost : num 6.7 4.7 9.1 0 15.7 8.5 0 2.4 9.4 5.4 ...
## $ Drought.Lower.75 : num 5.7 4.3 8.6 0 15.7 7.8 0 2.4 8.7 5.3 ...
## $ Drought.Upper.75 : num 7.1 5.1 9.9 0 17.2 8.7 0 2.8 10.1 5.9 ...
## $ Drought.Lower.90 : num 5.5 4.1 8.2 0 15.3 7.7 0 2.3 8.6 5.2 ...
## $ Drought.Upper.90 : num 7.4 5.1 10.2 0 17.6 8.8 0 2.8 10.5 6.1 ...
## $ Drought.Lower.95 : num 5.3 4.1 8.1 0 15.1 7.5 0 2.3 8.4 5.2 ...
## $ Drought.Upper.95 : num 7.6 5.3 10.4 0 17.7 9 0 2.9 10.6 6.1 ...
## $ Flooding.Count : int 1 0 1 0 0 0 0 0 1 0 ...
## $ Flooding.Cost : num 1.8 0 1.6 0 0 0 0 0 2.3 0 ...
## $ Flooding.Lower.75 : num 1.5 0 0.9 0 0 0 0 0 2.1 0 ...
## $ Flooding.Upper.75 : num 2.3 0 1.8 0 0 0 0 0 3.2 0 ...
## $ Flooding.Lower.90 : num 1.5 0 1.2 0 0 0 0 0 2 0 ...
## $ Flooding.Upper.90 : num 2.4 0 1.9 0 0 0 0 0 3.5 0 ...
## $ Flooding.Lower.95 : num 1.3 0 0.9 0 0 0 0 0 1.8 0 ...
## $ Flooding.Upper.95 : num 2.4 0 1.9 0 0 0 0 0 3.6 0 ...
## $ Freeze.Count : int 1 0 0 0 0 0 0 0 0 2 ...
## $ Freeze.Cost : num 4.8 0 0 0 0 0 0 0 0 5.2 ...
## $ Freeze.Lower.75 : num 3.8 0 0 0 0 0 0 0 0 4.6 ...
## $ Freeze.Upper.75 : num 5.7 0 0 0 0 0 0 0 0 5.9 ...
## $ Freeze.Lower.90 : num 3.6 0 0 0 0 0 0 0 0 4.4 ...
## $ Freeze.Upper.90 : num 5.9 0 0 0 0 0 0 0 0 6.2 ...
## $ Freeze.Lower.95 : num 3.6 0 0 0 0 0 0 0 0 4.2 ...
## $ Freeze.Upper.95 : num 5.9 0 0 0 0 0 0 0 0 6.2 ...
## $ Severe.Storm.Count : int 4 1 1 2 2 4 2 1 5 1 ...
## $ Severe.Storm.Cost : num 8.9 3.7 1.2 6.6 4.8 13.4 2.8 1.4 10.7 3.7 ...
## $ Severe.Storm.Lower.75 : num 7.9 3.2 1.6 5.9 4.5 12.1 2.6 1.3 9.8 3.3 ...
## $ Severe.Storm.Upper.75 : num 9.5 4.1 2.2 6.7 5.1 15 3.1 1.4 11.3 3.7 ...
## $ Severe.Storm.Lower.90 : num 7.3 3.2 1.6 5.7 4.3 11.5 2.5 1.3 9.4 3.1 ...
## $ Severe.Storm.Upper.90 : num 10.1 4.3 2.3 7.1 5.5 15.6 3.3 1.4 11.5 3.7 ...
## $ Severe.Storm.Lower.95 : num 7.1 3 1.6 5.6 4.1 11.2 2.3 1.1 9.2 3.1 ...
## $ Severe.Storm.Upper.95 : num 10.7 4.5 2.3 7.3 5.5 16.1 3.5 1.4 11.9 3.9 ...
## $ Tropical.Cyclone.Count : int 3 1 0 1 2 1 4 4 0 0 ...
## $ Tropical.Cyclone.Cost : num 14.5 11.9 0 14.7 3.9 ...
## $ Tropical.Cyclone.Lower.75: num 12.4 10.5 0 12.5 3.4 ...
## $ Tropical.Cyclone.Upper.75: num 16.3 12.9 0 15.7 4.2 ...
## $ Tropical.Cyclone.Lower.90: num 11.7 10.1 0 11.9 3.1 ...
## $ Tropical.Cyclone.Upper.90: num 17.4 13.4 0 16.6 4.6 ...
## $ Tropical.Cyclone.Lower.95: num 11.5 9.8 0 11.6 3.1 ...
## $ Tropical.Cyclone.Upper.95: num 17.8 13.8 0 17.1 4.8 ...
## $ Wildfire.Count : int 0 0 1 0 1 1 0 0 1 1 ...
## $ Wildfire.Cost : num 0 0 1.9 0 2.2 6.5 0 0 2.3 4.1 ...
## $ Wildfire.Lower.75 : num 0 0 1.8 0 1.9 5.5 0 0 2 3.8 ...
## $ Wildfire.Upper.75 : num 0 0 2.2 0 2.6 6.8 0 0 2.5 4.4 ...
## $ Wildfire.Lower.90 : num 0 0 1.8 0 1.7 5.3 0 0 2 3.7 ...
## $ Wildfire.Upper.90 : num 0 0 2.2 0 2.7 7.2 0 0 2.7 4.6 ...
## $ Wildfire.Lower.95 : num 0 0 1.6 0 1.7 5.2 0 0 1.9 3.6 ...
## $ Wildfire.Upper.95 : num 0 0 2.3 0 2.9 7.5 0 0 2.7 4.9 ...
## $ Winter.Storm.Count : int 1 2 1 0 0 0 0 0 0 0 ...
## $ Winter.Storm.Cost : num 2.7 3.6 1.3 0 0 0 0 0 0 0 ...
## $ Winter.Storm.Lower.75 : num 2.1 3.4 1.1 0 0 0 0 0 0 0 ...
## $ Winter.Storm.Upper.75 : num 2.7 4.2 1.5 0 0 0 0 0 0 0 ...
## $ Winter.Storm.Lower.90 : num 2.1 3.2 0.9 0 0 0 0 0 0 0 ...
## $ Winter.Storm.Upper.90 : num 2.9 4.5 1.5 0 0 0 0 0 0 0 ...
## $ Winter.Storm.Lower.95 : num 1.9 3 0.9 0 0 0 0 0 0 0 ...
## $ Winter.Storm.Upper.95 : num 3.1 4.9 1.6 0 0 0 0 0 0 0 ...
## $ All.Disasters.Count : int 11 5 5 3 6 7 6 6 8 5 ...
## $ All.Disasters.Cost : num 39.4 23.9 15.1 21.3 26.6 ...
## $ All.Disasters.Lower.75 : num 33.4 21.4 14 18.4 25.5 ...
## $ All.Disasters.Upper.75 : num 43.6 26.3 17.6 22.4 29.1 ...
## $ All.Disasters.Lower.90 : num 31.7 20.6 13.7 17.6 24.4 ...
## $ All.Disasters.Upper.90 : num 46.1 27.3 18.1 23.7 30.4 ...
## $ All.Disasters.Lower.95 : num 30.7 19.9 13.1 17.2 24 ...
## $ All.Disasters.Upper.95 : num 47.5 28.5 18.5 24.4 30.9 ...
#Selecting specific columns from the dataset and drop all other columns
datac1 <- datac[, c("Tropical.Cyclone.Count", "State", "Year")]
#First few rows of the subsetted dataset
head(datac1)## Tropical.Cyclone.Count State Year
## 1 3 US 1998
## 2 1 US 1999
## 3 0 US 2000
## 4 1 US 2001
## 5 2 US 2002
## 6 1 US 2003
## 'data.frame': 27 obs. of 3 variables:
## $ Tropical.Cyclone.Count: int 3 1 0 1 2 1 4 4 0 0 ...
## $ State : chr "US" "US" "US" "US" ...
## $ Year : int 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 ...
Loading temperature
#Loading the dataset
datat <- read.csv("C:\\Users\\aleja\\Downloads\\data.csv")
#Viewing the first few rows of the dataset
head(datat)## Year Anomaly
## 1 1998 0.66
## 2 1999 0.44
## 3 2000 0.43
## 4 2001 0.47
## 5 2002 0.63
## 6 2003 0.60
## 'data.frame': 26 obs. of 2 variables:
## $ Year : int 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 ...
## $ Anomaly: num 0.66 0.44 0.43 0.47 0.63 0.6 0.58 0.66 0.66 0.69 ...
#Combining the datasets by the "Year" column
combined_data <- merge(data, datac1, by = "Year")
combined_data <- merge(combined_data, datat, by = "Year")
#Viewing the first few rows of the combined dataset
head(combined_data)## Year Fatalities Tornadoes Tropical.Cyclone.Count State Anomaly
## 1 1998 130 1428 3 US 0.66
## 2 1999 94 1342 1 US 0.44
## 3 2000 41 1073 0 US 0.43
## 4 2001 37 1212 1 US 0.47
## 5 2002 55 934 2 US 0.63
## 6 2003 54 1385 1 US 0.60
## 'data.frame': 26 obs. of 6 variables:
## $ Year : int 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 ...
## $ Fatalities : int 130 94 41 37 55 54 35 38 67 81 ...
## $ Tornadoes : num 1428 1342 1073 1212 934 ...
## $ Tropical.Cyclone.Count: int 3 1 0 1 2 1 4 4 0 0 ...
## $ State : chr "US" "US" "US" "US" ...
## $ Anomaly : num 0.66 0.44 0.43 0.47 0.63 0.6 0.58 0.66 0.66 0.69 ...
#Summary statistics for numeric variables
summary(combined_data[, c("Fatalities", "Tornadoes", "Tropical.Cyclone.Count")])## Fatalities Tornadoes Tropical.Cyclone.Count
## Min. : 10.00 Min. : 886 Min. :0.000
## 1st Qu.: 36.25 1st Qu.:1086 1st Qu.:0.000
## Median : 50.50 Median :1194 Median :2.000
## Mean : 75.96 Mean :1241 Mean :1.808
## 3rd Qu.: 79.75 3rd Qu.:1374 3rd Qu.:3.000
## Max. :553.00 Max. :1813 Max. :7.000
#Loading required libraries
library(ggplot2)
# Histogram of Fatalities
ggplot(combined_data, aes(x = Fatalities)) +
geom_histogram(binwidth = 10, fill = "skyblue", color = "black") +
labs(title = "Distribution of Fatalities",
x = "Number of Fatalities", y = "Frequency")# Histogram of Tornadoes
ggplot(combined_data, aes(x = Tornadoes)) +
geom_histogram(binwidth = 100, fill = "skyblue", color = "black") +
labs(title = "Distribution of Tornadoes",
x = "Number of Tornadoes", y = "Frequency")# Histogram of Tropical Cyclone Count
ggplot(combined_data, aes(x = Tropical.Cyclone.Count)) +
geom_histogram(binwidth = 1, fill = "skyblue", color = "black") +
labs(title = "Distribution of Tropical Cyclone Count",
x = "Number of Cyclones", y = "Frequency")#Loading required libraries
library(ggplot2)
# Line plot of Fatalities over time
ggplot(combined_data, aes(x = Year, y = Fatalities)) +
geom_line(color = "red") +
labs(title = "Fatalities Over Time",
x = "Year", y = "Fatalities")# Line plot of Tornadoes over time
ggplot(combined_data, aes(x = Year, y = Tornadoes)) +
geom_line(color = "blue") +
labs(title = "Tornadoes Over Time",
x = "Year", y = "Tornadoes")# Line plot of Tropical Cyclone Count over time
ggplot(combined_data, aes(x = Year, y = Tropical.Cyclone.Count)) +
geom_line(color = "green") +
labs(title = "Tropical Cyclone Count Over Time",
x = "Year", y = "Tropical Cyclone Count")The occurrence of many fatalities in certain years due to the combined effects of global temperature increase and tornadoes underscores the importance of addressing climate change and implementing effective measures to reduce the risks associated with severe weather events.
# Line plot of Temperature Anomaly over time
ggplot(combined_data, aes(x = Year, y = Anomaly)) +
geom_line(color = "orange") +
labs(title = "Temperature Anomaly Over Time",
x = "Year", y = "Temperature Anomaly")A rise in global temperature of 0.5 (for reference) degrees Celsius can lead to alterations in weather patterns, including shifts in precipitation patterns, changes in the frequency and intensity of extreme weather events such as heatwaves, droughts, and heavy rainfall events, and variations in the distribution of storms and cyclones.
# Trend series plot with Anomaly and Tropical Cyclone Count
ggplot(combined_data, aes(x = Year)) +
geom_line(aes(y = Anomaly, color = "Temperature Anomaly")) +
geom_line(aes(y = Tropical.Cyclone.Count, color = "Tropical Cyclone Count")) +
labs(title = "Trend Series of Anomaly and Tropical Cyclone Count",
x = "Year", y = "Count/Anomaly") +
scale_color_manual(name = "Variables",
values = c("Temperature Anomaly" = "orange",
"Tropical Cyclone Count" = "green"))#Creating a dual-axis plot for Tornadoes and Temperature Anomaly
ggplot() +
geom_line(data = combined_data, aes(x = Year, y = Tornadoes, color = "Tornadoes")) +
geom_line(data = combined_data, aes(x = Year, y = Anomaly * max(combined_data$Tornadoes) / max(combined_data$Anomaly), color = "Temperature Anomaly")) +
scale_y_continuous(sec.axis = sec_axis(~./max(combined_data$Tornadoes) * max(combined_data$Anomaly), name = "Temperature Anomaly")) +
labs(title = "Trend Series of Tornadoes and Temperature Anomaly",
x = "Year", y = "Tornadoes") +
scale_color_manual(name = "Variables",
values = c("Tornadoes" = "blue",
"Temperature Anomaly" = "orange"))## Warning: Use of `combined_data$Tornadoes` is discouraged.
## ℹ Use `Tornadoes` instead.
## Warning: Use of `combined_data$Anomaly` is discouraged.
## ℹ Use `Anomaly` instead.
A significant increase in global temperature can lead to more frequent and intense extreme weather events, including tornadoes and cyclones. Warmer temperatures can provide additional energy to the atmosphere, fueling the formation and intensification of these storms.
The combination of higher global temperatures and an increasing trend in tornadoes and cyclones poses a heightened risk of damage to infrastructure, property, and ecosystems, as well as an increased likelihood of loss of life and injuries due to severe weather impacts.
Data sources:
https://www.ncei.noaa.gov/access/monitoring/climate-at-a-glance/global/time-series