@@ -199,17 +199,14 @@ psis_n_eff.matrix <- function(w, r_eff = NULL, ...) {
199199# ' @return MCMC effective sample size based on RStan's calculation.
200200# '
201201ess_rfun <- function (sims ) {
202- # Compute the effective sample size for samples of several chains
203- # for one parameter; see the C++ code of function
204- # effective_sample_size in chains.cpp
205- #
206- # Args:
207- # sims: a 2-d array _without_ warmup samples (# iter * # chains)
208- #
209202 if (is.vector(sims )) dim(sims ) <- c(length(sims ), 1 )
210203 chains <- ncol(sims )
211204 n_samples <- nrow(sims )
212- acov <- lapply(1 : chains , FUN = function (i ) autocovariance(sims [,i ]))
205+ if (requireNamespace(" posterior" , quietly = TRUE )) {
206+ acov <- lapply(1 : chains , FUN = function (i ) posterior :: autocovariance(sims [,i ]))
207+ } else {
208+ acov <- lapply(1 : chains , FUN = function (i ) autocovariance(sims [,i ]))
209+ }
213210 acov <- do.call(cbind , acov )
214211 chain_mean <- colMeans(sims )
215212 mean_var <- mean(acov [1 ,]) * n_samples / (n_samples - 1 )
@@ -276,6 +273,7 @@ fft_next_good_size <- function(N) {
276273 }
277274}
278275
276+ # autocovariance function to use if posterior::autocovariance is not available
279277autocovariance <- function (y ) {
280278 # Compute autocovariance estimates for every lag for the specified
281279 # input sequence using a fast Fourier transform approach.
0 commit comments