Set Up
library(ggplot2)
library(dplyr)
library(knitr)
BASE_DIR <- "/Users/dorh012/projects/2021/cleanup_stitch/stitches"
pangeo_table <- read.csv(file.path(BASE_DIR, "stitches", "data", "pangeo_table.csv"), stringsAsFactors = FALSE)
req_exps <- c("ssp126", "ssp245", "ssp585", "ssp370")
pangeo_table %>%
filter(variable == "tas" & domain == "Amon") %>%
filter(experiment %in% req_exps) ->
tas_exps
tas_exps %>%
group_by(variable, model) %>%
summarise(experiment = n_distinct(experiment)) %>%
filter(experiment == length(req_exps)) %>%
ungroup ->
full_experiments
`summarise()` has grouped output by 'variable'. You can override using the `.groups` argument.
How many models meet these conditions?
How many models meet the full 4 experiment criteria?
length(full_experiments$model)
[1] 23
Of these models waht does the ensemble count look like?
tas_exps %>%
filter(model %in% full_experiments$model) %>%
group_by(variable, model, experiment) %>%
summarise(ensemble = n_distinct(ensemble)) ->
ensemble_counts
`summarise()` has grouped output by 'variable', 'model'. You can override using the `.groups` argument.
Of the models with all the experiments how many meet the criteria of ~10 to 8 per ensemble?
Unfortunately it looks like there is only one model that meets these requirements. Let’s do the experiment with the various tolerances & take a look at the results.
Target ssp245
read.csv(file.path(BASE_DIR, "MPI-ESM1-2-LR_ssp245results.csv"), stringsAsFactors = FALSE) %>%
mutate(tol = as.character(tol)) %>%
mutate(stitching_id = paste0(stitching_id, '~', tol)) ->
ssp245_data
ssp245_data %>%
mutate(model = "MPI-ESM1-2-LR") %>%
group_by(model, tol) %>%
summarise(count = n_distinct(stitching_id)) ->
stitching_count
`summarise()` has grouped output by 'model'. You can override using the `.groups` argument.
stitching_count %>%
kable()
| MPI-ESM1-2-LR |
0.07 |
11 |
| MPI-ESM1-2-LR |
0.1 |
15 |
| MPI-ESM1-2-LR |
0.13 |
20 |
list.files(file.path(BASE_DIR, "stitches", "data", "tas-data"), "MPI-ESM1-2-LR", full.names = TRUE) %>%
read.csv(stringsAsFactors = FALSE) %>%
filter(grepl(x = experiment, pattern = "ssp")) %>%
group_by(experiment) %>%
summarise(n = n_distinct(ensemble))
list.files(file.path(BASE_DIR, "stitches", "data", "tas-data"), "MPI-ESM1-2-LR", full.names = TRUE) %>%
read.csv(stringsAsFactors = FALSE) %>%
filter(experiment == "ssp245") ->
og_data
ssp245_data %>%
left_join(stitching_count) %>%
mutate(tol_label = paste0(tol, " (", count,")")) %>%
ggplot() +
geom_line(aes(year, value, color = tol, groupby = stitching_id)) +
geom_line(data = og_data, aes(year, value, groupby = ensemble, color = "comp. data"), alpha = 0.4) +
facet_wrap("tol_label", ncol = 1) +
theme_bw() +
labs(y = "Deg C") +
scale_color_manual(values = c("0.1" = "#E69F00","0.13" = "#56B4E9", "0.07" = "#009E73", "comp. data" = "black"))
Joining, by = "tol"
Ignoring unknown aesthetics: groupbyIgnoring unknown aesthetics: groupby

Target ssp370
read.csv(file.path(BASE_DIR, "MPI-ESM1-2-LR_ssp370results.csv"), stringsAsFactors = FALSE) %>%
mutate(tol = as.character(tol)) %>%
mutate(stitching_id = paste0(stitching_id, '~', tol)) ->
ssp370_data
ssp370_data %>%
mutate(model = "MPI-ESM1-2-LR") %>%
group_by(model, tol) %>%
summarise(count = n_distinct(stitching_id)) ->
stitching_count
`summarise()` has grouped output by 'model'. You can override using the `.groups` argument.
stitching_count %>%
kable()
| MPI-ESM1-2-LR |
0.07 |
11 |
| MPI-ESM1-2-LR |
0.1 |
14 |
| MPI-ESM1-2-LR |
0.13 |
18 |
list.files(file.path(BASE_DIR, "stitches", "data", "tas-data"), "MPI-ESM1-2-LR", full.names = TRUE) %>%
read.csv(stringsAsFactors = FALSE) %>%
filter(experiment == "ssp370") ->
og_data
ssp370_data %>%
left_join(stitching_count) %>%
mutate(tol_label = paste0(tol, " (", count,")")) %>%
ggplot() +
geom_line(aes(year, value, color = tol, groupby = stitching_id)) +
geom_line(data = og_data, aes(year, value, groupby = ensemble, color = "comp. data"), alpha = 0.4) +
facet_wrap("tol_label", ncol = 1) +
theme_bw() +
labs(y = "Deg C") +
scale_color_manual(values = c("0.1" = "#E69F00","0.13" = "#56B4E9", "0.07" = "#009E73", "comp. data" = "black"))
Joining, by = "tol"
Ignoring unknown aesthetics: groupbyIgnoring unknown aesthetics: groupby

LS0tCnRpdGxlOiAiZW5yaWNoaW5nIHRoZSBzYW1wbGUgc2l6ZSBleHBlcmltZW50IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIFNldCBVcCAKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoa25pdHIpCgpCQVNFX0RJUiA8LSAiL1VzZXJzL2RvcmgwMTIvcHJvamVjdHMvMjAyMS9jbGVhbnVwX3N0aXRjaC9zdGl0Y2hlcyIKYGBgCgoKYGBge3J9CnBhbmdlb190YWJsZSA8LSByZWFkLmNzdihmaWxlLnBhdGgoQkFTRV9ESVIsICJzdGl0Y2hlcyIsICJkYXRhIiwgInBhbmdlb190YWJsZS5jc3YiKSwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQpgYGAKCgpgYGB7cn0KcmVxX2V4cHMgPC0gYygic3NwMTI2IiwgInNzcDI0NSIsICJzc3A1ODUiLCAic3NwMzcwIikKCnBhbmdlb190YWJsZSAlPiUgCiAgZmlsdGVyKHZhcmlhYmxlID09ICJ0YXMiICYgZG9tYWluID09ICJBbW9uIikgJT4lIAogIGZpbHRlcihleHBlcmltZW50ICVpbiUgcmVxX2V4cHMpIC0+IAogIHRhc19leHBzCgp0YXNfZXhwcyAlPiUgCiAgZ3JvdXBfYnkodmFyaWFibGUsIG1vZGVsKSAlPiUgCiAgc3VtbWFyaXNlKGV4cGVyaW1lbnQgPSBuX2Rpc3RpbmN0KGV4cGVyaW1lbnQpKSAlPiUgCiAgZmlsdGVyKGV4cGVyaW1lbnQgPT0gbGVuZ3RoKHJlcV9leHBzKSkgJT4lIAogIHVuZ3JvdXAgLT4KICBmdWxsX2V4cGVyaW1lbnRzIApgYGAKCgojIEhvdyBtYW55IG1vZGVscyBtZWV0IHRoZXNlIGNvbmRpdGlvbnM/IAoKSG93IG1hbnkgbW9kZWxzIG1lZXQgdGhlIGZ1bGwgNCBleHBlcmltZW50IGNyaXRlcmlhPyAKCmBgYHtyfQpsZW5ndGgoZnVsbF9leHBlcmltZW50cyRtb2RlbCkKYGBgCgpPZiB0aGVzZSBtb2RlbHMgd2FodCBkb2VzIHRoZSBlbnNlbWJsZSBjb3VudCBsb29rIGxpa2U/IAoKYGBge3J9CnRhc19leHBzICU+JSAKICBmaWx0ZXIobW9kZWwgJWluJSBmdWxsX2V4cGVyaW1lbnRzJG1vZGVsKSAlPiUgCiAgZ3JvdXBfYnkodmFyaWFibGUsIG1vZGVsLCBleHBlcmltZW50KSAlPiUKICBzdW1tYXJpc2UoZW5zZW1ibGUgPSBuX2Rpc3RpbmN0KGVuc2VtYmxlKSkgLT4gCiAgZW5zZW1ibGVfY291bnRzCmBgYAoKCk9mIHRoZSBtb2RlbHMgd2l0aCBhbGwgdGhlIGV4cGVyaW1lbnRzIGhvdyBtYW55IG1lZXQgdGhlIGNyaXRlcmlhIG9mIH4xMCB0byA4IHBlciBlbnNlbWJsZT8gCgoKYGBge3J9CmVuc2VtYmxlX2NvdW50cyAlPiUgCiAgZmlsdGVyKGVuc2VtYmxlICVpbiUgODoxMCkKYGBgCgpVbmZvcnR1bmF0ZWx5IGl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgb25seSBvbmUgbW9kZWwgdGhhdCBtZWV0cyB0aGVzZSByZXF1aXJlbWVudHMuIExldCdzIGRvIHRoZSBleHBlcmltZW50IHdpdGggdGhlIHZhcmlvdXMgdG9sZXJhbmNlcyAmIHRha2UgYSBsb29rIGF0IHRoZSByZXN1bHRzLiAKCiMgVGFyZ2V0IHNzcDI0NSAKCmBgYHtyfQpyZWFkLmNzdihmaWxlLnBhdGgoQkFTRV9ESVIsICJNUEktRVNNMS0yLUxSX3NzcDI0NXJlc3VsdHMuY3N2IiksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkgJT4lIAogIG11dGF0ZSh0b2wgPSBhcy5jaGFyYWN0ZXIodG9sKSkgJT4lIAogIG11dGF0ZShzdGl0Y2hpbmdfaWQgPSBwYXN0ZTAoc3RpdGNoaW5nX2lkLCAnficsIHRvbCkpIC0+IAogIHNzcDI0NV9kYXRhCmBgYAoKCgpgYGB7cn0Kc3NwMjQ1X2RhdGEgJT4lCiAgbXV0YXRlKG1vZGVsID0gIk1QSS1FU00xLTItTFIiKSAlPiUgCiAgZ3JvdXBfYnkobW9kZWwsIHRvbCkgJT4lIAogIHN1bW1hcmlzZShjb3VudCA9IG5fZGlzdGluY3Qoc3RpdGNoaW5nX2lkKSkgLT4gCiAgc3RpdGNoaW5nX2NvdW50IAoKc3RpdGNoaW5nX2NvdW50ICU+JSAKICBrYWJsZSgpCmBgYAoKCmBgYHtyfQpsaXN0LmZpbGVzKGZpbGUucGF0aChCQVNFX0RJUiwgInN0aXRjaGVzIiwgImRhdGEiLCAidGFzLWRhdGEiKSwgIk1QSS1FU00xLTItTFIiLCBmdWxsLm5hbWVzID0gVFJVRSkgJT4lIAogIHJlYWQuY3N2KHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkgJT4lIAogIGZpbHRlcihncmVwbCh4ID0gZXhwZXJpbWVudCwgcGF0dGVybiA9ICJzc3AiKSkgJT4lICAKICBncm91cF9ieShleHBlcmltZW50KSAlPiUgIAogIHN1bW1hcmlzZShuID0gbl9kaXN0aW5jdChlbnNlbWJsZSkpCgpsaXN0LmZpbGVzKGZpbGUucGF0aChCQVNFX0RJUiwgInN0aXRjaGVzIiwgImRhdGEiLCAidGFzLWRhdGEiKSwgIk1QSS1FU00xLTItTFIiLCBmdWxsLm5hbWVzID0gVFJVRSkgJT4lIAogIHJlYWQuY3N2KHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkgJT4lIAogIGZpbHRlcihleHBlcmltZW50ID09ICAic3NwMjQ1IikgLT4gCiAgb2dfZGF0YQoKc3NwMjQ1X2RhdGEgJT4lIAogIGxlZnRfam9pbihzdGl0Y2hpbmdfY291bnQpICU+JSAKICBtdXRhdGUodG9sX2xhYmVsID0gcGFzdGUwKHRvbCwgIiAoIiwgY291bnQsIikiKSkgJT4lIAogIGdncGxvdCgpICsgCiAgZ2VvbV9saW5lKGFlcyh5ZWFyLCB2YWx1ZSwgY29sb3IgPSB0b2wsIGdyb3VwYnkgPSBzdGl0Y2hpbmdfaWQpKSArIAogIGdlb21fbGluZShkYXRhID0gb2dfZGF0YSwgYWVzKHllYXIsIHZhbHVlLCBncm91cGJ5ID0gZW5zZW1ibGUsIGNvbG9yID0gImNvbXAuIGRhdGEiKSwgYWxwaGEgPSAwLjQpICsgCiAgZmFjZXRfd3JhcCgidG9sX2xhYmVsIiwgbmNvbCA9IDEpICsgCiAgdGhlbWVfYncoKSArIAogIGxhYnMoeSA9ICJEZWcgQyIpICsgCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIjAuMSIgPSAiI0U2OUYwMCIsIjAuMTMiID0gIiM1NkI0RTkiLCAiMC4wNyIgPSAiIzAwOUU3MyIsICJjb21wLiBkYXRhIiA9ICJibGFjayIpKQpgYGAKCgojIFRhcmdldCBzc3AzNzAKCgpgYGB7cn0KcmVhZC5jc3YoZmlsZS5wYXRoKEJBU0VfRElSLCAiTVBJLUVTTTEtMi1MUl9zc3AzNzByZXN1bHRzLmNzdiIpLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpICU+JSAKICBtdXRhdGUodG9sID0gYXMuY2hhcmFjdGVyKHRvbCkpICU+JSAKICBtdXRhdGUoc3RpdGNoaW5nX2lkID0gcGFzdGUwKHN0aXRjaGluZ19pZCwgJ34nLCB0b2wpKSAtPiAKICBzc3AzNzBfZGF0YQpgYGAKCgoKYGBge3J9CnNzcDM3MF9kYXRhICU+JQogIG11dGF0ZShtb2RlbCA9ICJNUEktRVNNMS0yLUxSIikgJT4lIAogIGdyb3VwX2J5KG1vZGVsLCB0b2wpICU+JSAKICBzdW1tYXJpc2UoY291bnQgPSBuX2Rpc3RpbmN0KHN0aXRjaGluZ19pZCkpIC0+IAogIHN0aXRjaGluZ19jb3VudCAKCnN0aXRjaGluZ19jb3VudCAlPiUgCiAga2FibGUoKQpgYGAKCgpgYGB7cn0KCmxpc3QuZmlsZXMoZmlsZS5wYXRoKEJBU0VfRElSLCAic3RpdGNoZXMiLCAiZGF0YSIsICJ0YXMtZGF0YSIpLCAiTVBJLUVTTTEtMi1MUiIsIGZ1bGwubmFtZXMgPSBUUlVFKSAlPiUgCiAgcmVhZC5jc3Yoc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKSAlPiUgCiAgZmlsdGVyKGV4cGVyaW1lbnQgPT0gICJzc3AzNzAiKSAtPiAKICBvZ19kYXRhCgpzc3AzNzBfZGF0YSAlPiUgCiAgbGVmdF9qb2luKHN0aXRjaGluZ19jb3VudCkgJT4lIAogIG11dGF0ZSh0b2xfbGFiZWwgPSBwYXN0ZTAodG9sLCAiICgiLCBjb3VudCwiKSIpKSAlPiUgCiAgZ2dwbG90KCkgKyAKICBnZW9tX2xpbmUoYWVzKHllYXIsIHZhbHVlLCBjb2xvciA9IHRvbCwgZ3JvdXBieSA9IHN0aXRjaGluZ19pZCkpICsgCiAgZ2VvbV9saW5lKGRhdGEgPSBvZ19kYXRhLCBhZXMoeWVhciwgdmFsdWUsIGdyb3VwYnkgPSBlbnNlbWJsZSwgY29sb3IgPSAiY29tcC4gZGF0YSIpLCBhbHBoYSA9IDAuNCkgKyAKICBmYWNldF93cmFwKCJ0b2xfbGFiZWwiLCBuY29sID0gMSkgKyAKICB0aGVtZV9idygpICsgCiAgbGFicyh5ID0gIkRlZyBDIikgKyAKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiMC4xIiA9ICIjRTY5RjAwIiwiMC4xMyIgPSAiIzU2QjRFOSIsICIwLjA3IiA9ICIjMDA5RTczIiwgImNvbXAuIGRhdGEiID0gImJsYWNrIikpCmBgYA==