library(tidyverse)
df <-
tibble(n_matches = seq(30)) %>%
mutate(n_cpds = ceiling((1 / (n_matches * 1.5) * 100)))
df
df %>%
ggplot(aes(n_matches, n_cpds)) +
geom_point()

generate_unif_corr <-
function(n_matches, n_cpds) {
seq(n_cpds) %>%
map_dbl(~ mean(runif(n_matches)**2))
}
sd(generate_unif_corr(1, 1000))
[1] 0.3020492
sd(generate_unif_corr(100, 1000))
[1] 0.03106674
df1 <-
df %>%
rowwise() %>%
mutate(avg_corr = list(corr = generate_unif_corr(n_matches, n_cpds)))
df2 <-
df1 %>%
unnest(avg_corr)
df2 %>%
ggplot(aes(avg_corr, n_matches)) +
geom_point() +
ggtitle("Random data")

LS0tCnRpdGxlOiAiU3VwcGxlbWVudGFyeSBGaWd1cmUgUzciCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKYGBgCgoKYGBge3J9CmRmIDwtCiAgdGliYmxlKG5fbWF0Y2hlcyA9IHNlcSgzMCkpICU+JQogIG11dGF0ZShuX2NwZHMgPSBjZWlsaW5nKCgxIC8gKG5fbWF0Y2hlcyAqIDEuNSkgKiAxMDApKSkKCmRmCgpkZiAlPiUKICBnZ3Bsb3QoYWVzKG5fbWF0Y2hlcywgbl9jcGRzKSkgKwogIGdlb21fcG9pbnQoKQpgYGAKCgpgYGB7cn0KZ2VuZXJhdGVfdW5pZl9jb3JyIDwtCiAgZnVuY3Rpb24obl9tYXRjaGVzLCBuX2NwZHMpIHsKICAgIHNlcShuX2NwZHMpICU+JQogICAgICBtYXBfZGJsKH4gbWVhbihydW5pZihuX21hdGNoZXMpKioyKSkKICB9CgpzZChnZW5lcmF0ZV91bmlmX2NvcnIoMSwgMTAwMCkpCnNkKGdlbmVyYXRlX3VuaWZfY29ycigxMDAsIDEwMDApKQpgYGAKCgpgYGB7cn0KZGYxIDwtIAogIGRmICU+JSAKICByb3d3aXNlKCkgJT4lIAogIG11dGF0ZShhdmdfY29yciA9IGxpc3QoY29yciA9IGdlbmVyYXRlX3VuaWZfY29ycihuX21hdGNoZXMsIG5fY3BkcykpKQoKZGYyIDwtIAogIGRmMSAlPiUKICB1bm5lc3QoYXZnX2NvcnIpCgpkZjIgJT4lIAogIGdncGxvdChhZXMoYXZnX2NvcnIsIG5fbWF0Y2hlcykpICsgCiAgZ2VvbV9wb2ludCgpICsKICBnZ3RpdGxlKCJSYW5kb20gZGF0YSIpCmBgYAoKCg==