[continued from Part 1]

Pacific Decadal Oscillation

The Pacific Decadal Oscillation, or PDO, is a pattern of ocean-atmosphere climate variability affecting the mid-latitude Pacific Basin. The PDO usually identified as either warm or cool surface waters in the Pacific Ocean, north of 20°N. The periodicity of the PDO ranges from multiple years to multiple decades (Mantua and Hare, 2002).

Like the AMO data from PART 1, the PDO used in this exercise was taken fro the KNMI Climate Explorer website (KNMI, 2019). A choice of indices was offered; in the end, the HadSST3 data was chosen to remain consistent with the global HadISST data used earlier.

i) Sea Surface Temperature (SST)

# Loading the Data
pdo_nc   <- nc_open(file.path(getwd(),"pdo_hadsst3.nc"))

pdo.monthly <- ncvar_get(pdo_nc,'index')
pdo.time <- ncvar_get(pdo_nc, 'time')

# Formatting Time
tunits<-ncatt_get(pdo_nc,"time",attname="units")
tustr<-strsplit(tunits$value, " ")
pdo.date <-as.character(as.Date(pdo.time*365.25/12,origin=unlist(tustr)[3]))

# Data Frame
pdo.df <- data.frame("year"=format(as.Date(pdo.date, format="%Y-%m-%d"),"%Y"),
                  "month"=format(as.Date(pdo.date, format="%Y-%m-%d"),"%m"),
                  "pdo"=pdo.monthly)

# Annual Aggregation
pdo.an <- aggregate(pdo~year,pdo.df,mean)

# Finding the Overlap
pdo.an <- pdo.an[1:107,]
yrs  <- yrs[15:121]
asst <- asst[,,15:121]

# SST Timeseries 
sst_ts <- pdo.an$pdo

# A Quick Look 
plot(yrs,sst_ts,type='l',xlab='Year',ylab='SST Anomaly',main='PDO')

c.matrix <- matrix(NA,length(lon),length(lat))
t.matrix <- matrix(NA,length(lon),length(lat))

for (i in 1:dim(lon)) {
  for (j in 1:dim(lat)) {
    if (length(asst[i,j,][!is.na(asst[i,j,])])>2){
    c.matrix[i,j] <- cor(asst[i,j,], sst_ts)
    p.vals <- cor.test(asst[i,j,], sst_ts)
    t.matrix[i, j] <- p.vals$p.value
    }
  }
}

# Add to Plotting Data
grid$corr <- as.vector(c.matrix)
grid$pval <- as.vector(t.matrix)

# Significance
sig <- subset(grid[, c(1, 2, 5, 6)], pval < 0.01)
sig <- SpatialPointsDataFrame(coords = sig[, c(1, 2)], data = sig)

# Plot
levelplot(corr~x*y, data=grid , 
              col.regions = pal(100),xlab='Longitude',ylab='Latitude',main=paste0('Correlation of SSTA with PDO')) + 
              layer(sp.polygons(world.land, fill='white')) +
              layer(sp.points(sig, pch = 20, cex = 0.01, col = "black"))

# LM. Linear regression

r.matrix <- matrix(NA,length(lon),length(lat))
s.matrix <- matrix(NA,length(lon),length(lat))

for (i in 1:dim(lon)) {
  for (j in 1:dim(lat)) {
    if (length(asst[i,j,][!is.na(asst[i,j,])])>2){
      r.lm <- lm(asst[i,j,]~sst_ts)
      r.matrix[i,j] <- r.lm$coefficients[2]
      smm<-summary(r.lm)
      s.matrix[i, j] <- smm$coefficients[8]
    }
  }
}

grid$reg <- as.vector(r.matrix)
grid$sig <- as.vector(s.matrix)

sig <- subset(grid[, c(1, 2, 5, 6)], pval < 0.01)
sig <- SpatialPointsDataFrame(coords = sig[, c(1, 2)], data = sig)

#plot
levelplot(reg~x*y, data=grid , at=c(-30:30)/10,
          col.regions = pal(100),xlab='Longitude',ylab='Latitude',
          main='Regression of SSTA with PDO') + 
  layer(sp.polygons(world.land, fill='white')) +
  layer(sp.points(sig, pch = 20, cex = 0.005, col = "black"))

ii) Sea Level Pressure (SLP)

pdo_nc   <- nc_open(file.path(getwd(),"pdo_hadsst3.nc"))

pdo.monthly <- ncvar_get(pdo_nc,'index')
pdo.time <- ncvar_get(pdo_nc, 'time')

tunits<-ncatt_get(pdo_nc,"time",attname="units")
tustr<-strsplit(tunits$value, " ")
pdo.date <-as.character(as.Date(pdo.time*365.25/12,origin=unlist(tustr)[3]))

pdo.df <- data.frame("year"=format(as.Date(pdo.date, format="%Y-%m-%d"),"%Y"),
                  "month"=format(as.Date(pdo.date, format="%Y-%m-%d"),"%m"),
                  "pdo"=pdo.monthly)

pdo.an <- aggregate(pdo~year,pdo.df,mean)
pdo.an <- pdo.an[1:112,]

slp_ts <- pdo.an$pdo


c.matrix <- matrix(NA,length(lon),length(lat))
t.matrix <- matrix(NA,length(lon),length(lat))

for (i in 1:dim(lon)) {
  for (j in 1:dim(lat)) {
    if (length(asst[i,j,][!is.na(asst[i,j,])])>2){
    c.matrix[i,j] <- cor(asst[i,j,], slp_ts)
    p.vals <- cor.test(asst[i,j,], slp_ts)
    t.matrix[i, j] <- p.vals$p.value
    }
  }
}

grid$corr <- as.vector(c.matrix)
grid$pval <- as.vector(t.matrix)


levelplot(corr~x*y, data=grid , 
              col.regions = pal(100),xlab='Longitude',ylab='Latitude',main=paste0('Correlation of SLP with PDO')) + 
              layer(sp.polygons(world.land, fill='white'))

r.matrix <- matrix(NA,length(lon),length(lat))
s.matrix <- matrix(NA,length(lon),length(lat))

for (i in 1:dim(lon)) {
  for (j in 1:dim(lat)) {
    if (length(asst[i,j,][!is.na(asst[i,j,])])>2){
      r.lm <- lm(asst[i,j,]~slp_ts)
      r.matrix[i,j] <- r.lm$coefficients[2]
      smm<-summary(r.lm)
      s.matrix[i, j] <- smm$coefficients[8]
    }
  }
}

grid$reg <- as.vector(r.matrix)
grid$sig <- as.vector(s.matrix)


levelplot(reg~x*y, data=grid , at=c(-30:30)/10,
          col.regions = pal(100),xlab='Longitude',ylab='Latitude',
          main='Regression of SLP with PDO') + 
  layer(sp.polygons(world.land, fill='white'))

Analysis

The north Pacific is recognised as a region of high significance in almost all of the maps. This is to be expected; Mantua and Hare write that, in earlier studies, the climatic fingerprints of the PDO were most visible in this region. Other regions in various parts of the world were recognised, including the south Pacific and Indian Ocean (for SST) and the north Atlantic (for SLP).

[continued in PART 3]