Last updated: 2020-06-02
Checks: 7 0
Knit directory: MHWflux/
This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20200117)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version 111331d. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .Rhistory
Ignored: .Rproj.user/
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were made to the R Markdown (analysis/mhw-flux.Rmd
) and HTML (docs/mhw-flux.html
) files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view the files as they were in that past version.
File | Version | Author | Date | Message |
---|---|---|---|---|
Rmd | 111331d | robwschlegel | 2020-06-02 | Re-built site. |
html | 0634d98 | robwschlegel | 2020-06-02 | Build site. |
Rmd | ae74e76 | robwschlegel | 2020-06-02 | Re-built site. |
html | c6087d9 | robwschlegel | 2020-06-02 | Build site. |
Rmd | f3a6c78 | robwschlegel | 2020-06-02 | Small changes |
Rmd | 56e6020 | robwschlegel | 2020-06-02 | Working on some choice event grouping by Q terms |
Rmd | c839511 | robwschlegel | 2020-06-02 | Working back over some old thoughts |
Rmd | cedc399 | robwschlegel | 2020-05-28 | Created some boxplots as well. |
Rmd | 588922a | robwschlegel | 2020-05-28 | Another look at the correlations clustered by SOM node. |
Rmd | 9e749bc | robwschlegel | 2020-05-28 | First pass at connecting the SOM results to the correlations |
Rmd | 09ce925 | robwschlegel | 2020-05-20 | Some work on comparing the OISST and GLORYS MHWs. They are somewhat different… |
html | 12b4f67 | robwschlegel | 2020-04-29 | Build site. |
Rmd | e3591eb | robwschlegel | 2020-04-29 | Re-built site. |
Rmd | d8d66e4 | robwschlegel | 2020-04-28 | Yo dawg, I heard you liked correlations on your correlations while running correlations for your correlations |
Rmd | bc4ee87 | robwschlegel | 2020-04-28 | Added more functionality to app. Added cloud coverage, speds, and precip-evap. |
Rmd | 29eb557 | robwschlegel | 2020-04-27 | Much progress on shiny app |
Rmd | 7e78e53 | robwschlegel | 2020-04-27 | Changing shiny app over to a shinydashboard |
Rmd | cdf16be | robwschlegel | 2020-04-23 | Now performing correlations with the correlation package |
html | 7c04311 | robwschlegel | 2020-04-22 | Build site. |
Rmd | 2af28b4 | robwschlegel | 2020-04-22 | Re-built site. |
Rmd | a6a35c9 | robwschlegel | 2020-04-22 | Push before taking a different approach with the base results table |
Rmd | 005e31a | robwschlegel | 2020-04-22 | Added evaporation data |
html | 99eda29 | robwschlegel | 2020-04-16 | Build site. |
Rmd | e4b9586 | robwschlegel | 2020-04-16 | Re-built site. |
Rmd | cc258d7 | robwschlegel | 2020-04-15 | Some notes from a meeting discussing this project. |
Rmd | f963741 | robwschlegel | 2020-04-15 | Some text edits and published the shiny app |
Rmd | d22d6a7 | robwschlegel | 2020-04-14 | Text edits |
Rmd | 7c19a6f | robwschlegel | 2020-02-28 | Notes from meeting with Ke. |
Rmd | c31db05 | robwschlegel | 2020-02-27 | Working on K-means analysis |
Rmd | d1b59f4 | Robert William Schlegel | 2020-02-27 | Created a decent exploratory app |
Rmd | 9057363 | robwschlegel | 2020-02-27 | First round of results are in. Beginning to create a shiny app to explore them more. |
Rmd | bc9588e | robwschlegel | 2020-02-27 | Working on parallel calculation |
Rmd | b10501e | robwschlegel | 2020-02-27 | Working on correlation code |
Rmd | 10c69f8 | robwschlegel | 2020-02-26 | A few smol things |
html | 50eb5a5 | robwschlegel | 2020-02-26 | Build site. |
Rmd | 891e53a | robwschlegel | 2020-02-26 | Published site for first time. |
Rmd | 3c72606 | robwschlegel | 2020-02-26 | More writing |
Rmd | bcd165b | robwschlegel | 2020-02-26 | Writing |
Rmd | c4343c0 | robwschlegel | 2020-02-26 | Pushing quite a few changes |
Rmd | 80324fe | robwschlegel | 2020-02-25 | Adding the foundational content to the site |
This vignette will walk through the thinking and the process for how to link physical variables to their potential effect on driving or dissipating MHWs. The primary source that inspired this work was Chen et al. (2016). In this paper the authors were able to illustrate which parts of the heat budget were most likely driving the anomalous heat content in the surface of the ocean. What this analysis seeks to do is to build on this methodology by applying the fundamental concept to ALL of the MHWs detected in the NW Atlantic. Fundamentally we are running thousands of correlations between SST anomalies and the co-occurrent anomalies for a range of physical variables. The stronger the correlation (both positive and negative) the more of an indication this is to us that these phenomena are related.
# All of the libraries and objects used in the project
# Note that this also loads the data we will be using in this vignette
source("code/functions.R")
We know when the MHWs occurred, and our physical data are prepped, so what we need to do is run correlations between SST from the start to peak and peak to end of each event for the full suite of variables. This will show us for each event which values correlated the best for the onset AND decline of the events. We will run correlations on the full time series, too.
# Extract just the event info
GLORYS_MHW_event_index <- GLORYS_MHW_event %>%
select(event_no, region, season) %>%
ungroup() %>%
mutate(row_index = 1:n())
# Run all the stats
ALL_cor <- plyr::ddply(GLORYS_MHW_event_index, .parallel = T,
.variables = c("row_index"), .fun = cor_all) %>%
left_join(GLORYS_MHW_event_index, by = "row_index") %>%
select(region, season, event_no, ts, everything()) %>%
arrange(region, event_no) %>%
mutate(Parameter2 = factor(Parameter2))
# Save
saveRDS(ALL_cor, "data/ALL_cor.Rda")
saveRDS(ALL_cor, "shiny/ALL_cor.Rda")
Seeing as how we’re running correlations verything runs pretty quickly. With the method sorted for now we need to have a look at the results. What we have at the moment is a long dataframe containing the correlations of different variables with temperature anomalies. It must be pointed out that these are for the same day, there is no time lag introduced, which may be important. Below we are going to visualise the range of correlations for each variable to see how much each distribution is skewed. This skewness could probably be quantified in a meaningful way… but let’s look at the data first.
We also want to filter by p-value to highlight the strong correlations.
# source("shiny/app.R")
# Or it is live here:
# https://robert-schlegel.shinyapps.io/MHWflux/
There are some really clear patterns coming through in the data. In particular SSS seems to be strongly related to the onset of MHWs. There are a lot of nuances in these data and so I think this is actually an example of where a Shiny app is useful to interrogate the data.
In the shiny app it also comes out that the longer events tend not to correlate strongly with a single variable. This is to be expected and supports the argument that very persistent MHWs are supported by a confluence of variables. How to parse that out is an interesting challenge.
With the correlations calculated for the onset, decline, and full extent of each MHW, we also want to know if any signals emerge from the regions and/or seasons of occurrence of these events. Is the relationship between SSS and MHW onset stronger in the winter? Stronger in certain region? Having manually looked through the Shiny app it does look like there are some patterns. These will be written down in the results table below.
With patterns pulled out by region and season, we want to see if there are any relationships between MHWs that show strong correlations at onset with a particular variables and strong correlations at decline with another. We will look for this within regions and seasons as well. For example, do MHWs that correlate well with an increase in SSS also correlate well with a decrease in long-wave radiation during the decline of the event? I’m not sure how best to go about this in a clean manner.
Another thing to consider would be if fast onset slow decline (and vice versa) events have different characteristics to slower evolving events. The same question could be posed to long vs short events and those with high intensities vs low. In order to begin this investigation we must join the MHW results to the correlation results. We will visualise these patterns with heatmaps.
ALL_cor_wide <- readRDS("data/ALL_cor.Rda") %>%
ungroup() %>%
filter(Parameter1 == "sst") %>%
dplyr::select(region:ts, Parameter2, r, n_Obs) %>%
pivot_wider(values_from = r, names_from = Parameter2)
# Combine MHW metrics and correlation results
events_cor_prep <- GLORYS_MHW_event %>%
dplyr::select(region, season, event_no, duration, intensity_mean, intensity_max,
intensity_cumulative, rate_onset, rate_decline) %>%
left_join(ALL_cor_wide, by = c("region", "season", "event_no")) %>%
ungroup() %>%
dplyr::select(region:n_Obs, sst, bottomT, sss, mld_cum, mld_1_cum, t2m, tcc_cum, p_e_cum, mslp_cum,
lwr_mld_cum, swr_mld_cum, lhf_mld_cum, shf_mld_cum, qnet_mld_cum)
# Heatmap showing average correlations by MHW duration
events_cor_prep %>%
mutate(duration = plyr::round_any(duration, 10)) %>%
group_by(ts, duration) %>%
mutate(count = n()) %>%
summarise_if(is.numeric, mean) %>%
pivot_longer(cols = sst:qnet_mld_cum) %>%
filter(name != "sst",
ts != "full") %>%
ggplot(aes(x = duration, y = name)) +
geom_tile(aes(fill = value)) +
geom_text(aes(label = count)) +
facet_wrap(~ts) +
scale_fill_gradient2(low = "blue", high = "red") +
coord_cartesian(expand = F) +
labs(y = NULL, x = "Duration (10 day steps)", fill = "r (mean)") +
theme(legend.position = "bottom")
# Heatmap showing average correlations by MHW max intensity
events_cor_prep %>%
mutate(intensity_max = plyr::round_any(intensity_max, 0.5)) %>%
group_by(ts, intensity_max) %>%
mutate(count = n()) %>%
summarise_if(is.numeric, mean) %>%
pivot_longer(cols = sst:qnet_mld_cum) %>%
filter(name != "sst",
ts != "full") %>%
ggplot(aes(x = intensity_max, y = name)) +
geom_tile(aes(fill = value)) +
geom_text(aes(label = count)) +
facet_wrap(~ts) +
scale_fill_gradient2(low = "blue", high = "red") +
coord_cartesian(expand = F) +
labs(y = NULL, x = "Max Intensity (°C; 0.5° steps)", fill = "r (mean)") +
theme(legend.position = "bottom")
# Heatmap showing average correlations by MHW rate onset
events_cor_prep %>%
mutate(rate_onset = round(rate_onset, 1)) %>%
group_by(ts, rate_onset) %>%
mutate(count = n()) %>%
summarise_if(is.numeric, mean) %>%
pivot_longer(cols = sst:qnet_mld_cum) %>%
filter(name != "sst",
ts != "full") %>%
ggplot(aes(x = rate_onset, y = name)) +
geom_tile(aes(fill = value)) +
geom_text(aes(label = count)) +
facet_wrap(~ts) +
scale_fill_gradient2(low = "blue", high = "red") +
coord_cartesian(expand = F) +
labs(y = NULL, x = "Rate of onset (°C; 0.1° steps)", fill = "r (mean)") +
theme(legend.position = "bottom")
# Heatmap showing average correlations by MHW rate decline
events_cor_prep %>%
mutate(rate_decline = round(rate_decline, 1)) %>%
filter(rate_decline <= 0.6) %>% # nip off a couple of outliers
group_by(ts, rate_decline) %>%
mutate(count = n()) %>%
summarise_if(is.numeric, mean) %>%
pivot_longer(cols = sst:qnet_mld_cum) %>%
filter(name != "sst",
ts != "full") %>%
ggplot(aes(x = rate_decline, y = name)) +
geom_tile(aes(fill = value)) +
geom_text(aes(label = count)) +
facet_wrap(~ts) +
scale_fill_gradient2(low = "blue", high = "red") +
coord_cartesian(expand = F) +
labs(y = NULL, x = "Rate of decline (°C; 0.1° steps)", fill = "r (mean)") +
theme(legend.position = "bottom")
In the code chunk below we look at the correlations of the correlation results. This isn’t terribly useful…
# All correlations by region
events_cor_region <- events_cor_prep %>%
group_by(region, ts) %>%
correlation(redundant = TRUE) %>%
mutate_if(is.numeric, round, 4) %>%
filter(Parameter1 %in% c("duration", "intensity_mean", "intensity_max",
"intensity_cumulative", "rate_onset", "rate_decline"),
!Parameter2 %in% c("duration", "intensity_mean", "intensity_max",
"intensity_cumulative", "rate_onset", "rate_decline"))
saveRDS(events_cor_region, "data/events_cor_region.Rds")
# All correlations by season
events_cor_season <- events_cor_prep %>%
group_by(season, ts) %>%
correlation(redundant = TRUE) %>%
mutate_if(is.numeric, round, 4) %>%
filter(Parameter1 %in% c("duration", "intensity_mean", "intensity_max",
"intensity_cumulative", "rate_onset", "rate_decline"),
!Parameter2 %in% c("duration", "intensity_mean", "intensity_max",
"intensity_cumulative", "rate_onset", "rate_decline"))
saveRDS(events_cor_season, "data/events_cor_season.Rds")
# All correlations by region+season
# Some groupings don't have enough observations
# This throws an error but it still runs
# events_cor_region_season <- events_cor_prep %>%
# group_by(region, season, ts) %>%
# correlation(redundant = TRUE) %>%
# mutate_if(is.numeric, round, 4) %>%
# filter(Parameter1 %in% c("duration", "intensity_mean", "intensity_max",
# "intensity_cumulative", "rate_onset", "rate_decline"),
# !Parameter2 %in% c("duration", "intensity_mean", "intensity_max",
# "intensity_cumulative", "rate_onset", "rate_decline"))
# saveRDS(events_cor_region_season, "data/events_cor_region_season.Rds")
# test visuals
events_cor_prep %>%
filter(region == "nfs", ts == "onset") %>%
ggplot(aes(x = intensity_mean, y = msshf_mld)) +
geom_smooth(method = "lm", se = FALSE, colour = "black") +
geom_point(aes(colour = season))
There are a lot of results to wade through and though it is clear there are important signals in the results, it is proving difficult to distill them. One thought is that we don’t need to look at all of the events, just the longest/most intense events with strong r values. This is first done by cutting out all Cat. I events. We then find strong correlations with long events. There should just be a few.
Once this has been done we group events by their strongest Qx relationship. Then find their strongest relationship with the next level of variables (e.g. MLD, MSLP, and so on). Ideally one may find the top four flavours.
# Filter out smol events
events_cor_cat <- events_cor_prep %>%
left_join(GLORYS_MHW_cats[,c("region", "event_no", "category")], by = c("region", "event_no")) %>%
filter(category != "I Moderate", duration >= 21)
# Events with high Qlw correlations at onset
events_cor_cat %>%
filter(ts == "onset", lwr_mld_cum >= 0.7)
# Melt the data frame and find the q term with the highest correlation
# Those are then used to separate events into groups
The code used for the MHWNWA project was also used on the GLORYS MHW results to create a SOM for the GLORYS data. These SOM nodes are used below to cluster the correlation results to see how the differ based on the SOM. For reference to the results below let’s see what the SOM results for Air temperature and MSLP look like.
# Load the SOM from the MHWNWA
SOM <- readRDS("../MHWNWA/data/SOM/som_GLORYS.Rda")
# Grab only the node info
SOM_info <- SOM$info
# Join to the GLORYS MHW correlation results
events_cor_SOM <- left_join(events_cor_prep, SOM_info, by = c("region", "event_no"))
# Plotting function
plot_func <- function(df, name) {
ggplot(data = df, aes(x = node, y = ts)) +
geom_tile(aes(fill = value)) +
# facet_wrap(~name, scales = "free") +
scale_fill_gradient2(low = "blue", high = "red", name = name) +
coord_cartesian(expand = F)
}
# Summary stats per node shown as heatmap
nested_SOM <- events_cor_SOM %>%
dplyr::select(-event_no) %>%
mutate(node = as.factor(node)) %>%
group_by(node, ts) %>%
summarise_if(is.numeric, mean) %>%
pivot_longer(cols = duration:count) %>%
filter(name != "temp",
ts != "full") %>%
group_by(name) %>%
nest() %>%
mutate(plots = map2(data, name, plot_func))
# gridExtra::grid.arrange(grobs = nested_SOM$plots) # NB: The legends are too large for HTML
# Summary heatmap for correlation values only
events_cor_SOM %>%
dplyr::select(node, ts, bottomT:qnet_mld_cum, -mld_1_cum) %>%
mutate(node = as.factor(node)) %>%
group_by(node, ts) %>%
summarise_if(is.numeric, mean) %>%
# dplyr::select(duration) %>%
pivot_longer(cols = bottomT:qnet_mld_cum) %>%
filter(name != "temp",
ts != "full") %>%
ggplot(aes(x = node, y = ts)) +
geom_tile(aes(fill = value)) +
facet_wrap(~name, scales = "free") +
scale_fill_gradient2(low = "blue", high = "red") +
coord_cartesian(expand = F) +
labs(y = NULL, fill = "r (mean)") +
theme(legend.position = "bottom")
# Boxplots for correlation values only
events_cor_SOM %>%
dplyr::select(node, ts, bottomT:qnet_mld_cum, -mld_1_cum) %>%
mutate(node = as.factor(node)) %>%
group_by(node, ts) %>%
# summarise_if(is.numeric, mean) %>%
# dplyr::select(duration) %>%
pivot_longer(cols = bottomT:qnet_mld_cum) %>%
filter(name != "temp",
ts != "full") %>%
ggplot(aes(x = node, y = value)) +
geom_boxplot(aes(fill = ts)) +
facet_wrap(~name, scales = "free") +
# scale_fill_gradient2(low = "blue", high = "red") +
coord_cartesian(expand = F) +
labs(y = "correlation (r)", fill = "time series\nsection") +
theme(legend.position = "bottom")
Some important patterns come through when we look at the summary correlation and MHW metric results when grouped into their SOM nodes. This is as far as the numeric results will go. From here out it is necessary for a human to look at these summary results with the SOM node results to discern the meaning of the combined results.
In the following table a more concise summary of the results is presented.
variable | abbreviation | onset | full | decline | season | region | overall | story |
---|---|---|---|---|---|---|---|---|
Air temperature | t2m | Even throughout | Slight positive | Strong positive | Autumn always strong positive for decline. Spring decline has large range. | Stronger positive for GSL and MAB. | Much clearer relationship for decline than onset. | TRUE |
Total precipitation | tp | Normal with slight positive | Normal distribution | Even throughout | Autumn and Winter slightly more positive with Spring decline usually negative. | Nothing clear. SS and NFS decline most often r ~= 0. | Meh. | FALSE |
Total evaporation | e | Even throughout | Normal distribution | Strong positive | Spring is the only season that isn’t mostly positive for decline. | SS is the only region not mostly positive for decline. | Important for the decline of events, except often in Spring. | TRUE |
Precipitation minus evaporation | p_e | Normal with minor positive | Normal with minor positive | Normal with minor positive | Autumn then Winter tend more positive. | MAB decline more positive than others. GM GSL and MAB onset tend more positive. | This value is all over the board. It likely only coincides with MHWs due to something else. | FALSE |
Prec – evap (cumulative) | p_e_cum | Strong negative and positive | Normal | Flat with positive tail | Spring then Summer strong negative onset. Autumn strong positive onset and decline. | GSL tends negative for decline while others tend positive. Very large ranges overall. | There is an important signal in the differences between Spring-Summer and Autumn. | TRUE |
Air Northerly | v10 | Three hump | Normal distribution | Three hump | Large spread for all seasons with Autumn tending towards positive for onset and decline. | Not much difference. NFS tends a bit more towards positive onset and decline than others. | There are some signals in there, but they are not clear. | FALSE |
Air Easterly | u10 | Slight positive | Normal distribution | Slight negative | Least amount of range in Autumn onset. | GM tends to have the least range and be the most negative for onset and decline. | Slight positive onset and slight negative decline imply this vaguely shows a thermal gradient. | FALSE |
Wind speed | wind_spd | Normal but flat | Normal | Negative | Autumn onset tends positive while everything else tends negative. Summer decline more negative. | GM and MAB tend more negative for decline. | A smol signal for the GM and MAB showing decline negative with wind speed. | FALSE |
Total cloud cover | tcc | Normal but positive | Normal but positive | Normal but positive | Spring onset tends most positive. | GM and NFS full tend more positive. MAB decline tends more positive. | Meh. | FALSE |
Total cloud cover (cumulative) | tcc_cum | Strong positive with negative tail | Normal | Negative and positive | Autumn onset tends much more positive. Spring decline tends more negative. | Large ranges in onset. GSL tends much more negative for decline. | May be important for GSL events due to SWR importance there. | FALSE |
Mean sea level pressure | msl | Strong negative with positive tail | Slight negative to normal | Even with positive tail | Autumn is much more negative for onset and decline. Spring and Summer onset tend positive. | GM and NFS more positive for decline. | Decrease in MSLP is often important for the onset of events | TRUE |
Mean sea level pressure (cumulative) | msl_cum | Strong negative and positive | Normal but flat | Strong positive with small negative tail | Full range in onset and decline for all seasons except positive Spring onset. Autumn onset tends negative. | Full range for all. GM decline tends positive. CBS onset tends negative, NFS and SS onset tend positive. | Stronger signals than for MSLP non-cumulative. | TRUE |
Sea surface height | ssh | Even throughout | Slight negative | Positive tail | Autumn onset and decline tend negative. | GM decline positive. | The strong positive signal for decline implies a height anomaly (i.e. an eddy) leaving the area. | TRUE |
Current Northerly | v | Normal but flat | Normal distribution | Positive with small negative tail | Not much difference. Winter onset tends more negative. | GM onset and decline tend more positive. | Meh. | FALSE |
Current Easterly | u | Normal with positive tail | Normal distribution | Slight three hump | Autumn decline tends positive while Summer tends negative. | NFS onset tends most positive. | Possibly something there for onset of events in NFS. | FALSE |
Current speed | cur_spd | Flat but slight negative | Normal but negative | Flat but negative | Autumn onset tends to be positive while everything else tends negative. | GSL decline tends much more negative while MAB decline tends positive. | The positive decline for MAB implies the importance of advection for events. | FALSE |
Sea surface salinity | sss | Strong negative with positive tail | Negative | Strong negative with positive tail | Summer then Autumn tend more negative. Largest range on Winter. | GSL much more negative for onset+full+decline. CBS onset strong negative. GM decline strong negative. | Strong negative mixed in with noise. Large differences between regions. | TRUE |
Mixed layer depth | mld | Strong negative with positive tail | Negative | Strong negative with minor positive tail | Strong negative decline for all but Summer. Summer onset negative with large Spring and Winter range. | Strong negative for all but CBA and SS with large range. All negative onset but large ranges. | The decline of a MHW in Summer or the onset in Winter + Spring doesn’t seem as tied to MLD. | TRUE |
Bottom temperature | bottomT | Strong positive with minor negative tail | Normal but flat | Strong positive with small negative tail | Large ranges with strong positive Autumn onset. | Strong positive onset for MAB + GM. CBS decline tends negative. | MHWs in Autumn generally have high bottom temps at onset | TRUE |
Latent heat flux | mslhf_mld | Strong positive | Positive | Strong positive | Very strong positive onset+full+decline for Autumn. Large range in onset+decline in Spring. | Strong positive onset for MAB. | This variable is almost always important for onset and decline, especially in Autumn. | TRUE |
Sensible heat flux | msshf_mld | Strong positive with negative tail | Flat | Strong positive with minor negative tail | Strong positive onset for Autumn + Winter and negative for Spring + Summer. | Some difference in tendency but similar ranges for all regions. | Very large differences in negative or positive correlations based on seasons. | TRUE |
Longwave radiation | msnlwrf_mld | Strong positive with minor negative tail | Slight positive | Flat with positive tail | Positive onset tendency with Autumn much stronger. Spring + Summer decline tend negative. | Strong positive onset for MAB + GM. | Autumn may be significantly different from Spring. | TRUE |
Shortwave radiation | msnswrf_mld | Negative with strong positive tail | Slight negative | Positive and negative | Strong negative onset for Autumn. Large range for everything else. | Strong negative onset for GM but largest spread for MAB. | A decrease in SWR in Autumn leads to MHWs, implying cloud cover or some other LHF mechanism. | TRUE |
Net heat flux | qnet_mld | Very strong positive | Positive | Strong positive with minor negative tail | Autumn has strongest positive onset+full+decline. Spring decline has large range with negative tendency. | MAB strong positive onset + decline. All others tend positive with larger range in decline for GM. | All regions and seasons tend strong positive but with some notable outliers. | TRUE |
With a table organised by each variable, it makes sense to also create a table organised by season, and another by region.
The deepening of the MLD with MHW onset may be due to wind mixing into the deeper warmer water during winter.
Look into the relationship between MSLP and MHW onset. It is odd.
Look into relationship between decrease in SSS with decline and also decrease in latent heat flux/evaporation.
From Chen et al. 2016 (JGR) Such an extreme event in the MAB was attributed to the anomalous atmospheric forcing, which was linked to the northward shift in the jet stream position [Chen et al., 2014a, 2015]. The anomalously warm atmospheric conditions in the winter of 2011–2012 increased the ocean heat content (increased the ocean heat content anomaly) and facilitated the extreme warm ocean temperature in spring 2012 [Chen et al., 2014a, 2015]. On the other hand, the ocean advection played a secondary role, which partially damped the heat content anomaly created by the air-sea heat flux [Chen et al., 2015]. In both cases, initial temperature and ocean advection are not sufficient to describe the seasonal mean temperature. Additional cooling (warming) in addition to ocean advection is needed to further describe the winter (spring) temperature. In comparison, using the sum of the initial temperature and air-sea flux yields a much better description of seasonal mean temperatures (Figures 5c and 5f) While the overall role of ocean advection is smaller than that of air-sea flux in determining the winter and spring temperatures, the year-to-year changes in the relative importance is worth investigating. Normally, given anomalous initial temperature, air will act to damp the temperature anomaly, as in winter 2007 or 2011, or even 2005 to some extent. However, in winter 2012, the air continued to increase the temperature anomaly. Out of the 12 years 2003–2014, the air-sea flux normally dominated the temperature anomaly in the MAB during winter. In only 3 years was the winter time temperature anomaly primarily controlled by ocean advection. For spring, ocean advection has more control on the temperature anomalies than air-sea flux does, although the difference is smaller (Table 2). In both seasons, the relative importance of air-sea flux and ocean advection does not seem to be related to either the initial or seasonal mean thermal condition of the shelf water (fourth and fifth columns of Tables 1 and 2). The correlation coefficients increase from 0.66 in the first half of February to 0.91 in the second half of March. This suggests that estimation of spring temperature anomaly in the MAB based on the thermal condition 2 months before spring is statistically possible. This suggests that more northerly jet stream positions result in larger heatflux from the atmosphere into the ocean in the MAB. This is likely due to warmer and more humid air overlying the continental shelf, which reduces the heat loss from the ocean during the cooling seasons [Chenet al., 2014a]. In spring and summer, the air-sea flux may be less correlated with the air temperature due to the shallowness of the surface mixed layer, and thus may be disconnected from large-scale atmospheric circulation, i.e., jetstream variability.
Chen, K., Kwon, Y.-O., and Gawarkiewicz, G. (2016). Interannual variability of winter-spring temperature in the middle atlantic bight: Relative contributions of atmospheric and oceanic processes. Journal of Geophysical Research: Oceans 121, 4209–4227.
sessionInfo()
R version 4.0.0 (2020-04-24)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.6 LTS
Matrix products: default
BLAS: /usr/lib/openblas-base/libblas.so.3
LAPACK: /usr/lib/libopenblasp-r0.2.18.so
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_CA.UTF-8 LC_COLLATE=en_CA.UTF-8
[5] LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
[7] LC_PAPER=en_CA.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggraph_2.0.2 correlation_0.2.1 tidync_0.2.3
[4] heatwaveR_0.4.2.9004 lubridate_1.7.8 forcats_0.5.0
[7] stringr_1.4.0 dplyr_0.8.5 purrr_0.3.4
[10] readr_1.3.1 tidyr_1.0.3 tibble_3.0.1
[13] ggplot2_3.3.0 tidyverse_1.3.0
loaded via a namespace (and not attached):
[1] nlme_3.1-147 fs_1.4.1 doParallel_1.0.15 insight_0.8.3
[5] httr_1.4.1 rprojroot_1.3-2 tools_4.0.0 backports_1.1.7
[9] R6_2.4.1 DBI_1.1.0 lazyeval_0.2.2 colorspace_1.4-1
[13] withr_2.2.0 gridExtra_2.3 tidyselect_1.1.0 compiler_4.0.0
[17] git2r_0.27.1 cli_2.0.2 rvest_0.3.5 RNetCDF_2.3-1
[21] xml2_1.3.2 plotly_4.9.2.1 labeling_0.3 bayestestR_0.6.0
[25] scales_1.1.1 digest_0.6.25 rmarkdown_2.1 pkgconfig_2.0.3
[29] htmltools_0.4.0 highr_0.8 dbplyr_1.4.3 htmlwidgets_1.5.1
[33] rlang_0.4.6 readxl_1.3.1 rstudioapi_0.11 generics_0.0.2
[37] farver_2.0.3 jsonlite_1.6.1 magrittr_1.5 ncmeta_0.2.0
[41] parameters_0.6.1 Rcpp_1.0.4.6 munsell_0.5.0 fansi_0.4.1
[45] viridis_0.5.1 lifecycle_0.2.0 stringi_1.4.6 whisker_0.4
[49] yaml_2.2.1 MASS_7.3-51.6 plyr_1.8.6 grid_4.0.0
[53] parallel_4.0.0 promises_1.1.0 ggrepel_0.8.2 crayon_1.3.4
[57] lattice_0.20-41 graphlayouts_0.7.0 haven_2.2.0 hms_0.5.3
[61] knitr_1.28 pillar_1.4.4 igraph_1.2.5 effectsize_0.3.0
[65] codetools_0.2-16 reprex_0.3.0 glue_1.4.1 evaluate_0.14
[69] data.table_1.12.8 modelr_0.1.7 foreach_1.5.0 vctrs_0.3.0
[73] tweenr_1.0.1 httpuv_1.5.2 cellranger_1.1.0 gtable_0.3.0
[77] polyclip_1.10-0 assertthat_0.2.1 xfun_0.13 ggforce_0.3.1
[81] broom_0.5.6 tidygraph_1.1.2 later_1.0.0 ncdf4_1.17
[85] viridisLite_0.3.0 iterators_1.0.12 workflowr_1.6.2 ellipsis_0.3.0