Introduction

The focus of my project is the analysis of carbon dioxide (CO2) data sets from the reliable NOAA Global Monitoring Laboratory. By definition, “National Oceanic and Atmospheric Administration conducts research that addresses three major challenges: greenhouse gas and carbon cycle feedback’s, changes in clouds, aerosols, and surface radiation, and recovery of stratospheric ozone.” I have specifically decided to examine the months with the highest and lowest CO2 levels, identifying May as the peak and September as the lowest level. By concentrating on the crucial years 2000, 2010, and 2020, CO2 patterns during the previous 20 years may be examined more closely, offering important new information about the future course of atmospheric carbon dioxide levels. By examining worldwide monthly annual means and levels. the analysis attempts to provide a complete picture of CO2 variations, using regression analysis and graphical displays to clarify any apparent patterns or trends. Carrying out such an analysis, not only clarifies the complexities of carbon dioxide dynamics but also provides an essential resource for comprehending the state of our world and the changing terrain of climate change. This project aims to contribute to a deeper understanding of climate change processes by deciphering the complexity of CO2 levels.

Loading Library’s

library(ncdf4)
library(sf)
## Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
library(terra)
## terra 1.7.65
library(RColorBrewer)
library(raster)
## Loading required package: sp
library(colorspace)
## 
## Attaching package: 'colorspace'
## The following object is masked from 'package:raster':
## 
##     RGB
## The following object is masked from 'package:terra':
## 
##     RGB

Adding the global map outline

shp_file <- "/Users/josefinacruz/Downloads/UIA_World_Countries_Boundaries (1)/World_Countries_Generalized.shp"
world_outline <- as(st_geometry(read_sf(shp_file)), Class = "Spatial")
world_otl <- vect(world_outline)

Reading and Plotting May 2000 CO2

file_path_may2000= "/Users/josefinacruz/Downloads/"
may2000<- "CT2022.molefrac_glb3x2_2000-05.nc" 
nc_fname <- paste(file_path_may2000, may2000, "", sep = "")
dname <- "co2"
m0co2_raster <- rast(nc_fname,"co2")
m0co2_raster
## class       : SpatRaster 
## dimensions  : 90, 120, 34  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source      : CT2022.molefrac_glb3x2_2000-05.nc:co2 
## varname     : co2 
## names       :    co2_level=1,    co2_level=2,    co2_level=3,    co2_level=4,    co2_level=5,    co2_level=6, ... 
## unit        : micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, ... 
## time (days) : 2000-05-16
#printing max and min
max_value <- max(m0co2_raster)
print(max_value)
## class       : SpatRaster 
## dimensions  : 90, 120, 1  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source(s)   : memory
## name        :      max 
## min value   : 367.0749 
## max value   : 398.7363
#plotting May CO2 2000
co2may00_raster <- subset(m0co2_raster, s = 1)
#Adding titles 
plot(co2may00_raster,main = "May 2000 CO2", ylab = "Latitude", xlab = "Longitude",axes=TRUE)
#adding the world outline 
plot(world_outline, add = TRUE, lwd = 0.09)

Reading and Plotting September 2000 CO2

file_path_sep2000= "/Users/josefinacruz/Downloads/"
sep2000<- "CT2022.molefrac_glb3x2_2000-09.nc" 
s00nc_fnames <- paste(file_path_sep2000, sep2000, "", sep = "")
dname <- "co2"
s0co2_raster <- rast(s00nc_fnames,"co2")
s0co2_raster
## class       : SpatRaster 
## dimensions  : 90, 120, 34  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source      : CT2022.molefrac_glb3x2_2000-09.nc:co2 
## varname     : co2 
## names       :    co2_level=1,    co2_level=2,    co2_level=3,    co2_level=4,    co2_level=5,    co2_level=6, ... 
## unit        : micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, ... 
## time (days) : 2000-09-16
#printing max and min
max_value <- max(s0co2_raster)
print(max_value)
## class       : SpatRaster 
## dimensions  : 90, 120, 1  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source(s)   : memory
## name        :      max 
## min value   : 368.0644 
## max value   : 394.3675
# Plotting September CO2 2000
co2sep00_raster <- subset(s0co2_raster, s = 1)
#Adding titles 
plot(co2sep00_raster,main = "September 2000 CO2", ylab = "Latitude", xlab = "Longitude",axes=TRUE)
#adding the world outline 
plot(world_outline, add = TRUE, lwd = 0.09)

Reading and Plotting May 2010 CO2

#Reading in May 2010 CO2 
file_path_may2010= "/Users/josefinacruz/Downloads/"
may2010<- "CT2022.molefrac_glb3x2_2010-05.nc" 
m10nc_fname <- paste(file_path_may2010, may2010, "", sep = "")
dname <- "co2"
m1co2_raster <- rast(m10nc_fname,"co2")
m1co2_raster
## class       : SpatRaster 
## dimensions  : 90, 120, 34  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source      : CT2022.molefrac_glb3x2_2010-05.nc:co2 
## varname     : co2 
## names       :    co2_level=1,    co2_level=2,    co2_level=3,    co2_level=4,    co2_level=5,    co2_level=6, ... 
## unit        : micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, ... 
## time (days) : 2010-05-16
#printing max and min
max_value <- max(m1co2_raster)
print(max_value)
## class       : SpatRaster 
## dimensions  : 90, 120, 1  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source(s)   : memory
## name        :      max 
## min value   : 386.1300 
## max value   : 417.2132
# Plotting May CO2 2010
co2may10_raster <- subset(m1co2_raster, s = 1)
#Adding titles 
plot(co2may10_raster,main = "May 2010 CO2", ylab = "Latitude", xlab = "Longitude",axes=TRUE)
#adding the world outline 
plot(world_outline, add = TRUE, lwd = 0.09)

Reading and Plotting September 2010 CO2

file_path_sep2010='/Users/josefinacruz/Downloads/'
sep2010<- "CT2022.molefrac_glb3x2_2010-09.nc" 
s10nc_fname <- paste(file_path_sep2010, sep2010, sep = "")
dname <- "co2"
s1co2_raster <- rast(s10nc_fname,"co2")
s1co2_raster
## class       : SpatRaster 
## dimensions  : 90, 120, 34  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source      : CT2022.molefrac_glb3x2_2010-09.nc:co2 
## varname     : co2 
## names       :    co2_level=1,    co2_level=2,    co2_level=3,    co2_level=4,    co2_level=5,    co2_level=6, ... 
## unit        : micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, ... 
## time (days) : 2010-09-16
#printing max and min
max_values <- max(s1co2_raster)
print(max_values)
## class       : SpatRaster 
## dimensions  : 90, 120, 1  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source(s)   : memory
## name        :      max 
## min value   : 387.7731 
## max value   : 427.5804
# Plotting September CO2 2010
co2sep10_raster <- subset(s1co2_raster, s = 1)
#Adding titles
plot(co2sep10_raster,main = "September  2010 CO2", ylab = "Latitude", xlab = "Longitude",axes=TRUE)
#adding the world outline 
plot(world_outline, add = TRUE, lwd = 0.09)

Reading and Plotting May 2020 CO2

file_path_may2020= "/Users/josefinacruz/Downloads/"
may2020<- "CT2022.molefrac_glb3x2_2020-05.nc" 
m20nc_fname <- paste(file_path_may2020, may2020, "", sep = "")
dname <- "co2"
m2co2_raster <- rast(m20nc_fname,"co2")
m2co2_raster
## class       : SpatRaster 
## dimensions  : 90, 120, 34  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source      : CT2022.molefrac_glb3x2_2020-05.nc:co2 
## varname     : co2 
## names       :    co2_level=1,    co2_level=2,    co2_level=3,    co2_level=4,    co2_level=5,    co2_level=6, ... 
## unit        : micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, ... 
## time (days) : 2020-05-16
#printing max and min
max_value <- max(m2co2_raster)
print(max_value)
## class       : SpatRaster 
## dimensions  : 90, 120, 1  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source(s)   : memory
## name        :      max 
## min value   : 409.9515 
## max value   : 448.9832
# Plotting May CO2 2010
co2may20_raster <- subset(m2co2_raster, s = 1)
#adding titles
plot(co2may20_raster,main = "May 2020 CO2", ylab = "Latitude", xlab = "Longitude",axes=TRUE)
#adding the world outline 
plot(world_outline, add = TRUE, lwd = 0.09)

Reading and Plotting September 2020 CO2

file_path_sep2020='/Users/josefinacruz/Downloads/'
sep2020<- "CT2022.molefrac_glb3x2_2020-09.nc" 
s20nc_fname <- paste(file_path_sep2020, sep2020, sep = "")
dname <- "co2"
s2co2_raster <- rast(s20nc_fname,"co2")
s2co2_raster
## class       : SpatRaster 
## dimensions  : 90, 120, 34  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source      : CT2022.molefrac_glb3x2_2020-09.nc:co2 
## varname     : co2 
## names       :    co2_level=1,    co2_level=2,    co2_level=3,    co2_level=4,    co2_level=5,    co2_level=6, ... 
## unit        : micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, micromol mol-1, ... 
## time (days) : 2020-09-16
#printing max and min 
max_values <- max(s2co2_raster)
print(max_values)
## class       : SpatRaster 
## dimensions  : 90, 120, 1  (nrow, ncol, nlyr)
## resolution  : 3.02521, 2.022472  (x, y)
## extent      : -181.5126, 181.5126, -91.01124, 91.01124  (xmin, xmax, ymin, ymax)
## coord. ref. :  
## source(s)   : memory
## name        :      max 
## min value   : 411.2453 
## max value   : 443.4847
# Plotting September CO2 2020
co2sep20_raster <- subset(s2co2_raster, s = 1)
#adding titles
plot(co2sep20_raster,main = "September  2020 CO2", ylab = "Latitude", xlab = "Longitude",axes=TRUE)
#adding the world outline
plot(world_outline, add = TRUE, lwd = 0.09)

Regression plot for CO2 Monthly Mean for Years 2000, 2010, 2020

mmcsv_path <- "/Users/josefinacruz/Downloads/"
mmcsv_name <- "co2_mm_gl.csv"
mmcsv_file <- paste(mmcsv_path, mmcsv_name, sep="")
regrexm <- read.csv(mmcsv_file, skip = 38, header = TRUE, row.names = NULL)

#printing data frame 
str(regrexm)
## 'data.frame':    540 obs. of  7 variables:
##  $ year       : int  1979 1979 1979 1979 1979 1979 1979 1979 1979 1979 ...
##  $ month      : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ decimal    : num  1979 1979 1979 1979 1979 ...
##  $ average    : num  337 337 338 338 338 ...
##  $ average_unc: num  0.11 0.09 0.11 0.12 0.03 0.17 0.27 0.29 0.22 0.22 ...
##  $ trend      : num  336 336 337 337 337 ...
##  $ trend_unc  : num  0.09 0.1 0.1 0.1 0.1 0.11 0.11 0.11 0.11 0.11 ...
#filtering data for just the years im analyzing and the the months of May and September 
filtered_data <- regrexm[regrexm$year %in% c(2000, 2010, 2020) & regrexm$month %in% c(5, 9), ]

#filtering the month data 
data_month_5 <- filtered_data[filtered_data$month == 5, ]
data_month_9 <- filtered_data[filtered_data$month == 9, ]

# Perform linear regression for each month
lm_month_5 <- lm(average ~ year, data = data_month_5)
lm_month_9 <- lm(average ~ year, data = data_month_9)

# Plot the mean CO2 values against the years with titles 
plot(average ~ year, data = filtered_data, main = "CO2 Monthly Mean for Years 2000, 2010, 2020", xlab = "Year", ylab = "Mean CO2",pch = 19, col = ifelse(filtered_data$month == 5, "blue", "green"))

# Add regression lines for each month
abline(lm_month_5, col = "blue", lwd = 0.5)
abline(lm_month_9, col = "green", lwd = 0.5)

# Add overall regression line
abline(lm(average ~ year, data = filtered_data), col = "red", lwd = 2)

#adding a legend 
legend("topleft", legend = c("Overall", "May", "September"), col = c("red", "blue", "green"), lwd = 2, bty = "n", pch = 19, inset = c(0.02, 0.02))

Results

Maximum and minimum of the years table

Months and Year

Maximum

Minimum

2000 May 367.07 398.73
2000 September 368.06 394.36
2010 May 386.13 417.21
2010 September 387.77 427.58
2020 May 409.95 448.98
2020 September 411.24 443.48

Results Discussion

Analyzing the CO2 data spanning from May to September over the course of two decades reveals intriguing trends and patterns. Beginning with May, often regarded as the peak month for CO2 levels, the data paints a vivid picture of the planet’s changing atmospheric composition. In the year 2000, May witnessed a range of CO2 values from a minimum of 367.07 to a maximum of 398.73 micro moles per mol-1. Fast forward a decade to 2010, and the range expanded significantly, with CO2 levels oscillating between 386.13 and 417.21 micro moles per mol-1. However, perhaps the most striking revelation comes from examining May 2020, where the CO2 levels soared to unprecedented heights, with a minimum of 409.95 a nd a maximum of 448.98 micro moles per mol-1. The drastic jump of approximately 50 micro moles per mol-1 in just two decades underscores the alarming rate at which atmospheric CO2 concentrations have been rising.

Turning our attention to September, traditionally seen as the month with the lowest CO2 levels, the data reveals a similar trajectory of escalation. In the year 2000, September witnessed CO2 levels ranging from a minimum of 368.06 to a maximum of 394.36 micro moles per mol-1. By 2010, these values had surged, with the minimum reaching 387.77 and the maximum peaking at 427.5 micro moles per mol-1. Remarkably, in September 2020, the trend continued, with CO2 levels reaching new highs, ranging from a minimum of 411.24 to a maximum of 443.48 micro moles per mol-1. Throughout the years, the maximum and minimum values for September remained relatively close to those of May, confirming the expected natural trend of higher CO2 concentrations in May compared to September.

Overall we can make a point about to see the human impact by realizing the local trends of the data of all the maps. Seeing that local hot spots in the all the maps are in South america, Africa and China espeiclaly during May the max CO2 months but also seen in the September months. In the max CO2 month of May we see that North america and some of Europe appears in every max month as increasing high in carbon dioxide . This highlights how the cause of that increase carbon dioxide throughout the years is directly to related to human causes emissions and our pratices.

We then look at our regression plot analysis. I took the monthly annual mean for May and September from the years 2000,2010,2020 and plotted them to show the linear progression of the CO2 levels throughout the 20 years. The plot revealed a linear continuous upward trajectory in CO2 levels since the 2000s and for years to come. a compelling narrative of steadily rising CO2 levels since the turn of the century. while this helps to visually understand the data it also draws attention to how drastically this increase has been just in these last 20 years.

These findings are directly related to the recent climate change and show the trajectory of hurting our atmosphere further. Climate change is an ongoing fight, and by looking at recent data just in the last 20 years, we see the urgent need for concerted global action to mitigate the escalating levels of atmospheric CO2. The data serves as a stark reminder of the profound impact of human activities on the planet’s delicate ecological balance. It underscores the imperative for sustainable practices to safeguard the future of our planet.

Addressing the pressing challenge of climate change requires recognizing its severity and acting decisively. The escalating levels of atmospheric CO2 highlight the need for collaborative efforts on a global scale. These efforts should aim not only to mitigate the immediate impacts but also to implement long-term solutions that prioritize environmental sustainability. As we see the data shows long-term damages. The data surrounding the CO2 levels show the interconnectedness of human activities and their repercussions on the Earth’s ecosystems. Emphasizing the crucial role of collective action in preserving the health and integrity of our planet for generations to come.