In the face of climate change long term records are fundamental for detecting changes in the system of interest. For the purpose of this exercise sea level data records produced by tide gauges around Ireland will be analysed to investigate trends. The data is obtained from the National Tide Gauge Network and the Permanent Service of Mean Sea Level. The main purpose of the exercise is to investigate if sea level is increasing or decreasing around the coast of Ireland, and why these trends are occuring.
#Gerards assignment R
library(readr)
library(maps)
library(knitr)
#set working directory
setwd("~/College/Msc Climate Change/GY667/Assignment")
dir()
## [1] "arklow_monthly.csv" "Assignment 1.docx"
## [3] "Assignment 1.R" "ballycotton_monthly.csv"
## [5] "ballyglass_monthly.csv" "castletownbere_monthly.csv"
## [7] "data" "Dublin.merge.csv"
## [9] "dublin_monthly.csv" "dublin_monthly.rlrdata"
## [11] "dunmore_east_monthly.csv" "fenit_monthly.csv"
## [13] "galway_monthly.csv" "GY667 Assignment.Rmd"
## [15] "GY667_Assignment.html" "GY667_Assignment.Rmd"
## [17] "howth_monthly.csv" "keith"
## [19] "lmtrend.prn" "malin_monthly.csv"
## [21] "port_oriel_monthly.csv" "Readings"
## [23] "ringaskiddy_monthly.csv" "rossaveel_monthly.csv"
Read in the csv files from class. They contain data from the National Tide Gauge Network around Ireland. Each of the csv files have a month, year, height, x and time column. The height is recorded in meters.
Arklow = read.csv(file = "arklow_monthly.csv")
Ballycotton = read.csv(file = "ballycotton_monthly.csv", header = TRUE, sep = ",")
Ballyglass = read.csv(file = "ballyglass_monthly.csv", header = TRUE, sep = ",")
Castletownbere = read.csv(file = "castletownbere_monthly.csv", header = TRUE, sep = ",")
Dublin = read.csv(file = "dublin_monthly.csv", header = TRUE, sep = ",")
DunmoreEast = read.csv(file = "dunmore_east_monthly.csv", header = TRUE, sep = ",")
Fenit = read.csv(file = "fenit_monthly.csv", header = TRUE, sep = ",")
Galway = read.csv(file = "galway_monthly.csv", header = TRUE, sep = ",")
Howth = read.csv(file = "howth_monthly.csv", header = TRUE, sep = ",")
Malin = read.csv(file = "malin_monthly.csv", header = TRUE, sep = ",")
PortOriel = read.csv(file = "port_oriel_monthly.csv", header = TRUE, sep = ",")
Ringaskiddy = read.csv(file = "ringaskiddy_monthly.csv", header = TRUE, sep = ",")
Rossaveel = read.csv(file = "rossaveel_monthly.csv", header = TRUE, sep = ",")
Firstly remove the x column from the dataset as this is not needed in the analysis.
#Remove the column x from the dataframes
Arklow$X <- NULL
Ballycotton$X <- NULL
Ballyglass$X <- NULL
Castletownbere$X <- NULL
Dublin$X <- NULL
DunmoreEast$X <- NULL
Fenit$X <- NULL
Galway$X <- NULL
Howth$X <- NULL
Malin$X <- NULL
Ringaskiddy$X <- NULL
Rossaveel$X <- NULL
#check to see if column is removed by using head() function one one of the variables
head(Arklow)
## month year h time
## 1 9 2003 -0.07139583 15/09/2003
## 2 10 2003 -0.03571539 15/10/2003
## 3 11 2003 0.06729069 15/11/2003
## 4 12 2003 -0.05300403 15/12/2003
## 5 1 2004 0.02166355 15/01/2004
## 6 2 2004 -0.15815876 15/02/2004
Need to ensure that the date format is in the correct order for each of the NTGN dataframes.
Arklow$time <- as.Date(Arklow$time, format = "%d/%m/%Y")
Ballycotton$time <- as.Date(Ballycotton$time, format = "%d/%m/%Y")
Ballyglass$time <- as.Date(Ballyglass$time, format = "%d/%m/%Y")
Castletownbere$time <- as.Date(Castletownbere$time, format = "%d/%m/%Y")
Dublin$time <- as.Date(Dublin$time, format = "%d/%m/%Y")
DunmoreEast$time <- as.Date(DunmoreEast$time, format = "%d/%m/%Y")
Fenit$time <- as.Date(Fenit$time, format = "%d/%m/%Y")
Galway$time <- as.Date(Galway$time, format = "%d/%m/%Y")
Howth$time <- as.Date(Howth$time, format = "%d/%m/%Y")
Malin$time <- as.Date(Malin$time, format = "%d/%m/%Y")
PortOriel$time <- as.Date(PortOriel$time, format = "%d/%m/%Y")
Ringaskiddy$time <- as.Date(Ringaskiddy$time, format = "%d/%m/%Y")
Rossaveel$time <- as.Date(Rossaveel$time, format = "%d/%m/%Y")
Create a plot of the locations of the NTGN around Ireland.
#Map the points of tide gauges around Ireland
map("world",c("ireland","uk"),fill=TRUE,xlim=c(-12,-4),ylim=c(51,56))
map.axes(cex.axis=1)
title(main="Ireland Tide Gauge Locations (NTGN)",xlab="Longitude",ylab="Latitude")
points(-6.145231,52.792046
,pch=21,col="gray",bg="blue") # Arklow
points(-8.0007,51.8278
,pch=21,col="gray",bg="green") # Ballycotton
points(-9.8928,54.2536
,pch=21,col="gray",bg="olivedrab") # Ballyglass
points(-9.9034,51.6496
,pch=21,col="gray",bg="orange") # Castletownbere
points(-6.2217,53.3457
,pch=21,col="gray",bg="red") # Dublin
points(-6.99188,52.14767
,pch=21,col="gray",bg="purple") # Dunmore East
points(-9.8635645,52.270702
,pch=21,col="gray",bg="pink") # Fenit
points(-9.048,53.269
,pch=21,col="gray",bg="lightgreen") # Galway
points(-6.0683,53.3915
,pch=21,col="gray",bg="violet") # Howth
points(-7.3344,55.3717
,pch=21,col="gray",bg="darkblue") # Malin
points(-6.221441, 53.798042
,pch=21,col="gray",bg="darkgreen") # Port Oriel
points(-8.305566, 51.83496
,pch=21,col="gray",bg="yellow") # Ringaskiddy
points(-9.562056, 53.266926
,pch=21,col="gray",bg="cyan") # Rossaveel
From the map it is clear that the NTGN are spread out around Ireland. However, there appears to be more stations situated in the South East in comparison to the North of Ireland. The legend in the next plot corresponds to the map of the locations of the tide gauge network around Ireland
The records of the NTGN are plotted so that they arbitrarily offset in the vertical. This allows visual inspection of the lengths of the dataframes.
plot(Dublin$time, Dublin$h, type = 'l', col = 'red', yaxt = 'n', ylab = ' ', xlab = 'Year', ylim = c(4, -8), main = "NTGN record lengths")
lines(Arklow$time, Arklow$h - 2.2, col = 'blue')
lines(Ballycotton$time, Ballycotton$h - 1, col = 'green')
lines(Ballyglass$time, Ballyglass$h - 0.7, col = 'olivedrab')
lines(Castletownbere$time, Castletownbere$h - 1.5, col = 'orange')
lines(DunmoreEast$time, DunmoreEast$h - 2.5, col = 'purple')
lines(Fenit$time, Fenit$h + 0.5, col = 'pink')
lines(Galway$time, Galway$h - 3.2, col = 'light green')
lines(Howth$time, Howth$sl + 4, col = 'violet')
lines(Malin$time, Malin$h +1.8, col = 'dark blue')
lines(PortOriel$time, PortOriel$h + 2.5, col = 'dark green')
lines(Ringaskiddy$time, Ringaskiddy$h + 1.5, col = 'yellow')
lines(Rossaveel$time, Rossaveel$h + 3.0, col = 'cyan')
legend("topleft",
legend=c("Galway", "Dunmore East", "Arklow", "Castletownbere","Ballycotton", "Ballyglass","Dublin"),
col= c("light green", "purple", "blue", "orange", "green","olivedrab","red"), cex = 0.8, lty=1,lwd=1, bty="n")
legend("topright",
legend=c("Fenit", "Ringaskiddy", "Malin", "PortOriel", "Rossaveel", "Howth"),
col= c("pink", "yellow", "dark blue", "dark green", "cyan", "violet"), cex = 0.8, lty=1,lwd=1, bty="n")
From the output of the plot, it is clear that the Arklow dataframe is the longest from the NTGN. Similarly, from visual inspection it is clear that Howth and Fenit have relatively short records.
The Permanent Service of Mean Sea Level (PSMSL) records long term sea level change information from tide gauges. This data can then be obtained from the website for analysis. For the purpose of this assignment data was obtained from Malin Head, Portrush, Belfast, Bangor and Dublin. The data was initially downloaded as an Rlr file, and opened in excel. Within excel the data was formated as Year, Month and Rlr. Rlr is a revised local reference, and data at each station is defined as approximately 7000mm above mean sea level, this is used to avoid negative numbers. Within excel all the missing data which was coded as -99999 was converted to NA. This allows R to recognise missing data, so the -99999 values do not interfere with the analysis. The data was then saved as a .txt file on excel so that it could be easily read using R. The data was loaded using the following code.
path <- file.path(getwd(), "data")
dublin.psmsl <- read.table(file.path(path,"dublin_monthly1.txt"), header = TRUE)
malin.psmsl <- read.table(file.path(path,"malin_monthly1.txt"), header = TRUE)
portrush.psmsl <- read.table(file.path(path,"portrush_monthly1.txt"), header = TRUE)
belfast.psmsl <- read.table(file.path(path,"belfast_monthly1.txt"), header = TRUE)
bangor.psmsl <- read.table(file.path(path,"bangor_monthly1.txt"), header = TRUE)
Change the column names within each of the PSMSL dataframes.
colnames(dublin.psmsl) <- c("year", "month", "rlr")
colnames(portrush.psmsl) <- c("year", "month", "rlr")
colnames(belfast.psmsl) <- c("year", "month", "rlr")
colnames(bangor.psmsl) <- c("year", "month", "rlr")
colnames(malin.psmsl) <- c("year", "month", "rlr")
Using the following code a map was created to show the locations of the PSMSL stations. From the output, it is clear that PSMSL stations are concentrated in the North East of Ireland. Which is in contrast to the NTGN which is more evenly spread out.
map("world",c("ireland","uk"),fill=TRUE,xlim=c(-12,-4),ylim=c(51,56))
map.axes(cex.axis=1)
title(main="PSMSL Tide Gauge Locations",xlab="Longitude",ylab="Latitude")
points(-5.669,54.665
,pch=21,col="gray",bg="lightgreen") # Bangor
points(-5.917,54.600
,pch=21,col="gray",bg="cyan") # Belfast
points(-6.2217,53.3457
,pch=21,col="gray",bg="violet") # Dublin
points(-7.3344,55.3717
,pch=21,col="gray",bg="orange") # Malin
points(-6.657,55.207
,pch=21,col="gray",bg="blue") # Portrush
A plot was then created that is arbitrarily offset on the vertical, of the record lengths for the PSMSL data. This allows for visual inspection of data to view the record lengths and see if there is any missing data. The legend on the plot corresponds with the map of the PSMSL locations
plot(dublin.psmsl$year, dublin.psmsl$rlr - 6500, type = 'l', col = 'violet', xlab = 'Year', ylab = ' ', ylim = c(0, 3500), xlim = c(1850, 2020), yaxt = 'n', main = "PSMSL record lengths")
lines(portrush.psmsl$year, portrush.psmsl$rlr - 6000, col = 'blue')
lines(belfast.psmsl$year, belfast.psmsl$rlr - 5500, col = 'cyan')
lines(bangor.psmsl$year, bangor.psmsl$rlr - 5000, col = 'lightgreen')
lines(malin.psmsl$year, malin.psmsl$rlr - 4500, col = 'orange')
legend("topleft",
legend=c("Malin", "Bangor", "Belfast", "Portrush","Dublin"),
col= c("Orange", "lightgreen", "cyan", "blue","violet"), cex = 1, lty=1,lwd=1.2, bty="n")
From the output it is clear tht Dublin has the longest tide gauge record. There appears to be an increasing trend from the year 2000 onwards which will be further investigated. It is also clear from the output that the stations are no longer currently recording tidegauge data. Belfast had a relatively short recording period. Similarly it appears that Malin stopped recording tidal information around the year 2000. There is an overlap between the NTGN data and the PSMSL data for Dublin and Malin which will be further investigated.
For the purpose of this exercise, both Dublin and Malin PSMSL data is to be merged with NTGN data, in order to investigate long term trends. The data from the PSMSL and NTGN have different formats, therefore the data needs to be manipulated to get them into the same format, so an analysis can be conducted. Firstly the PSMSL data was manipulated to get into the correct format. According to the PSMSL website, 7007 needs to be subtracted from the Dublin Rlr data to get it into mm. Then the mean was removed from the PSMSL data. The NTGN data is recorded in meters, and was therefore multiplied by 1000 to get into mm. Once the two dataframes had similar data, they were merged by year and month.
#add an extra column
dublin.psmsl <- cbind(NA, dublin.psmsl)
#rename the empty column
colnames(dublin.psmsl) <- c("sla", "year", "month", "rlr")
#reorder the data
dublin.psmsl <- dublin.psmsl[ ,c(2, 3, 4, 1)]
head(dublin.psmsl)
## year month rlr sla
## 1 1938 1 6973 NA
## 2 1938 2 6833 NA
## 3 1938 3 6961 NA
## 4 1938 4 6808 NA
## 5 1938 5 6796 NA
## 6 1938 6 6860 NA
#the new column called sla input rlr data into the column and then conduct the analysis.
dublin.psmsl$sla <- dublin.psmsl$rlr
#for Dublin its -7007 according to PSMSL website to subtract from the data
dublin.psmsl$sla <- dublin.psmsl$sla - 7007
# subtract the mean of the rlr data and put into the sla column
dublin.psmsl$sla <- dublin.psmsl$sla - mean(dublin.psmsl$sla, na.rm = TRUE)
#need to change the NTGN data from meters into mm so multiply the data by 1000
Dublin$h <- Dublin$h * 1000
head(Dublin)
## month year h time
## 1 4 2007 -207.68895 2007-04-15
## 2 5 2007 -94.45065 2007-05-15
## 3 6 2007 -36.45109 2007-06-15
## 4 7 2007 -42.19667 2007-07-15
## 5 8 2007 -103.93555 2007-08-15
## 6 9 2007 -113.80456 2007-09-15
#merge the NTGN and PSMSL data together
Dublin.merge <- merge(Dublin, dublin.psmsl, all = TRUE)
head(Dublin.merge)
## month year h time rlr sla
## 1 1 1938 NA <NA> 6973 3.206776
## 2 1 1939 NA <NA> 7153 183.206776
## 3 1 1940 NA <NA> 6985 15.206776
## 4 1 1941 NA <NA> 6997 27.206776
## 5 1 1942 NA <NA> 6775 -194.793224
## 6 1 1943 NA <NA> 7086 116.206776
Using the new merged dataframe, the NTGN and PSMSL data were plotted to visually inspect the data, to see if there was an overlap.
plot(Dublin.merge$year, Dublin.merge$sla, col = 'black', type = 'l', main = 'Dublin PSMSL and Dublin NTGN', ylab = 'sea level', xlab = 'year')
lines(Dublin.merge$year, Dublin.merge$h, col = 'red')
legend("topleft", legend=c("Dublin PSMSL", "Dublin NTGN"),
col= c("Black", "Red"), cex = 1, lty=1,lwd=1.2, bty="n")
From the output it is clear that the data has an overlapping period. To find the period that the data overlaps, the merged dataframe was visually inspected, and the data overlaps from April 2007 to December 2009. A new dataframe was then created, which contains the overlapping data only.
# used the column and row numbers where they overlap to create a new dataframe called dublin overlap
Dublin.overlap <- Dublin.merge[ c(315,396,476,556,636,716,796,876,957,71,153,235,316,397,477,557,637,717,797,
877,958,72,154,236,317,398,478,558,638,718,798,878,959), c(1,2,3,4,5,6) ]
head(Dublin.overlap)
## month year h time rlr sla
## 315 4 2007 -207.68895 2007-04-15 6980 10.20678
## 396 5 2007 -94.45065 2007-05-15 7085 115.20678
## 476 6 2007 -36.45109 2007-06-15 7138 168.20678
## 556 7 2007 -42.19667 2007-07-15 7143 173.20678
## 636 8 2007 -103.93555 2007-08-15 7081 111.20678
## 716 9 2007 -113.80456 2007-09-15 7067 97.20678
The difference between the data from PSMSL and the NTGN was then calculated within the overlapping dataframe. The difference is then plotted to investigate if the data is relatively constant.
#from this we want to subtract the PSMSL data from the NTGN data to get the difference between the two
#add a new column to Dublin.overlap
Dublin.overlap <- cbind(NA, Dublin.overlap)
colnames(Dublin.overlap) <- c("minus", "month", "year", "h", "time", "rlr", "sla")
Dublin.overlap <- Dublin.overlap[ ,c(2, 3, 4, 5, 6, 7, 1)]
# put the data from the PSMSL into the minus column
Dublin.overlap$minus <- Dublin.overlap$sla
#subtract the PSMSL data - NTGN data
Dublin.overlap$minus <- Dublin.overlap$minus - Dublin.overlap$h
head(Dublin.overlap)
## month year h time rlr sla minus
## 315 4 2007 -207.68895 2007-04-15 6980 10.20678 217.8957
## 396 5 2007 -94.45065 2007-05-15 7085 115.20678 209.6574
## 476 6 2007 -36.45109 2007-06-15 7138 168.20678 204.6579
## 556 7 2007 -42.19667 2007-07-15 7143 173.20678 215.4034
## 636 8 2007 -103.93555 2007-08-15 7081 111.20678 215.1423
## 716 9 2007 -113.80456 2007-09-15 7067 97.20678 211.0113
#minus column is the PSMSL data minus the NTGN data plot this
plot(Dublin.overlap$time, Dublin.overlap$minus,type = 'l', col = 'olivedrab', xlab = "Years",
ylab = "PSMSL and NTGN Difference", main = "Difference between PSMSL and NTGN")
From the output it is clear that difference between the PSMSL and NTGN for Dublin is quite constant and ranges from 190 to 220 mm which is an expected range.
The mean of the difference between the PSMSL data and the NTGN is then calculated, and added onto the NTGN data. This should create a consistent time frame. This is investigated using a plot.
mean(Dublin.overlap$minus)
## [1] 206.5467
#from the output the mean is equal to 206.5467mm round it to 207 mm and add that onto the NTGN data
Dublin.merge$h <- Dublin.merge$h + 207
#plot the graph again for Dublin PSMSL and Dublin NTGN data with the difference added on
plot(Dublin.merge$year, Dublin.merge$sla, col = 'black', type = 'l')
lines(Dublin.merge$year, Dublin.merge$h, col = 'red')
legend("topleft", legend=c("Dublin PSMSL", "Dublin NTGN"),
col= c("Black", "Red"), cex = 1, lty=1,lwd=1.2, bty="n")
From the output the data looks correct. Therefore, the data was merged together by rows, getting the mean of the two rows and putting the output into a new column. The new column contains a continuous timeseries data for Dublin, using data from Dublin PSMSL and Dublin NTGN. Then plot the new timeseries data to see if its consistent.
#get the mean of the two rows in a new column
Dublin.merge$combined <- NA
Dublin.merge$combined <- rowMeans(Dublin.merge[c('sla','h')], na.rm = TRUE)
plot(Dublin.merge$year, Dublin.merge$combined, type = 'p', col = 'olivedrab', main = 'Dublin Merged', ylab = 'Sea level', xlab = 'year')
lm(Dublin.merge$year~Dublin.merge$combined)
##
## Call:
## lm(formula = Dublin.merge$year ~ Dublin.merge$combined)
##
## Coefficients:
## (Intercept) Dublin.merge$combined
## 1.976e+03 8.889e-02
From the output there is clear increase in sealevel rise from the year 2000 onwards. This may have resulted from a variety of factors, including ongoing work in Dublin harbour. An lm function was then carried out on the new timeseries, to investigate the trend.From the output there is an increase in sea level of 0.0889mm per year.
For the purpose of this exercise the Malin PSMSL and the Malin NTGN data need to be merged together. Similar steps to Dublin were used to format the data into a standardised format. For Malin PSMSL data the mean was removed and then according to the PSMSL website 7037 had to be subtracted. The NTGN data for Malin was multiplied by 1000 to convert it from meters into mm. Once both the datasets had similar units they were merged by year and month.
#add an extra column
malin.psmsl <- cbind(NA, malin.psmsl)
colnames(malin.psmsl) <- c("sla", "year", "month", "rlr")
malin.psmsl <- malin.psmsl[ ,c(2, 3, 4, 1)]
#the new column called sla input rlr data into the column and then conduct the analysis.
malin.psmsl$sla <- malin.psmsl$rlr
#for Malin its -7037 according to PSMSL website to subtract from the data
malin.psmsl$sla <- malin.psmsl$sla - 7037
#need to remove the mean from the psmsl data
malin.psmsl$sla <- malin.psmsl$sla - mean(malin.psmsl$sla, na.rm = TRUE)
head(malin.psmsl)
## year month rlr sla
## 1 1958 2 7117 33.92621
## 2 1958 3 NA NA
## 3 1958 4 NA NA
## 4 1958 5 7027 -56.07379
## 5 1958 6 7027 -56.07379
## 6 1958 7 7117 33.92621
#need to change the NTGN data from meters into mm so multiply the data by 1000
Malin$h <- Malin$h * 1000
head(Malin)
## month year h time
## 1 12 2008 -11.56832 2008-12-15
## 2 1 2009 144.87506 2009-01-15
## 3 2 2009 -96.44207 2009-02-15
## 4 3 2009 -54.93499 2009-03-15
## 5 4 2009 -52.47915 2009-04-15
## 6 5 2009 -33.58082 2009-05-15
#merge the NTGN and PSMSL data together
Malin.merge <- merge(Malin, malin.psmsl, all = TRUE)
head(Malin.merge)
## month year h time rlr sla
## 1 1 1959 NA <NA> 7087 3.926214
## 2 1 1960 NA <NA> 7087 3.926214
## 3 1 1961 NA <NA> 7207 123.926214
## 4 1 1962 NA <NA> 7237 153.926214
## 5 1 1963 NA <NA> 6937 -146.073786
## 6 1 1964 NA <NA> 7117 33.926214
Once the data has merged successfully plot Malin PSMSL and Malin NTGN data, which allows a visual inspection of the data to see if it overlaps.
plot(Malin.merge$year, Malin.merge$sla, col = 'black', type = 'l')
lines(Malin.merge$year, Malin.merge$h, col = 'red')
legend("topleft", legend=c("Malin PSMSL", "Malin NTGN"),
col= c("Black", "Red"), cex = 1, lty=1,lwd=1.2, bty="n")
Having standardised the data and plotting a graph for Malin PSMSL and Malin NTGN there is a clear gap where no data was recorded. Both of the dataframes were then visually inspected, the Malin PSMSL data stopped recording in June 2002, while the Malin NTGN data started recording in 2008, meaning there is a gap of about six years with no records. To calculate the trend of Malin from 1958 to present, another dataset located near Malin with similar trends can be used to infill the missing the data.Which is a similar approach used by Dangendorf et al., 2017. A station located near Malin is Portrush. To investigate if Portrush could be used as a proxy for the missing data in the Malin timeseries, it must first be manipulated into the standardised format.
portrush.psmsl <- cbind(NA, portrush.psmsl)
colnames(portrush.psmsl) <- c("sla", "year", "month", "rlr")
portrush.psmsl <- portrush.psmsl[ ,c(2, 3, 4, 1)]
head(portrush.psmsl)
## year month rlr sla
## 1 1995 7 7019 NA
## 2 1995 8 6931 NA
## 3 1995 9 7005 NA
## 4 1995 10 7212 NA
## 5 1995 11 7125 NA
## 6 1995 12 7056 NA
#the new column called sla input rlr data into the column and then conduct the analysis.
portrush.psmsl$sla <- portrush.psmsl$rlr
#for Portrush its -7027 according to PSMSL website to subtract from the data
portrush.psmsl$sla <- portrush.psmsl$sla - 7027
#need to remove the mean from the psmsl data
# subtract the mean of the rlr data and put into the sla column
portrush.psmsl$sla <- portrush.psmsl$sla - mean(portrush.psmsl$sla, na.rm = TRUE)
head(portrush.psmsl)
## year month rlr sla
## 1 1995 7 7019 -24.31641
## 2 1995 8 6931 -112.31641
## 3 1995 9 7005 -38.31641
## 4 1995 10 7212 168.68359
## 5 1995 11 7125 81.68359
## 6 1995 12 7056 12.68359
The Portrush, Malin NTGN and Main PSMSL data is then plotted to investigate if Portrush data overlaps the two Malin dataframes, and if the trends are similar.
plot(Malin.merge$year, Malin.merge$sla, col = 'black', type = 'l', main = 'Graph of Malin PSMSL, Portrush PSMSL and MAlin NTGN', ylab = 'sea level mm', xlab = 'years')
lines(Malin.merge$year, Malin.merge$h, col = 'red')
lines(portrush.psmsl$year, portrush.psmsl$sla, col = 'green3')
legend("topleft", legend=c("Malin PSMSL", "Portrush PSMSL", "Malin NTGN"),
col= c("Black", "Green3", "Red"), cex = 1, lty=1,lwd=1.2, bty="n")
From the graph there is a clear overlap between Malin PSMSL and Portrush PSMSL. Similarly, there is a clear overlap between Portrush PSMSL and Malin NTGN. The Portrush PSMSL trend looks similar to the Malin dataframes and can therefore be used to infill the missing data.
For the purpose of this exercise the Portrush PSMSL data is merged to the Malin PSMSL data by year, and then visually inspected to see where the two dataframes overlap. A new dataframe is then created that contains the overlapping data only, and contains data from July 1995 to June 2002. Once the new data frame is created, the difference between Portrush PSMSL and Malin PSMSL is calculated for each row. The mean of the difference is then calculated and added onto the Portrush sea level data. The Portrush and Malin PSMSL sea level data is then merged together by rows, getting the mean of the two rows and putting the output into a new column. This new column contains continuous timeseries data for Malin, using data from Malin PSMSL and Portrush PSMSL.
colnames(portrush.psmsl) <- c("year", "month", "Rlr", "Sla")
head(portrush.psmsl)
## year month Rlr Sla
## 1 1995 7 7019 -24.31641
## 2 1995 8 6931 -112.31641
## 3 1995 9 7005 -38.31641
## 4 1995 10 7212 168.68359
## 5 1995 11 7125 81.68359
## 6 1995 12 7056 12.68359
malin.prush.merge<- merge(malin.psmsl, portrush.psmsl, all = TRUE)
#inspect the merge betwen malin and portrush
head(malin.prush.merge)
## year month rlr sla Rlr Sla
## 1 1958 2 7117 33.92621 NA NA
## 2 1958 3 NA NA NA NA
## 3 1958 4 NA NA NA NA
## 4 1958 5 7027 -56.07379 NA NA
## 5 1958 6 7027 -56.07379 NA NA
## 6 1958 7 7117 33.92621 NA NA
#From visually inspecting the data, the PSMSL data for Malin and Portrush overlap on July 1995 to June 2002.
#Need to extract the overlapping data into a new data frame.
malin.prush.overlap <- malin.prush.merge[ c(450:533), c(1:6) ]
head(malin.prush.overlap)
## year month rlr sla Rlr Sla
## 450 1995 7 7119 35.92621 7019 -24.31641
## 451 1995 8 7044 -39.07379 6931 -112.31641
## 452 1995 9 7109 25.92621 7005 -38.31641
## 453 1995 10 7313 229.92621 7212 168.68359
## 454 1995 11 7202 118.92621 7125 81.68359
## 455 1995 12 7146 62.92621 7056 12.68359
malin.prush.overlap$minus <- malin.prush.overlap$Sla- malin.prush.overlap$sla
head(malin.prush.overlap)
## year month rlr sla Rlr Sla minus
## 450 1995 7 7119 35.92621 7019 -24.31641 -60.24262
## 451 1995 8 7044 -39.07379 6931 -112.31641 -73.24262
## 452 1995 9 7109 25.92621 7005 -38.31641 -64.24262
## 453 1995 10 7313 229.92621 7212 168.68359 -61.24262
## 454 1995 11 7202 118.92621 7125 81.68359 -37.24262
## 455 1995 12 7146 62.92621 7056 12.68359 -50.24262
mean(malin.prush.overlap$minus, na.rm = TRUE)
## [1] 31.09884
# the mean is equal to 31.09884 so add this on to the Portrush data set
#add the mean onto the portrush data
malin.prush.merge$Sla <- malin.prush.merge$Sla + 31
malin.prush.merge$combined <- NA
malin.prush.merge$combined <- rowMeans(malin.prush.merge[c('sla','Sla')], na.rm = TRUE)
head(malin.prush.merge)
## year month rlr sla Rlr Sla combined
## 1 1958 2 7117 33.92621 NA NA 33.92621
## 2 1958 3 NA NA NA NA NaN
## 3 1958 4 NA NA NA NA NaN
## 4 1958 5 7027 -56.07379 NA NA -56.07379
## 5 1958 6 7027 -56.07379 NA NA -56.07379
## 6 1958 7 7117 33.92621 NA NA 33.92621
To inspect the new column that contains merged data from Malin PSMSL and Portrush PSMSL plot a graph. The graph also contains Malin NTGN data, as this has not yet been merged into one new dataframe.
plot(malin.prush.merge$year, malin.prush.merge$combined, type = 'l', main = 'Malin and Portrush PSMSL Merge and Malin NTGN', ylab = 'sea level mm', xlab = 'year')
lines(Malin$year, Malin$h, col = 'red')
legend("bottomleft", legend=c("Merged Malin and Portrush PSMSL", "Malin NTGN"),
col= c("Black", "Red"), cex = 1, lty=1,lwd=1.2, bty="n")
The graph illustrates the merged PSMSL data and it also highlights that Malin NTGN data also needs to be merged to create a continuous data set. To do this a new dataset is created by merging the Malin and Portrush PSMSL merge with Malin NTGN data. This data is merged by year. Once the new dataframe is created, it is analysed visually to note where the two datasets overlap. A new dataframe is then created that contains the overlapping period only
main.merge <- merge(malin.prush.merge, Malin, all = TRUE)
#get rid of the time column
main.merge$time <- NULL
# visually inspect to find the overlapping period
main.merge.overlap <- main.merge[ c(611:718), c(1:8)]
head(main.merge.overlap)
## year month rlr sla Rlr Sla combined h
## 611 2008 12 NA NA 7007 -5.316406 -5.316406 -11.56832
## 612 2009 1 NA NA 7169 156.683594 156.683594 144.87506
## 613 2009 2 NA NA 6949 -63.316406 -63.316406 -96.44207
## 614 2009 3 NA NA 6973 -39.316406 -39.316406 -54.93499
## 615 2009 4 NA NA 6974 -38.316406 -38.316406 -52.47915
## 616 2009 5 NA NA 6998 -14.316406 -14.316406 -33.58082
Within the overlapping dataframe the difference between Malin NTGN data and Malin Portrush PSMSL merge is calculated by row. The mean of the difference is then conducted and added onto the Malin NTGN data. rowMeans function is used to calculate the mean of the two rows and putting the output into a new column. The new column contains continuous data for Malin. The column can then be used to investigate the sea level trend for Malin.
#add an extra column to get the difference between the Malin NTGN data and the merged Dub.prush PSMSL data
main.merge.overlap$difference <- NA
main.merge.overlap$difference <- main.merge.overlap$h
main.merge.overlap$difference <- main.merge.overlap$difference - main.merge.overlap$combined
head(main.merge.overlap)
## year month rlr sla Rlr Sla combined h difference
## 611 2008 12 NA NA 7007 -5.316406 -5.316406 -11.56832 -6.251918
## 612 2009 1 NA NA 7169 156.683594 156.683594 144.87506 -11.808538
## 613 2009 2 NA NA 6949 -63.316406 -63.316406 -96.44207 -33.125667
## 614 2009 3 NA NA 6973 -39.316406 -39.316406 -54.93499 -15.618587
## 615 2009 4 NA NA 6974 -38.316406 -38.316406 -52.47915 -14.162744
## 616 2009 5 NA NA 6998 -14.316406 -14.316406 -33.58082 -19.264418
mean(main.merge.overlap$difference, na.rm = TRUE)
## [1] -20.34227
#the mean is equal to -20.34227
#add the mean to the NTGN for Dublin
main.merge$h <- main.merge$h -20
#now want to merge the two of them together so do it by mean. Firstly add a new column
main.merge$final <- NA
main.merge$final <- rowMeans(main.merge[c('combined','h')], na.rm = TRUE)
head(main.merge)
## year month rlr sla Rlr Sla combined h final
## 1 1958 2 7117 33.92621 NA NA 33.92621 NA 33.92621
## 2 1958 3 NA NA NA NA NaN NA NaN
## 3 1958 4 NA NA NA NA NaN NA NaN
## 4 1958 5 7027 -56.07379 NA NA -56.07379 NA -56.07379
## 5 1958 6 7027 -56.07379 NA NA -56.07379 NA -56.07379
## 6 1958 7 7117 33.92621 NA NA 33.92621 NA 33.92621
To investigate the trends of the continuous data for Malin a graph is plotted which shows the years with increasing and decreasing sea level. Similarly the lm function is used to detect trends. The output from the lm function illustrates that Malins sea level is increasing by 0.004 mm per year.
#plot the main merge which is a timeseries for Malin using portrush data
plot(main.merge$year, main.merge$final, type = 'l', col = 'green3', main = 'Malin Continuous', xlab = 'years', ylab = 'sea level mm')
lm(main.merge$year~main.merge$final)
##
## Call:
## lm(formula = main.merge$year ~ main.merge$final)
##
## Coefficients:
## (Intercept) main.merge$final
## 1.988e+03 4.234e-03
For the purpose of this exercise a map is to be created of Ireland that illustrates increasing or decreasing trends at station locations. Firstly the NTGN data for each of the stations is multiplied by 1000 to convert it from meters into milimeters. Dublin and Malin NTGN have already been converted previously in the code.
Galway$h <- Galway$h * 1000
Castletownbere$h <- Castletownbere$h * 1000
DunmoreEast$h <- DunmoreEast$h * 1000
Ballyglass$h <- Ballyglass$h * 1000
Arklow$h <- Arklow$h * 1000
Ballycotton$h <- Ballycotton$h * 1000
Fenit$h <- Fenit$h * 1000
Howth$sl <- Howth$sl * 1000
PortOriel$h <- PortOriel$h * 1000
Ringaskiddy$h <- Ringaskiddy$h * 1000
Rossaveel$h <- Rossaveel$h * 1000
The lm function is then used on each of the NTGN stations to investigate if they have increasing or decreasing trends.
lm(Ballyglass$year~Ballyglass$h)
##
## Call:
## lm(formula = Ballyglass$year ~ Ballyglass$h)
##
## Coefficients:
## (Intercept) Ballyglass$h
## 2.013e+03 1.711e-03
lm(Castletownbere$year~Castletownbere$h)
##
## Call:
## lm(formula = Castletownbere$year ~ Castletownbere$h)
##
## Coefficients:
## (Intercept) Castletownbere$h
## 2.014e+03 1.075e-02
lm(Dublin$year~Dublin$h)
##
## Call:
## lm(formula = Dublin$year ~ Dublin$h)
##
## Coefficients:
## (Intercept) Dublin$h
## 2.012e+03 9.718e-03
lm(DunmoreEast$year~DunmoreEast$h)
##
## Call:
## lm(formula = DunmoreEast$year ~ DunmoreEast$h)
##
## Coefficients:
## (Intercept) DunmoreEast$h
## 2.016e+03 3.274e-03
lm(Galway$year~Galway$h)
##
## Call:
## lm(formula = Galway$year ~ Galway$h)
##
## Coefficients:
## (Intercept) Galway$h
## 2.012e+03 6.012e-03
lm(Malin$year~Malin$h)
##
## Call:
## lm(formula = Malin$year ~ Malin$h)
##
## Coefficients:
## (Intercept) Malin$h
## 2.013e+03 1.524e-03
lm(Arklow$year~Arklow$h)
##
## Call:
## lm(formula = Arklow$year ~ Arklow$h)
##
## Coefficients:
## (Intercept) Arklow$h
## 2.011e+03 3.157e-03
lm(Ballycotton$year~Ballycotton$h)
##
## Call:
## lm(formula = Ballycotton$year ~ Ballycotton$h)
##
## Coefficients:
## (Intercept) Ballycotton$h
## 2.014e+03 -1.933e-03
lm(Fenit$year~Fenit$h)
##
## Call:
## lm(formula = Fenit$year ~ Fenit$h)
##
## Coefficients:
## (Intercept) Fenit$h
## 2.015e+03 -7.279e-04
lm(Howth$year~Howth$sl)
##
## Call:
## lm(formula = Howth$year ~ Howth$sl)
##
## Coefficients:
## (Intercept) Howth$sl
## 2.012e+03 9.245e-04
lm(PortOriel$year~PortOriel$h)
##
## Call:
## lm(formula = PortOriel$year ~ PortOriel$h)
##
## Coefficients:
## (Intercept) PortOriel$h
## 2.014e+03 -1.016e-03
lm(Ringaskiddy$year~Ringaskiddy$h)
##
## Call:
## lm(formula = Ringaskiddy$year ~ Ringaskiddy$h)
##
## Coefficients:
## (Intercept) Ringaskiddy$h
## 2.016e+03 1.765e-03
lm(Rossaveel$year~Rossaveel$h)
##
## Call:
## lm(formula = Rossaveel$year ~ Rossaveel$h)
##
## Coefficients:
## (Intercept) Rossaveel$h
## 2.015e+03 -2.512e-03
The output of the lm function for each of the NTGN station is recorded in excel, with the statin name, latitude and longitude. This data is then read in using R and stored in a dataframe named lmtrend.
lmtrend <- read.csv(file.path(path,"lmtrend.csv"), header = TRUE)
To create a map of Ireland that illustrates increasing or decreasing trend at a station location, the following libraries must be loaded. Leaflet is used to create a map, dplyr is used to run the pipeline function and RcolorBrewer is used to create the colour scale.
#load the leaflet and dplyr library
library(leaflet)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(RColorBrewer)
A new function is created called color_fun, which creates the colour scale in red of the increasing or decreasing trends of sea level. Then leaflet is used to create a map of Ireland, the map chosen is CartoDB.Positron, and circles are added to mark the station location. The circles are filled with a colour on the red scale, where dark red indicates a large increase in sea level, and lighter colours indicate less of increase, white indicates a decreasing trend. The circles are also interactive and can be clicked on to give the station name. A legend is also added to the map which allows for easier interpretation of the trends.
color_fun <- colorNumeric('Reds',lmtrend$lm)
leaflet(data=lmtrend,height=430,width=600) %>% addProviderTiles('CartoDB.Positron') %>%
setView(-8,53.5,6) %>% addCircleMarkers(fillColor=~color_fun(lmtrend$lm),weight=0,fillOpacity = 0.99, popup=~station) %>%
addLegend(pal=color_fun,values=~lmtrend$lm,title="Sea level rise (mm)",position='bottomright')
## Assuming "lon" and "lat" are longitude and latitude, respectively
The output of the map illustrates that Rossaveel has a decreasing sea level trend, in contrast Castletownbere has the largest increasing sea level rise, followed by Dublin and Galway. This may be as a result of Glacial Isostatic Adjustment (GIA), especially in Castletownbere, during the last ice age a large ice sheet covered Ireland and as result of the weight on the land, the land has sunk a small amount every year. However over thousands of years the small changes add up. GIA and global sea level rise may be contributing to the large increase in sea level that is present at Castletownbere. There also appears to be a significant rise in sea level at the Dublin station, although Howth is situated near by it is not experiencing such a dramatic increase. This may be a result of ongoing works in Dublin harbor, that has interfered with the tide gauge data records. The length of the records also influence trends. Using the lm function on the Dublin merged data gives an output of 0.08mm per year, however if this data was put on the map the other trends would not be visible. Multi-decadal variability can also influence the acceleration of sea level rise, therefore datasets that record sea level should be a minimum of 50 years in length to account for this variablility (Jevrejeva et al. 2008).
The following approach is used for producing a mean sea level curve for Ireland. The data chosen to produce the curve is Malin merged, Galway PSMSL, Castletownbere PSMSL, Dunmore East PSMSL, Ballyglass PSMSL. These stations were chosen as they are distributed throughout Ireland, meaning that the sea level curve is representative of Ireland. Malin merged has a longer recording period than the PSMSL data and is used to extend the data. To produce the sea level curve, each of the dataframes are inspected, and columns that aren’t used in the analysis are removed. Each of the columns that contain the sea level data are renamed by station name.
head(main.merge)
## year month rlr sla Rlr Sla combined h final
## 1 1958 2 7117 33.92621 NA NA 33.92621 NA 33.92621
## 2 1958 3 NA NA NA NA NaN NA NaN
## 3 1958 4 NA NA NA NA NaN NA NaN
## 4 1958 5 7027 -56.07379 NA NA -56.07379 NA -56.07379
## 5 1958 6 7027 -56.07379 NA NA -56.07379 NA -56.07379
## 6 1958 7 7117 33.92621 NA NA 33.92621 NA 33.92621
main.merge$rlr <- NULL
main.merge$sla <- NULL
main.merge$Rlr <- NULL
main.merge$Sla <- NULL
main.merge$combined <- NULL
main.merge$h <- NULL
colnames(main.merge) <- c('year', 'month', 'malin')
head(Galway)
## month year h time
## 1 4 2007 -172.01932 2007-04-15
## 2 5 2007 -55.56248 2007-05-15
## 3 6 2007 -17.11444 2007-06-15
## 4 7 2007 -16.41613 2007-07-15
## 5 8 2007 -97.17110 2007-08-15
## 6 9 2007 -86.03322 2007-09-15
Galway$time <- NULL
colnames(Galway) <- c('month', 'year', 'galway')
head(Castletownbere)
## month year h time
## 1 1 2007 -242.4362 2007-01-15
## 2 2 2007 -125.6957 2007-02-15
## 3 3 2007 -305.3640 2007-03-15
## 4 4 2007 -313.9930 2007-04-15
## 5 5 2007 -248.8515 2007-05-15
## 6 6 2007 -143.3935 2007-06-15
Castletownbere$time <- NULL
colnames(Castletownbere) <- c('month', 'year', 'castletownbere')
head(DunmoreEast)
## month year h time
## 1 5 2012 -261.58369 2012-05-15
## 2 6 2012 -191.73528 2012-06-15
## 3 7 2012 -195.19196 2012-07-15
## 4 8 2012 -297.53939 2012-08-15
## 5 9 2012 -214.23875 2012-09-15
## 6 10 2012 -98.53024 2012-10-15
DunmoreEast$time <- NULL
colnames(DunmoreEast) <- c('month', 'year', 'dunmoreeast')
head(Ballyglass)
## month year h time
## 1 4 2008 237.13333 <NA>
## 2 5 2008 77.94582 <NA>
## 3 6 2008 50.49078 <NA>
## 4 7 2008 63.88927 <NA>
## 5 8 2008 101.02800 <NA>
## 6 9 2008 45.46540 <NA>
Ballyglass$time <- NULL
colnames(Ballyglass) <- c('month', 'year', 'ballyglass')
Each of the standardised dataframes are then merged into one dataframe called seacurve, by year and month.
seacurve <- merge(main.merge, Galway, all = TRUE)
seacurve <- merge(seacurve, Castletownbere, all = TRUE)
seacurve <- merge(seacurve, DunmoreEast, all = TRUE)
seacurve <- merge(seacurve, Ballyglass, all = TRUE)
head(seacurve)
## year month malin galway castletownbere dunmoreeast ballyglass
## 1 1958 2 33.92621 NA NA NA NA
## 2 1958 3 NaN NA NA NA NA
## 3 1958 4 NaN NA NA NA NA
## 4 1958 5 -56.07379 NA NA NA NA
## 5 1958 6 -56.07379 NA NA NA NA
## 6 1958 7 33.92621 NA NA NA NA
The function rowMeans is used to get the mean of each of the station rows and put the output into a new column. This column is the average of the data from each of the stations and can be used to produce a mean sea level curve for Ireland.
seacurve$mean <- NA
seacurve$mean <- rowMeans(seacurve[c('malin', 'castletownbere', 'galway', 'ballyglass', 'dunmoreeast')], na.rm = TRUE)
head(seacurve)
## year month malin galway castletownbere dunmoreeast ballyglass
## 1 1958 2 33.92621 NA NA NA NA
## 2 1958 3 NaN NA NA NA NA
## 3 1958 4 NaN NA NA NA NA
## 4 1958 5 -56.07379 NA NA NA NA
## 5 1958 6 -56.07379 NA NA NA NA
## 6 1958 7 33.92621 NA NA NA NA
## mean
## 1 33.92621
## 2 NaN
## 3 NaN
## 4 -56.07379
## 5 -56.07379
## 6 33.92621
The plot function is then used to plot the mean sea level curve for Ireland.
plot(seacurve$year, seacurve$mean, type = 'l', col = 'violet', main = 'Mean Sea Level Curve', ylab = 'Height mm', xlab = 'Year')
From the output the sea level curve appears to be relatively consistent from 1960 to present. There appears to be a slight increase from 1970 to 1990 and then a sharp decrease. From 1990 onwards the height remains relatively constant with a slight increase from 2010 to present. However this is only one method in producing a sea level curve, using the same method and different stations would yield different results, similarly using different methods with the same stations would yield different results. Therefore, this illustrates the difficulty in producing an Irish mean sea level curve.
The virtual station approach was undertaken by Jevrejeva et al (2008), in which they extend sea level records backwards from 1850 by using three of the longest tide gauge records available. The linear part of each record was removed, which contained the land movement component. The same approach could be applied to the Irish data set. As Dublin PSMSL has the longest record in Ireland, the data could be used to extend back other records such as Dunmore East (Jevrejeva et al. 2008).
The data are not homogenous and consistent enough to average simply. If comparing NTGN data with PSMSL data the records need to be in a standardised format. Such as removing roughly 7000 and the mean from PSMSL data. Similarly the NTGN data needs to be converted from meters into millimeters. To relate longer records to shorter ones, you could find where the data overlaps, get the difference between the two during the overlapping period, and add that onto the original data set. If the data do not overlap, in the case of Malin, a station nearby that has a longer record could be used as a proxy.
There are a variety of factors that influence sea level rise and are discussed by Dangendorf et al. (2017) and Hay et al. (2015) These factors include glacier and ice-sheet mass loss, ocean thermal expansion, and changes in land water storage. Each of these factors influence global sea level, contributing to the acceleration in sea level rise. Producing an estimate of how the sea has risen globally has proven a difficult challenge. Difficulties arise as long-term data is globally sparse and inhomogenous. The data tends to be contaminated by local signals due to ongoing glacial isostatic adjustment (Dangendorf et al., 2017; Hay et al., 2015). When producing the Irish Mean Sea Level curve each of these factors influences the records. Ocean thermal expansion and ice-sheet mass loss has global effects on sea level rise and therefore would contribute to an increasing sea level rise in Ireland. Other factors such as long-term consistent data also proves as a problem when producing the curve. The PSMSL data tend to have older records than the NTGN however the data is inconsistent and a lot of the stations have stopped recording sea level. Similarly, the stations from the PSMSL are not evenly distributed around Ireland and there is a lack of long term data for the south of Ireland. The NTGN stations are more evenly distributed, but have short term recording periods. Therefore, it is difficult to analyse trends from the data. Glacial Isostatic Adjustment also plays a fundamental role with regards to sea level rise in Ireland. Particularly in the south west of Ireland, where the land is sinking every year, which would cause a more significant increase in sea level rise, which can be seen in the map with regards to Castletownbere. However, in the North East of Ireland the ground is rising partially, which may cause sea level rise not be recorded in that area.
Overall this exercise has highlighted the difficulty of producing a mean sea level curve for Ireland. The tide gauge data from Ireland is from two different sources and they use different formats. This causes difficulty, because to analyse the data it must be in a standardised format. Similarly, the records are of different lengths and contain a lot of missing data. To extend data frames, stations near by can be used to infill the missing data. These all give rise to the ultimate problem of producing a global sea level curve, which analyses sea level rise trends globally. Different methods and local factors give rise to different results. However, it is of utmost importance to understand how sea level is changing, especially in the face of climate change, as sea level rise will have devastating impacts on low lying lands and coastal cities if adaptative behaviours are not undertaken.
Bibliography:
Dangendorf, S., Marcos, M., Wöppelmann, G., Conrad, C.P., Frederikse, T. and Riva, R., 2017. Reassessment of 20th century global mean sea level rise. Proceedings of the National Academy of Sciences, 114(23), pp.5946-5951.
Hay, C.C., Morrow, E., Kopp, R.E. and Mitrovica, J.X., 2015. Probabilistic reanalysis of twentieth-century sea-level rise. Nature, 517(7535), p.481.
Jevrejeva, S., Moore, J.C., Grinsted, A. and Woodworth, P.L., 2008. Recent global sea level acceleration started over 200 years ago?. Geophysical Research Letters, 35(8).