We start by loading the required packages & functions.

rm(list = ls())
library(tidyverse)
library(Rcpp)
library(mvtnorm)
library(reshape2)
library(cowplot)
library(latex2exp)
sourceCpp("c_functions.cpp")
source("R_functions.R")

First, a test.

quad_err_C_uni(a_y = 0, r_y = 0.97, s_y = 0.1, TT = 5, k = 1, n_sim = 10^5)
[1] 0.01851007
quad_err_C_2d2(a_x = 0, a_y = 0, r_x = 0.97, r_y = 0.97, s_x = 0.1, s_y = 0.1, cor = 0.1, TT = 5, k = 1, n_sim = 10^5)
[1] 0.02408703

Next, wrapping the functions.

univ <- function(r_y, TT, k){
    return(quad_err_C_uni(a_y = 0, r_y = r_y, s_y = 1, TT = TT, k = k, n_sim = 10^6))
}

biv <- function(r_x, r_y, cor, TT, k){
    return(quad_err_C_2d2(a_x = 0, a_y = 0, r_x = r_x, r_y = r_y, s_x = 1, s_y = 1, 
                          cor = cor, TT = TT, k = k, n_sim = 10^6))
}

Then, the parameters.

k <- c(1, 12, 24)
TT <- c(6, 9, 12, 15, 18, 21, 24, 30, 36, 48, 60, 90, 120)
#TT <- c(7,8,10,11,13,14,16,17)
r_y <- c(0.3, 0.9)
pars_univ <- expand.grid(r_y, TT, k)
r_y <- pars_univ[,1]
TT <- pars_univ[,2]
k <- pars_univ[,3]
res_univ <- pmap(list(r_y, TT, k), univ) %>% melt() %>% bind_cols(pars_univ)


k <- c(1, 12, 24) # BEWARE
TT <- c(6, 9, 12, 15, 18, 21, 24, 30, 36, 48, 60, 90, 120)
r_y <- c(0.3, 0.9)
r_x <- c(0, 0.5, 0.9, 0.95, 0.99)
cor <- c(0, 0.5, 0.9)
pars_biv <- expand.grid(r_y, r_x, cor, TT, k)
r_y <- pars_biv[,1]
r_x <- pars_biv[,2]
cor <- pars_biv[,3]
TT <- pars_biv[,4]
k <- pars_biv[,5]
res_biv <- pmap(list(r_x, r_y, cor, TT, k), biv) %>% melt() %>% bind_cols(pars_biv)

Some data wrangling.

res_biv <- res_biv %>%
    select(-L1)
colnames(res_biv) <- c("MSE", "r_y", "r_x", "cor", "TT", "k")
res_univ <- res_univ %>%
    select(-L1)
colnames(res_univ) <- c("MSE", "r_y", "TT", "k")
res_univ <- res_univ %>%
    mutate(r_x = NA,  cor = NA) %>%
    select("MSE", "r_y", "r_x", "cor", "TT", "k")


res_univ$type <- "univariate"
res_biv$type <- "bivariate"
res <- bind_rows(res_univ, res_biv) 
#save(res, file = "res_uni.RData")

Some graphs below.

res <- res %>% mutate(R2 = 1-(1-r_y)*MSE)
cor_g <- 0.5
k_g <- 1
r_y_g <- 0.3
T_thresh <- 6
size <- 1.6
g1 <- res %>% 
    filter(TT > T_thresh) %>%
    ggplot(aes(x = TT, y = R2)) + 
    geom_point(data = res %>% filter(type == "bivariate", k == k_g, r_y == r_y_g, cor == cor_g), 
               aes(color = as.factor(r_x)), size = size) +
    geom_line(data = res %>% filter(type == "univariate", k == k_g, r_y == r_y_g), color = "black") +
    theme(legend.position = "none") +
    ggtitle(TeX("$\\rho_y$=0.3")) +
    theme(plot.title = element_text(hjust = 0.6, vjust = -1)) +
    ylab("k=1") + xlab("T")


k_g <- 1
r_y_g <- 0.9
g2 <- res %>% 
    filter(TT > T_thresh) %>%
    ggplot(aes(x = TT, y = R2)) + 
    geom_point(data = res %>% filter(type == "bivariate", k == k_g, r_y == r_y_g, cor == cor_g), 
               aes(color = as.factor(r_x)), size = size) +
    geom_line(data = res %>% filter(type == "univariate", k == k_g, r_y == r_y_g), color = "black") +
    theme(legend.position = "none") +
    ylab(element_blank()) + xlab("T") +
    theme(plot.title = element_text(hjust = 0.6, vjust = -1)) +
    ggtitle(TeX("$\\rho_y$=0.9"))

k_g <- 12
r_y_g <- 0.3
g3 <- res %>% 
    filter(TT > T_thresh) %>%
    ggplot(aes(x = TT, y = R2)) + 
    geom_point(data = res %>% filter(type == "bivariate", k == k_g, r_y == r_y_g, cor == cor_g), 
               aes(color = as.factor(r_x)), size = size) +
    geom_line(data = res %>% filter(type == "univariate", k == k_g, r_y == r_y_g), color = "black") +
    theme(legend.position = c(0.8, 0.2)) +
    ylab("k=12") + xlab("T") +
    labs(color = TeX("$\\rho_x"))

k_g <- 12
r_y_g <- 0.9
g4 <- res %>% 
    filter(TT > T_thresh) %>%
    ggplot(aes(x = TT, y = R2)) + 
    geom_point(data = res %>% filter(type == "bivariate", k == k_g, r_y == r_y_g, cor == cor_g), 
               aes(color = as.factor(r_x)), size = size) +
    geom_line(data = res %>% filter(type == "univariate", k == k_g, r_y == r_y_g), color = "black") +
    theme(legend.position = "none") +
    ylab(element_blank()) + xlab("T")

k_g <- 24
r_y_g <- 0.3
g5 <- res %>%
    filter(TT > T_thresh) %>%
    ggplot(aes(x = TT, y = R2)) + 
    geom_point(data = res %>% filter(type == "bivariate", k == k_g, r_y == r_y_g, cor == cor_g), 
               aes(color = as.factor(r_x)), size = size) +
    geom_line(data = res %>% filter(type == "univariate", k == k_g, r_y == r_y_g), color = "black") +
    theme(legend.position = "none") +
    ylab("k=24") + xlab("T") +
    labs(color = TeX("$\\rho_x"))

k_g <- 24
r_y_g <- 0.9
g6 <- res %>% 
    filter(TT > T_thresh) %>%
    ggplot(aes(x = TT, y = R2)) + 
    geom_point(data = res %>% filter(type == "bivariate", k == k_g, r_y == r_y_g, cor == cor_g), 
               aes(color = as.factor(r_x)), size = size) +
    geom_line(data = res %>% filter(type == "univariate", k == k_g, r_y == r_y_g), color = "black") +
    theme(legend.position = "none") +
    ylab(element_blank()) + xlab("T")

plot_grid(g1, g2, g3, g4, g5, g6, ncol = 2)

# ggsave("univ.pdf", width = 7, height = 5)
LS0tCnRpdGxlOiAiUHJlZGljdGl2ZSByZWdyZXNzaW9uczogdW5pdmFyaWF0ZSBsZWFybmluZyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKV2Ugc3RhcnQgYnkgbG9hZGluZyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgJiBmdW5jdGlvbnMuCgpgYGB7ciwgbWVzc2FnZSA9IEYsIHdhcm5pbmcgPSBGLCBzaXplID0gImZvb3Rub3Rlc2l6ZSJ9CnJtKGxpc3QgPSBscygpKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShSY3BwKQpsaWJyYXJ5KG12dG5vcm0pCmxpYnJhcnkocmVzaGFwZTIpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShsYXRleDJleHApCnNvdXJjZUNwcCgiY19mdW5jdGlvbnMuY3BwIikKc291cmNlKCJSX2Z1bmN0aW9ucy5SIikKYGBgCgoKRmlyc3QsIGEgdGVzdC4KCmBgYHtyfQpxdWFkX2Vycl9DX3VuaShhX3kgPSAwLCByX3kgPSAwLjk3LCBzX3kgPSAwLjEsIFRUID0gNSwgayA9IDEsIG5fc2ltID0gMTBeNSkKcXVhZF9lcnJfQ18yZDIoYV94ID0gMCwgYV95ID0gMCwgcl94ID0gMC45Nywgcl95ID0gMC45Nywgc194ID0gMC4xLCBzX3kgPSAwLjEsIGNvciA9IDAuMSwgVFQgPSA1LCBrID0gMSwgbl9zaW0gPSAxMF41KQpgYGAKCk5leHQsIHdyYXBwaW5nIHRoZSBmdW5jdGlvbnMuCgpgYGB7cn0KdW5pdiA8LSBmdW5jdGlvbihyX3ksIFRULCBrKXsKICAgIHJldHVybihxdWFkX2Vycl9DX3VuaShhX3kgPSAwLCByX3kgPSByX3ksIHNfeSA9IDEsIFRUID0gVFQsIGsgPSBrLCBuX3NpbSA9IDEwXjYpKQp9CgpiaXYgPC0gZnVuY3Rpb24ocl94LCByX3ksIGNvciwgVFQsIGspewogICAgcmV0dXJuKHF1YWRfZXJyX0NfMmQyKGFfeCA9IDAsIGFfeSA9IDAsIHJfeCA9IHJfeCwgcl95ID0gcl95LCBzX3ggPSAxLCBzX3kgPSAxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjb3IsIFRUID0gVFQsIGsgPSBrLCBuX3NpbSA9IDEwXjYpKQp9CmBgYAoKClRoZW4sIHRoZSBwYXJhbWV0ZXJzLgoKYGBge3J9CmsgPC0gYygxLCAxMiwgMjQpClRUIDwtIGMoNiwgOSwgMTIsIDE1LCAxOCwgMjEsIDI0LCAzMCwgMzYsIDQ4LCA2MCwgOTAsIDEyMCkKI1RUIDwtIGMoNyw4LDEwLDExLDEzLDE0LDE2LDE3KQpyX3kgPC0gYygwLjMsIDAuOSkKcGFyc191bml2IDwtIGV4cGFuZC5ncmlkKHJfeSwgVFQsIGspCnJfeSA8LSBwYXJzX3VuaXZbLDFdClRUIDwtIHBhcnNfdW5pdlssMl0KayA8LSBwYXJzX3VuaXZbLDNdCnJlc191bml2IDwtIHBtYXAobGlzdChyX3ksIFRULCBrKSwgdW5pdikgJT4lIG1lbHQoKSAlPiUgYmluZF9jb2xzKHBhcnNfdW5pdikKCgprIDwtIGMoMSwgMTIsIDI0KSAjIEJFV0FSRQpUVCA8LSBjKDYsIDksIDEyLCAxNSwgMTgsIDIxLCAyNCwgMzAsIDM2LCA0OCwgNjAsIDkwLCAxMjApCnJfeSA8LSBjKDAuMywgMC45KQpyX3ggPC0gYygwLCAwLjUsIDAuOSwgMC45NSwgMC45OSkKY29yIDwtIGMoMCwgMC41LCAwLjkpCnBhcnNfYml2IDwtIGV4cGFuZC5ncmlkKHJfeSwgcl94LCBjb3IsIFRULCBrKQpyX3kgPC0gcGFyc19iaXZbLDFdCnJfeCA8LSBwYXJzX2JpdlssMl0KY29yIDwtIHBhcnNfYml2WywzXQpUVCA8LSBwYXJzX2JpdlssNF0KayA8LSBwYXJzX2JpdlssNV0KcmVzX2JpdiA8LSBwbWFwKGxpc3Qocl94LCByX3ksIGNvciwgVFQsIGspLCBiaXYpICU+JSBtZWx0KCkgJT4lIGJpbmRfY29scyhwYXJzX2JpdikKCmBgYAoKClNvbWUgZGF0YSB3cmFuZ2xpbmcuCgpgYGB7cn0KcmVzX2JpdiA8LSByZXNfYml2ICU+JQogICAgc2VsZWN0KC1MMSkKY29sbmFtZXMocmVzX2JpdikgPC0gYygiTVNFIiwgInJfeSIsICJyX3giLCAiY29yIiwgIlRUIiwgImsiKQpyZXNfdW5pdiA8LSByZXNfdW5pdiAlPiUKICAgIHNlbGVjdCgtTDEpCmNvbG5hbWVzKHJlc191bml2KSA8LSBjKCJNU0UiLCAicl95IiwgIlRUIiwgImsiKQpyZXNfdW5pdiA8LSByZXNfdW5pdiAlPiUKICAgIG11dGF0ZShyX3ggPSBOQSwgIGNvciA9IE5BKSAlPiUKICAgIHNlbGVjdCgiTVNFIiwgInJfeSIsICJyX3giLCAiY29yIiwgIlRUIiwgImsiKQoKCnJlc191bml2JHR5cGUgPC0gInVuaXZhcmlhdGUiCnJlc19iaXYkdHlwZSA8LSAiYml2YXJpYXRlIgpyZXMgPC0gYmluZF9yb3dzKHJlc191bml2LCByZXNfYml2KSAKI3NhdmUocmVzLCBmaWxlID0gInJlc191bmkuUkRhdGEiKQoKYGBgCgoKU29tZSBncmFwaHMgYmVsb3cuCgpgYGB7cn0KcmVzIDwtIHJlcyAlPiUgbXV0YXRlKFIyID0gMS0oMS1yX3kpKk1TRSkKY29yX2cgPC0gMC41CmtfZyA8LSAxCnJfeV9nIDwtIDAuMwpUX3RocmVzaCA8LSA2CnNpemUgPC0gMS42CmcxIDwtIHJlcyAlPiUgCiAgICBmaWx0ZXIoVFQgPiBUX3RocmVzaCkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBUVCwgeSA9IFIyKSkgKyAKICAgIGdlb21fcG9pbnQoZGF0YSA9IHJlcyAlPiUgZmlsdGVyKHR5cGUgPT0gImJpdmFyaWF0ZSIsIGsgPT0ga19nLCByX3kgPT0gcl95X2csIGNvciA9PSBjb3JfZyksIAogICAgICAgICAgICAgICBhZXMoY29sb3IgPSBhcy5mYWN0b3Iocl94KSksIHNpemUgPSBzaXplKSArCiAgICBnZW9tX2xpbmUoZGF0YSA9IHJlcyAlPiUgZmlsdGVyKHR5cGUgPT0gInVuaXZhcmlhdGUiLCBrID09IGtfZywgcl95ID09IHJfeV9nKSwgY29sb3IgPSAiYmxhY2siKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICAgIGdndGl0bGUoVGVYKCIkXFxyaG9feSQ9MC4zIikpICsKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjYsIHZqdXN0ID0gLTEpKSArCiAgICB5bGFiKCJrPTEiKSArIHhsYWIoIlQiKQoKCmtfZyA8LSAxCnJfeV9nIDwtIDAuOQpnMiA8LSByZXMgJT4lIAogICAgZmlsdGVyKFRUID4gVF90aHJlc2gpICU+JQogICAgZ2dwbG90KGFlcyh4ID0gVFQsIHkgPSBSMikpICsgCiAgICBnZW9tX3BvaW50KGRhdGEgPSByZXMgJT4lIGZpbHRlcih0eXBlID09ICJiaXZhcmlhdGUiLCBrID09IGtfZywgcl95ID09IHJfeV9nLCBjb3IgPT0gY29yX2cpLCAKICAgICAgICAgICAgICAgYWVzKGNvbG9yID0gYXMuZmFjdG9yKHJfeCkpLCBzaXplID0gc2l6ZSkgKwogICAgZ2VvbV9saW5lKGRhdGEgPSByZXMgJT4lIGZpbHRlcih0eXBlID09ICJ1bml2YXJpYXRlIiwgayA9PSBrX2csIHJfeSA9PSByX3lfZyksIGNvbG9yID0gImJsYWNrIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICB5bGFiKGVsZW1lbnRfYmxhbmsoKSkgKyB4bGFiKCJUIikgKwogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNiwgdmp1c3QgPSAtMSkpICsKICAgIGdndGl0bGUoVGVYKCIkXFxyaG9feSQ9MC45IikpCgprX2cgPC0gMTIKcl95X2cgPC0gMC4zCmczIDwtIHJlcyAlPiUgCiAgICBmaWx0ZXIoVFQgPiBUX3RocmVzaCkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBUVCwgeSA9IFIyKSkgKyAKICAgIGdlb21fcG9pbnQoZGF0YSA9IHJlcyAlPiUgZmlsdGVyKHR5cGUgPT0gImJpdmFyaWF0ZSIsIGsgPT0ga19nLCByX3kgPT0gcl95X2csIGNvciA9PSBjb3JfZyksIAogICAgICAgICAgICAgICBhZXMoY29sb3IgPSBhcy5mYWN0b3Iocl94KSksIHNpemUgPSBzaXplKSArCiAgICBnZW9tX2xpbmUoZGF0YSA9IHJlcyAlPiUgZmlsdGVyKHR5cGUgPT0gInVuaXZhcmlhdGUiLCBrID09IGtfZywgcl95ID09IHJfeV9nKSwgY29sb3IgPSAiYmxhY2siKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKDAuOCwgMC4yKSkgKwogICAgeWxhYigiaz0xMiIpICsgeGxhYigiVCIpICsKICAgIGxhYnMoY29sb3IgPSBUZVgoIiRcXHJob194IikpCgprX2cgPC0gMTIKcl95X2cgPC0gMC45Cmc0IDwtIHJlcyAlPiUgCiAgICBmaWx0ZXIoVFQgPiBUX3RocmVzaCkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBUVCwgeSA9IFIyKSkgKyAKICAgIGdlb21fcG9pbnQoZGF0YSA9IHJlcyAlPiUgZmlsdGVyKHR5cGUgPT0gImJpdmFyaWF0ZSIsIGsgPT0ga19nLCByX3kgPT0gcl95X2csIGNvciA9PSBjb3JfZyksIAogICAgICAgICAgICAgICBhZXMoY29sb3IgPSBhcy5mYWN0b3Iocl94KSksIHNpemUgPSBzaXplKSArCiAgICBnZW9tX2xpbmUoZGF0YSA9IHJlcyAlPiUgZmlsdGVyKHR5cGUgPT0gInVuaXZhcmlhdGUiLCBrID09IGtfZywgcl95ID09IHJfeV9nKSwgY29sb3IgPSAiYmxhY2siKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICAgIHlsYWIoZWxlbWVudF9ibGFuaygpKSArIHhsYWIoIlQiKQoKa19nIDwtIDI0CnJfeV9nIDwtIDAuMwpnNSA8LSByZXMgJT4lCiAgICBmaWx0ZXIoVFQgPiBUX3RocmVzaCkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBUVCwgeSA9IFIyKSkgKyAKICAgIGdlb21fcG9pbnQoZGF0YSA9IHJlcyAlPiUgZmlsdGVyKHR5cGUgPT0gImJpdmFyaWF0ZSIsIGsgPT0ga19nLCByX3kgPT0gcl95X2csIGNvciA9PSBjb3JfZyksIAogICAgICAgICAgICAgICBhZXMoY29sb3IgPSBhcy5mYWN0b3Iocl94KSksIHNpemUgPSBzaXplKSArCiAgICBnZW9tX2xpbmUoZGF0YSA9IHJlcyAlPiUgZmlsdGVyKHR5cGUgPT0gInVuaXZhcmlhdGUiLCBrID09IGtfZywgcl95ID09IHJfeV9nKSwgY29sb3IgPSAiYmxhY2siKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICAgIHlsYWIoIms9MjQiKSArIHhsYWIoIlQiKSArCiAgICBsYWJzKGNvbG9yID0gVGVYKCIkXFxyaG9feCIpKQoKa19nIDwtIDI0CnJfeV9nIDwtIDAuOQpnNiA8LSByZXMgJT4lIAogICAgZmlsdGVyKFRUID4gVF90aHJlc2gpICU+JQogICAgZ2dwbG90KGFlcyh4ID0gVFQsIHkgPSBSMikpICsgCiAgICBnZW9tX3BvaW50KGRhdGEgPSByZXMgJT4lIGZpbHRlcih0eXBlID09ICJiaXZhcmlhdGUiLCBrID09IGtfZywgcl95ID09IHJfeV9nLCBjb3IgPT0gY29yX2cpLCAKICAgICAgICAgICAgICAgYWVzKGNvbG9yID0gYXMuZmFjdG9yKHJfeCkpLCBzaXplID0gc2l6ZSkgKwogICAgZ2VvbV9saW5lKGRhdGEgPSByZXMgJT4lIGZpbHRlcih0eXBlID09ICJ1bml2YXJpYXRlIiwgayA9PSBrX2csIHJfeSA9PSByX3lfZyksIGNvbG9yID0gImJsYWNrIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICB5bGFiKGVsZW1lbnRfYmxhbmsoKSkgKyB4bGFiKCJUIikKCnBsb3RfZ3JpZChnMSwgZzIsIGczLCBnNCwgZzUsIGc2LCBuY29sID0gMikKIyBnZ3NhdmUoInVuaXYucGRmIiwgd2lkdGggPSA3LCBoZWlnaHQgPSA1KQpgYGAKCgpgYGB7cn0KCmBgYAoK