Implementation of truncated (selfnormalized) importance sampling (TIS), truncated at S^(1/2) as recommended by Ionides (2008).
tis(log_ratios, ...) # S3 method for array tis(log_ratios, ..., r_eff = NULL, cores = getOption("mc.cores", 1)) # S3 method for matrix tis(log_ratios, ..., r_eff = NULL, cores = getOption("mc.cores", 1)) # S3 method for default tis(log_ratios, ..., r_eff = NULL)
log_ratios  An array, matrix, or vector of importance ratios on the log scale (for Importance sampling LOO, these are negative loglikelihood values). See the Methods (by class) section below for a detailed description of how to specify the inputs for each method. 

...  Arguments passed on to the various methods. 
r_eff  Vector of relative effective sample size estimates containing
one element per observation. The values provided should be the relative
effective sample sizes of 
cores  The number of cores to use for parallelization. This defaults to
the option

The tis()
methods return an object of class "tis"
,
which is a named list with the following components:
log_weights
Vector or matrix of smoothed (and truncated) but unnormalized log
weights. To get normalized weights use the
weights()
method provided for objects of
class tis
.
diagnostics
A named list containing one vector:
pareto_k
: Not used in tis
, all set to 0.
n_eff
: Effective sample size estimates.
Objects of class "tis"
also have the following attributes:
norm_const_log
Vector of precomputed values of colLogSumExps(log_weights)
that are
used internally by the weights()
method to normalize the log weights.
r_eff
If specified, the user's r_eff
argument.
tail_len
Not used for tis
.
dims
Integer vector of length 2 containing S
(posterior sample size)
and N
(number of observations).
method
Method used for importance sampling, here tis
.
array
: An \(I\) by \(C\) by \(N\) array, where \(I\)
is the number of MCMC iterations per chain, \(C\) is the number of
chains, and \(N\) is the number of data points.
matrix
: An \(S\) by \(N\) matrix, where \(S\) is the size
of the posterior sample (with all chains merged) and \(N\) is the number
of data points.
default
: A vector of length \(S\) (posterior sample size).
Ionides, Edward L. (2008). Truncated importance sampling. Journal of Computational and Graphical Statistics 17(2): 295311.
psis()
for approximate LOOCV using PSIS.
loo()
for approximate LOOCV.
paretokdiagnostic for PSIS diagnostics.
log_ratios < 1 * example_loglik_array() r_eff < relative_eff(exp(log_ratios)) tis_result < tis(log_ratios, r_eff = r_eff) str(tis_result)#> List of 2 #> $ log_weights: num [1:1000, 1:32] 2.37 2.12 2.24 2.41 2.25 ... #> $ diagnostics:List of 2 #> ..$ pareto_k: num [1:32] 0 0 0 0 0 0 0 0 0 0 ... #> ..$ n_eff : num [1:32] 901 923 930 896 896 ... #>  attr(*, "norm_const_log")= num [1:32] 9.28 9.04 9.24 9.09 9 ... #>  attr(*, "tail_len")= num [1:32] 99 98 97 100 100 102 99 100 103 98 ... #>  attr(*, "r_eff")= num [1:32] 0.933 0.939 0.968 0.913 0.911 ... #>  attr(*, "dims")= int [1:2] 1000 32 #>  attr(*, "method")= chr "tis" #>  attr(*, "class")= chr [1:3] "tis" "importance_sampling" "list"# extract smoothed weights lw < weights(tis_result) # default args are log=TRUE, normalize=TRUE ulw < weights(tis_result, normalize=FALSE) # unnormalized logweights w < weights(tis_result, log=FALSE) # normalized weights (not logweights) uw < weights(tis_result, log=FALSE, normalize = FALSE) # unnormalized weights