Skip to content

Commit ca283a8

Browse files
authored
Merge pull request #289 from stan-dev/249-use-more-functions-from-the-posterior-package
Use testthat 3e and rely on posterior for ESS
2 parents 9886905 + c3107f0 commit ca283a8

File tree

84 files changed

+8546
-1008
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+8546
-1008
lines changed

DESCRIPTION

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
1-
Package: loo
21
Type: Package
2+
Package: loo
33
Title: Efficient Leave-One-Out Cross-Validation and WAIC for Bayesian Models
44
Version: 2.8.0.9000
55
Date: 2024-07-03
6-
Authors@R: c(person("Aki", "Vehtari", email = "Aki.Vehtari@aalto.fi", role = c("aut")),
7-
person("Jonah", "Gabry", email = "jsg2201@columbia.edu", role = c("cre", "aut")),
8-
person("Måns", "Magnusson", role = c("aut")),
9-
person("Yuling", "Yao", role = c("aut")),
10-
person("Paul-Christian", "Bürkner", role = c("aut")),
11-
person("Topi", "Paananen", role = c("aut")),
12-
person("Andrew", "Gelman", role = c("aut")),
13-
person("Ben", "Goodrich", role = c("ctb")),
14-
person("Juho", "Piironen", role = c("ctb")),
15-
person("Bruno", "Nicenboim", role = c("ctb")),
16-
person("Leevi", "Lindgren", role = c("ctb")))
6+
Authors@R: c(
7+
person("Aki", "Vehtari", , "Aki.Vehtari@aalto.fi", role = "aut"),
8+
person("Jonah", "Gabry", , "jsg2201@columbia.edu", role = c("cre", "aut")),
9+
person("Måns", "Magnusson", role = "aut"),
10+
person("Yuling", "Yao", role = "aut"),
11+
person("Paul-Christian", "Bürkner", role = "aut"),
12+
person("Topi", "Paananen", role = "aut"),
13+
person("Andrew", "Gelman", role = "aut"),
14+
person("Ben", "Goodrich", role = "ctb"),
15+
person("Juho", "Piironen", role = "ctb"),
16+
person("Bruno", "Nicenboim", role = "ctb"),
17+
person("Leevi", "Lindgren", role = "ctb")
18+
)
1719
Maintainer: Jonah Gabry <jsg2201@columbia.edu>
18-
URL: https://mc-stan.org/loo/, https://discourse.mc-stan.org
19-
BugReports: https://github.com/stan-dev/loo/issues
2020
Description: Efficient approximate leave-one-out cross-validation (LOO)
21-
for Bayesian models fit using Markov chain Monte Carlo, as
22-
described in Vehtari, Gelman, and Gabry (2017)
23-
<doi:10.1007/s11222-016-9696-4>.
24-
The approximation uses Pareto smoothed importance sampling (PSIS),
25-
a new procedure for regularizing importance weights.
26-
As a byproduct of the calculations, we also obtain approximate
27-
standard errors for estimated predictive errors and for the comparison
28-
of predictive errors between models. The package also provides methods
29-
for using stacking and other model weighting techniques to average
30-
Bayesian predictive distributions.
21+
for Bayesian models fit using Markov chain Monte Carlo, as described
22+
in Vehtari, Gelman, and Gabry (2017) <doi:10.1007/s11222-016-9696-4>.
23+
The approximation uses Pareto smoothed importance sampling (PSIS), a
24+
new procedure for regularizing importance weights. As a byproduct of
25+
the calculations, we also obtain approximate standard errors for
26+
estimated predictive errors and for the comparison of predictive
27+
errors between models. The package also provides methods for using
28+
stacking and other model weighting techniques to average Bayesian
29+
predictive distributions.
3130
License: GPL (>=3)
32-
LazyData: TRUE
31+
URL: https://mc-stan.org/loo/, https://discourse.mc-stan.org
32+
BugReports: https://github.com/stan-dev/loo/issues
3333
Depends:
3434
R (>= 3.1.2)
3535
Imports:
@@ -50,8 +50,13 @@ Suggests:
5050
rstantools,
5151
spdep,
5252
testthat (>= 2.1.0)
53-
VignetteBuilder: knitr
53+
VignetteBuilder:
54+
knitr
55+
Config/testthat/edition: 3
56+
Config/testthat/parallel: true
57+
Config/testthat/start-first: loo_subsampling_cases, loo_subsampling
5458
Encoding: UTF-8
55-
SystemRequirements: pandoc (>= 1.12.3), pandoc-citeproc
56-
RoxygenNote: 7.3.2
59+
LazyData: TRUE
5760
Roxygen: list(markdown = TRUE)
61+
RoxygenNote: 7.3.2
62+
SystemRequirements: pandoc (>= 1.12.3), pandoc-citeproc

R/effective_sample_sizes.R

Lines changed: 3 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ relative_eff.array <- function(x, ..., cores = getOption("mc.cores", 1)) {
6363
S <- prod(dim(x)[1:2]) # posterior sample size = iter * chains
6464

6565
if (cores == 1) {
66-
n_eff_vec <- apply(x, 3, ess_rfun)
66+
n_eff_vec <- apply(x, 3, posterior::ess_mean)
6767
} else {
6868
if (!os_is_windows()) {
6969
n_eff_list <-
7070
parallel::mclapply(
7171
mc.cores = cores,
7272
X = seq_len(dim(x)[3]),
73-
FUN = function(i) ess_rfun(x[, , i, drop = TRUE])
73+
FUN = function(i) posterior::ess_mean(x[, , i, drop = TRUE])
7474
)
7575
} else {
7676
cl <- parallel::makePSOCKcluster(cores)
@@ -79,7 +79,7 @@ relative_eff.array <- function(x, ..., cores = getOption("mc.cores", 1)) {
7979
parallel::parLapply(
8080
cl = cl,
8181
X = seq_len(dim(x)[3]),
82-
fun = function(i) ess_rfun(x[, , i, drop = TRUE])
82+
fun = function(i) posterior::ess_mean(x[, , i, drop = TRUE])
8383
)
8484
}
8585
n_eff_vec <- unlist(n_eff_list, use.names = FALSE)
@@ -192,82 +192,3 @@ psis_n_eff.matrix <- function(w, r_eff = NULL, ...) {
192192
}
193193
1 / ss * r_eff
194194
}
195-
196-
#' MCMC effective sample size calculation
197-
#'
198-
#' @noRd
199-
#' @param sims An iterations by chains matrix of draws for a single parameter.
200-
#' In the case of the **loo** package, this will be the **exponentiated**
201-
#' log-likelihood values for the ith observation.
202-
#' @return MCMC effective sample size based on RStan's calculation.
203-
#'
204-
ess_rfun <- function(sims) {
205-
if (is.vector(sims)) dim(sims) <- c(length(sims), 1)
206-
chains <- ncol(sims)
207-
n_samples <- nrow(sims)
208-
acov <- lapply(1:chains, FUN = function(i) posterior::autocovariance(sims[,i]))
209-
acov <- do.call(cbind, acov)
210-
chain_mean <- colMeans(sims)
211-
mean_var <- mean(acov[1,]) * n_samples / (n_samples - 1)
212-
var_plus <- mean_var * (n_samples - 1) / n_samples
213-
if (chains > 1)
214-
var_plus <- var_plus + var(chain_mean)
215-
# Geyer's initial positive sequence
216-
rho_hat_t <- rep.int(0, n_samples)
217-
t <- 0
218-
rho_hat_even <- 1
219-
rho_hat_t[t + 1] <- rho_hat_even
220-
rho_hat_odd <- 1 - (mean_var - mean(acov[t + 2, ])) / var_plus
221-
rho_hat_t[t + 2] <- rho_hat_odd
222-
while (t < nrow(acov) - 5 && !is.nan(rho_hat_even + rho_hat_odd) &&
223-
(rho_hat_even + rho_hat_odd > 0)) {
224-
t <- t + 2
225-
rho_hat_even = 1 - (mean_var - mean(acov[t + 1, ])) / var_plus
226-
rho_hat_odd = 1 - (mean_var - mean(acov[t + 2, ])) / var_plus
227-
if ((rho_hat_even + rho_hat_odd) >= 0) {
228-
rho_hat_t[t + 1] <- rho_hat_even
229-
rho_hat_t[t + 2] <- rho_hat_odd
230-
}
231-
}
232-
max_t <- t
233-
# this is used in the improved estimate
234-
if (rho_hat_even>0)
235-
rho_hat_t[max_t + 1] <- rho_hat_even
236-
237-
# Geyer's initial monotone sequence
238-
t <- 0
239-
while (t <= max_t - 4) {
240-
t <- t + 2
241-
if (rho_hat_t[t + 1] + rho_hat_t[t + 2] >
242-
rho_hat_t[t - 1] + rho_hat_t[t]) {
243-
rho_hat_t[t + 1] = (rho_hat_t[t - 1] + rho_hat_t[t]) / 2;
244-
rho_hat_t[t + 2] = rho_hat_t[t + 1];
245-
}
246-
}
247-
ess <- chains * n_samples
248-
# Geyer's truncated estimate
249-
# tau_hat <- -1 + 2 * sum(rho_hat_t[1:max_t])
250-
# Improved estimate reduces variance in antithetic case
251-
tau_hat <- -1 + 2 * sum(rho_hat_t[1:max_t]) + rho_hat_t[max_t+1]
252-
# Safety check for negative values and with max ess equal to ess*log10(ess)
253-
tau_hat <- max(tau_hat, 1/log10(ess))
254-
ess <- ess / tau_hat
255-
ess
256-
}
257-
258-
259-
fft_next_good_size <- function(N) {
260-
# Find the optimal next size for the FFT so that
261-
# a minimum number of zeros are padded.
262-
if (N <= 2)
263-
return(2)
264-
while (TRUE) {
265-
m = N
266-
while ((m %% 2) == 0) m = m / 2
267-
while ((m %% 3) == 0) m = m / 3
268-
while ((m %% 5) == 0) m = m / 5
269-
if (m <= 1)
270-
return(N)
271-
N = N + 1
272-
}
273-
}

tests/testthat/_snaps/E_loo.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# E_loo.default equal to snapshots
2+
3+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAABP5YkyJk2Uw4AAAAOAAAAAT/CCf5d2lYl
4+
AAAEAgAAAAEABAAJAAAABW5hbWVzAAAAEAAAAAIABAAJAAAABXZhbHVlAAQACQAAAAhwYXJl
5+
dG9fawAAAP4=
6+
7+
---
8+
9+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAABP+99QfBwyEoAAAAOAAAAAT/CwzqDy8zd
10+
AAAEAgAAAAEABAAJAAAABW5hbWVzAAAAEAAAAAIABAAJAAAABXZhbHVlAAQACQAAAAhwYXJl
11+
dG9fawAAAP4=
12+
13+
---
14+
15+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAABP+++XajbmJQAAAAOAAAAAT/CwzqDy8zd
16+
AAAEAgAAAAEABAAJAAAABW5hbWVzAAAAEAAAAAIABAAJAAAABXZhbHVlAAQACQAAAAhwYXJl
17+
dG9fawAAAP4=
18+
19+
---
20+
21+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAABP5Q/UH4+kokAAAAOAAAAAT+pC/0t4hZY
22+
AAAEAgAAAAEABAAJAAAABW5hbWVzAAAAEAAAAAIABAAJAAAABXZhbHVlAAQACQAAAAhwYXJl
23+
dG9fawAAAP4=
24+
25+
---
26+
27+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAADv/RdTp/OKVA/lD9Qfj6SiT/0B+XkzCLI
28+
AAAADgAAAAE/qQv9LeIWWAAABAIAAAABAAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAV2
29+
YWx1ZQAEAAkAAAAIcGFyZXRvX2sAAAD+
30+
31+
# E_loo.matrix equal to snapshots
32+
33+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAAgP5YkyJk2Uw4/qWAe5+slHb+UGxtRYEj6
34+
v3phLSMHz52/odiRUA18Oz+j5kMZY+OZv6UiBYpZA1c/gOCbIdkALD+aGlgT7KOMv6le704r
35+
1Mk/lQ5ZQDf3uj+ewlXQr8iOv7Cx0vAv3x8/qBb/vlaNmD+RVknGML4AP5YmXOYjb6E/oOks
36+
rHS+3b+SlEsEisU6v5de/GugPA6/poyaPupPOr+GCwyWu+Dpv3vFGSbfabK/mtljUf0Mlz+K
37+
vNxsu3xMv6N5GBqP57a/jGhAZ3mD+L+mlNu35k+lP3ecrpcfLVC/dzGNuHKBtD+g/BS/OEnN
38+
v4Igw4FPLoM/WQ0Eo+5f+gAAAA4AAAAgP8IJ/l3aViU/pca2RdOM3j+/8rXkBqCrv6pIWFgx
39+
3Ro/zBDTTM3Ckz+e+pZvzROmP8SF8jCU81Y/2kxN82LpUD+ht5lbUInzP8PjBotEZAk/sBld
40+
t19woT+1Fp9rH8ZgP7mOpdZ+VZ8/uQOl7kpZID/YnY9OInbSP9Gy/iCM9TY/4pVb5TMm8D/h
41+
I59hPK5oP9i6DzMC02U/2d2gH1IGej/Fs7T0mf6XP80BWgAOvZg/wVDbzlrO2z/I8p50vNhw
42+
P82+MASgNhQ/vbA2GxXFDz+ISvs8AG4SP9R81IdrKFQ/x2BUQaDJEz+7JHLaPhQmP8TX8Aiv
43+
VNQ/wcnwypNNIwAABAIAAAABAAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAV2YWx1ZQAE
44+
AAkAAAAIcGFyZXRvX2sAAAD+
45+
46+
---
47+
48+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAAgP+99QfBwyEo/8GLAkD/xED/urslTY/r8
49+
P+9KWn8Ems8/8CFJIrn2dz/vm+wdgqz5P/AqS8QTOzQ/8Cbqm5CTOT/xSPL9dvdTP+8H16ot
50+
cmc/8Eke14BJfj/vYHX1dPLcP/BiQhlcUl4/78dCMDeGID/vSig0D8UoP/AOt7Yy0Nc/8QBL
51+
caz6WD/v2Rg/ai74P+7+Midd/Bg/7b36n0mRlT/wXcau4TfXP+/m6IR7cp4/8DQ+EMd7Xj/u
52+
46MOX9w+P/Gsf0/jcxw/7yZac/NVID/u8Trrn7y5P/AFJDL0n7s/72gByARvRT/wDbVLG9Ph
53+
P+8uXczdPuI/7yVeIEvf5gAAAA4AAAAgP8LDOoPLzN0/vC9PGiC2mD/Dw665YwtSv0/zEf9g
54+
gzs/wrKXeFX04D+6oCb1eqeGP9VkIEZUNbU/2kxN82LpUD+ht5lbUInzP8CPzHjviWW/oC1v
55+
Ox8Noz+3SaHHVF8tv5miuj3t2Pk/yY0i+C8iSD/YnY9OInbSP9Gy/iCM9TY/3teTRr7GQT/l
56+
5tcuLT5aP9i6DzMC02U/1PsEKxeyET+/YoKHfssaP80BWgAOvZg/uJULoaFQPT/I8p50vNhw
57+
P9eBi3nBuZc/x4JCmLKJjj+5nmB9gzl/P9R81IdrKFQ/w+sDN0nZGz+1z55LjIrMP8TX8Aiv
58+
VNQ/zWAJ7qX34gAABAIAAAABAAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAV2YWx1ZQAE
59+
AAkAAAAIcGFyZXRvX2sAAAD+
60+
61+
---
62+
63+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAAgP+++XajbmJQ/8DEU/8Lr5j/vVZ8WRY5+
64+
P++kqukYCOA/8BCb8nKMzD/vzc6xkMxBP/AVF/p+31Y/8BNphxvXqz/woUx0rrHkP++C95Ag
65+
m9k/8CRmBO/JwD/vr9aTD09nP/Aw1oOFlzI/7+OUeVFCtz/vpJF6/sziP/AHWiqornE/8H4z
66+
/wmU2T/v7IYye0D5P+9+EUnmiwk/7tm0BTqf0j/wLp9qBaS7P+/zccuuIkY/8BoJ2GEYeT/v
67+
cJAOK3HZP/DQ66mN/dI/75Jxr/yrxj/vd3o8ODlDP/ACkeSklNY/77OlzUqqMT/wBtkuWosN
68+
P++WgQC9Cqo/75Hxz1uVVwAAAA4AAAAgP8LDOoPLzN0/vC9PGiC2mD/Dw665YwtSv0/zEf9g
69+
gzs/wrKXeFX04D+6oCb1eqeGP9VkIEZUNbU/2kxN82LpUD+ht5lbUInzP8CPzHjviWW/oC1v
70+
Ox8Noz+3SaHHVF8tv5miuj3t2Pk/yY0i+C8iSD/YnY9OInbSP9Gy/iCM9TY/3teTRr7GQT/l
71+
5tcuLT5aP9i6DzMC02U/1PsEKxeyET+/YoKHfssaP80BWgAOvZg/uJULoaFQPT/I8p50vNhw
72+
P9eBi3nBuZc/x4JCmLKJjj+5nmB9gzl/P9R81IdrKFQ/w+sDN0nZGz+1z55LjIrMP8TX8Aiv
73+
VNQ/zWAJ7qX34gAABAIAAAABAAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAV2YWx1ZQAE
74+
AAkAAAAIcGFyZXRvX2sAAAD+
75+
76+
---
77+
78+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAA4AAAAgP5Q/UH4+kok/rJhyoKzLQ7+mS88H3cZO
79+
v4Diw77SBPK/nJmNhpoF3z+eJuXpnME8v6uKXkbg5Hc/iwobiZz0Yz+CcwHscaAbv7nU2Akt
80+
GX+/kI6eu9QpOj+rntL08OAEv7OnDaPGnrk/qZJuk37o6j+khJ9TfTs9v3VOr8Mp0w4/Y4WW
81+
2hIb6L+5piRwV8y9v51UE9Vh3d6/vDKUx9urWT+Vff+IHf9IP4PB4HUxxjK/rgu97ZVdnD91
82+
l2lfiMfQv6ABPz28O8C/sFJbkh7yZL+o2Wq0N3S+P4Zn3piChxE/bj6AYsnnNj93X8jkk/2u
83+
v5UhfPojTuu/pJCpz+t4lwAAAA4AAAAgP6kL/S3iFli/rllsqlAP3D+xkRFa2o0Dv6pIWFgx
84+
3Rq/vbbHaFe7lL+3wSib9eF2P7e2HDVDyo8/2kxN82LpUD+ht5lbUInzv76dY0fV19G/oC1v
85+
Ox8No7+xUxB4TL1Bv7MRS5NxFNQ/uQOl7kpZID/YnY9OInbSP9Gy/iCM9TY/3teTRr7GQT/V
86+
Uo3UFZa8P9i6DzMC02U/1PsEKxeyET+mimNy3QAxP80BWgAOvZg/uEa4KLePjD/I8p50vNhw
87+
v5z9lPVoNWw/vbA2GxXFDz+ISvs8AG4SP9R81IdrKFQ/w+sDN0nZGz+1z55LjIrMP8TX8Aiv
88+
VNQ/taMpWVYn7wAABAIAAAABAAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAV2YWx1ZQAE
89+
AAkAAAAIcGFyZXRvX2sAAAD+
90+
91+
---
92+
93+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAg4AAABAv/RdTp/OKVA/9Afl5MwiyL/z0FnOG0F+
94+
P/W3tESq+hG/83dZE3d+GD/zW0+Mmka2v/XZilmZkLg/9Anod0Btdb/0f6W0vqw/P/OZiJ83
95+
G76/9JCX02s4vD/z/c7djgcNv/TDQRow++g/86vcLJmh6L/0wjA4NlBjP/RMb7F0RzK/9HAc
96+
YG8N8D/1mlKBbWwFv/SagAvlYpw/88LV9Rj1xb/0mH86EFjXP/QlJsXLmXy/9FUITMCdhT/0
97+
YOU3NGbzv/XZiRsmTKE/8/w2ct9kJL/zwk+t/SPSP/Y2Nkb1kwi/9Jccz9A3RT/z1vUQMbyE
98+
v/Szng+3zeY/9MciBArOKL/0f9xw2jLPP/Vga+lxCxC/8tVQDeo7Az/1p5eybgglv/SJCtxH
99+
yEM/9AVPifNnSr/zjLE8SzISP/Ohe1nttQ6/9S6bPIHJgT/0hd4sDJmuv/RsPduiC1E/89vZ
100+
GzKrar/1FZjeT/k2P/S7KA0QeGi/83Y/x5KlBz/ztNqmF3ywv/ZCUvZXPyI/9PI83KF96L/0
101+
Ml3NWrX1P/Rnu9LXaiq/9WcGWiOq+D/zkg6tBDLov/T2vDTMsMs/9Og0XHuRtr/04y833CW8
102+
P/NqXO3hEbG/9HEUw/KPQD/1y+CeGQebv/SL1cuvxX8/9SbAzpRiIb/zufzsmkU1P/S0K91V
103+
63IAAAQCAAAAAQAEAAkAAAADZGltAAAADQAAAAIAAAACAAAAIAAAAP4AAAAOAAAAID+pC/0t
104+
4hZYv65ZbKpQD9w/sZERWtqNA7+qSFhYMd0av722x2hXu5S/t8Eom/Xhdj+3thw1Q8qPP9pM
105+
TfNi6VA/obeZW1CJ87++nWNH1dfRv6AtbzsfDaO/sVMQeEy9Qb+zEUuTcRTUP7kDpe5KWSA/
106+
2J2PTiJ20j/Rsv4gjPU2P97Xk0a+xkE/1VKN1BWWvD/Yug8zAtNlP9T7BCsXshE/popjct0A
107+
MT/NAVoADr2YP7hGuCi3j4w/yPKedLzYcL+c/ZT1aDVsP72wNhsVxQ8/iEr7PABuEj/UfNSH
108+
ayhUP8PrAzdJ2Rs/tc+eS4yKzD/E1/AIr1TUP7WjKVlWJ+8AAAQCAAAAAQAEAAkAAAAFbmFt
109+
ZXMAAAAQAAAAAgAEAAkAAAAFdmFsdWUABAAJAAAACHBhcmV0b19rAAAA/g==
110+

tests/testthat/_snaps/compare.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# loo_compare returns expected results (2 models)
2+
3+
WAoAAAACAAQFAAACAwAAAAMOAAAAEAAAAAAAAAAAwBA6U1+cRe4AAAAAAAAAAD+2ake0LxMB
4+
wFTh8N3JQljAVeWWE8MGuUARCD2zEXBfQBEalRIN2T9ACijAYdW5U0AmZ5XrANCKP/H9Zexy
5+
814/8ZtgnG1nx0Bk4fDdyUJYQGXllhPDBrlAIQg9sxFwX0AhGpUSDdk/AAAEAgAAAAEABAAJ
6+
AAAAA2RpbQAAAA0AAAACAAAAAgAAAAgAAAQCAAAAAQAEAAkAAAAIZGltbmFtZXMAAAATAAAA
7+
AgAAABAAAAACAAQACQAAAAZtb2RlbDEABAAJAAAABm1vZGVsMgAAABAAAAAIAAQACQAAAAll
8+
bHBkX2RpZmYABAAJAAAAB3NlX2RpZmYABAAJAAAACWVscGRfd2FpYwAEAAkAAAAMc2VfZWxw
9+
ZF93YWljAAQACQAAAAZwX3dhaWMABAAJAAAACXNlX3Bfd2FpYwAEAAkAAAAEd2FpYwAEAAkA
10+
AAAHc2Vfd2FpYwAABAIAAAABAAQACQAAAAVjbGFzcwAAABAAAAADAAQACQAAAAtjb21wYXJl
11+
LmxvbwAEAAkAAAAGbWF0cml4AAQACQAAAAVhcnJheQAAAP4=
12+
13+
# loo_compare returns expected result (3 models)
14+
15+
WAoAAAACAAQFAAACAwAAAAMOAAAAGAAAAAAAAAAAwBA6U1+cRe7AMA3KkbYEGAAAAAAAAAAA
16+
P7ZqR7QvEwE/y6/t4TTtXsBU4fDdyUJYwFXllhPDBrnAWOVjgjbDYkARCD2zEXBfQBEalRIN
17+
2T9AEPIF3GigE0AKKMBh1blTQCZnlesA0IpAQcjYUhrdCj/x/WXscvNeP/GbYJxtZ8c/8YDQ
18+
kmfJX0Bk4fDdyUJYQGXllhPDBrlAaOVjgjbDYkAhCD2zEXBfQCEalRIN2T9AIPIF3GigEwAA
19+
BAIAAAABAAQACQAAAANkaW0AAAANAAAAAgAAAAMAAAAIAAAEAgAAAAEABAAJAAAACGRpbW5h
20+
bWVzAAAAEwAAAAIAAAAQAAAAAwAEAAkAAAAGbW9kZWwxAAQACQAAAAZtb2RlbDIABAAJAAAA
21+
Bm1vZGVsMwAAABAAAAAIAAQACQAAAAllbHBkX2RpZmYABAAJAAAAB3NlX2RpZmYABAAJAAAA
22+
CWVscGRfd2FpYwAEAAkAAAAMc2VfZWxwZF93YWljAAQACQAAAAZwX3dhaWMABAAJAAAACXNl
23+
X3Bfd2FpYwAEAAkAAAAEd2FpYwAEAAkAAAAHc2Vfd2FpYwAABAIAAAABAAQACQAAAAVjbGFz
24+
cwAAABAAAAADAAQACQAAAAtjb21wYXJlLmxvbwAEAAkAAAAGbWF0cml4AAQACQAAAAVhcnJh
25+
eQAAAP4=
26+
27+
# compare returns expected result (2 models)
28+
29+
Code
30+
comp1
31+
Output
32+
elpd_diff se
33+
0.0 0.0
34+
35+
---
36+
37+
Code
38+
comp2
39+
Output
40+
elpd_diff se
41+
-4.1 0.1
42+
43+
# compare returns expected result (3 models)
44+
45+
WAoAAAACAAQFAAACAwAAAAMOAAAAGAAAAAAAAAAAwBA6U1+cRe7AMA3KkbYEGAAAAAAAAAAA
46+
P7ZqR7QvEwE/y6/t4TTtXsBU4fDdyUJYwFXllhPDBrnAWOVjgjbDYkARCD2zEXBfQBEalRIN
47+
2T9AEPIF3GigE0AKKMBh1blTQCZnlesA0IpAQcjYUhrdCj/x/WXscvNeP/GbYJxtZ8c/8YDQ
48+
kmfJX0Bk4fDdyUJYQGXllhPDBrlAaOVjgjbDYkAhCD2zEXBfQCEalRIN2T9AIPIF3GigEwAA
49+
BAIAAAABAAQACQAAAANkaW0AAAANAAAAAgAAAAMAAAAIAAAEAgAAAAEABAAJAAAACGRpbW5h
50+
bWVzAAAAEwAAAAIAAAAQAAAAAwAEAAkAAAACdzEABAAJAAAAAncyAAQACQAAAAJ3MwAAABAA
51+
AAAIAAQACQAAAAllbHBkX2RpZmYABAAJAAAAB3NlX2RpZmYABAAJAAAACWVscGRfd2FpYwAE
52+
AAkAAAAMc2VfZWxwZF93YWljAAQACQAAAAZwX3dhaWMABAAJAAAACXNlX3Bfd2FpYwAEAAkA
53+
AAAEd2FpYwAEAAkAAAAHc2Vfd2FpYwAABAIAAAABAAQACQAAAAVjbGFzcwAAABAAAAAEAAQA
54+
CQAAAAtjb21wYXJlLmxvbwAEAAkAAAAGbWF0cml4AAQACQAAAAVhcnJheQAEAAkAAAAPb2xk
55+
X2NvbXBhcmUubG9vAAAA/g==
56+

tests/testthat/_snaps/crps.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# crps matches snapshots
2+
3+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAg4AAAACv+IeiUeluMc/vSY1w5IjJgAABAIAAAAB
4+
AAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAhFc3RpbWF0ZQAEAAkAAAACU0UAAAD+AAAA
5+
DgAAAAq/zdHHAHZD6L/K3ky9mEk4v/B2uF/xc76/38/N1JUUkL/Z4VW5uFHUv/D3XaD33ZO/
6+
yPJtFZYXlL/RgM+YTul0v+9F9Rv30V+/6Q2h5ndyqgAABAIAAAH/AAAAEAAAAAIABAAJAAAA
7+
CWVzdGltYXRlcwAEAAkAAAAJcG9pbnR3aXNlAAAA/g==
8+
9+
---
10+
11+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAg4AAAACv/ELnetrJtw/uJgUmYONYAAABAIAAAAB
12+
AAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAhFc3RpbWF0ZQAEAAkAAAACU0UAAAD+AAAA
13+
DgAAAAq/6MKGUxChmr/pWmzfnhawv/dXJCu4gh2/7/dH2oOKIL/tR104AbV4v/fX3UkYDWm/
14+
5+ZWJz0Y3r/qbdDewNjFv/aQu+wUiEO/89yOK7F4DAAABAIAAAH/AAAAEAAAAAIABAAJAAAA
15+
CWVzdGltYXRlcwAEAAkAAAAJcG9pbnR3aXNlAAAA/g==
16+
17+
---
18+
19+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAg4AAAACv+IVUtAszNU/vWbB6hSQFgAABAIAAAAB
20+
AAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAhFc3RpbWF0ZQAEAAkAAAACU0UAAAD+AAAA
21+
DgAAAAq/zKEONUJbrL/KuMhrCsFsv/BrsoFFUDu/31EWnT302L/ZnTwwjfZiv/E78Fc0R+6/
22+
yM8apxh02L/RTacKeM0kv+6ksQycKl+/6bkMJjTk9gAABAIAAAH/AAAAEAAAAAIABAAJAAAA
23+
CWVzdGltYXRlcwAEAAkAAAAJcG9pbnR3aXNlAAAA/g==
24+
25+
---
26+
27+
WAoAAAACAAQFAAACAwAAAAITAAAAAgAAAg4AAAACv/EL1OkLv00/uNvlkZb58AAABAIAAAAB
28+
AAQACQAAAAVuYW1lcwAAABAAAAACAAQACQAAAAhFc3RpbWF0ZQAEAAkAAAACU0UAAAD+AAAA
29+
DgAAAAq/6JdmIec4s7/pNG4XiJ0yv/diwSdPiFi/77pjBRqbxr/tO+gNa/rMv/glDLlafB6/
30+
5+SScRdhOb/qdN1KnaG+v/Y6AtSCgWa/9Ca44XM7bgAABAIAAAH/AAAAEAAAAAIABAAJAAAA
31+
CWVzdGltYXRlcwAEAAkAAAAJcG9pbnR3aXNlAAAA/g==
32+

0 commit comments

Comments
 (0)