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()
model tol count
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()
model tol count
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==