Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/integration/bridge_sampling_integration.jl
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,8 @@ function bridge_sampling_integral(

proposal_measure = batmeasure(MvNormal(post_mean,post_cov_pd))
held_out_ess = bat_eff_sample_size_impl(second_batch, KishESS(), context).result
n_proposal = clamp(round(Int, held_out_ess), 1, length(second_batch))
# The corrected proposal variance needs at least two independent draws.
n_proposal = max(2, min(round(Int, held_out_ess), length(second_batch)))
proposal_samples = samplesof(evalmeasure(
proposal_measure, IIDSampling(nsamples = n_proposal), context,
))
Expand Down
2 changes: 1 addition & 1 deletion src/variates/density_sample.jl
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ function _weighted_empirical_quantile(v::AbstractVector, w::AbstractVector, p::R
isempty(v) && throw(ArgumentError("quantile of an empty array is undefined"))
0 <= p <= 1 || throw(ArgumentError("input probability out of [0,1] range"))

nan_idx = findfirst(isnan, v)
nan_idx = findfirst(i -> !iszero(w[i]) && isnan(v[i]), eachindex(v, w))
isnothing(nan_idx) || return v[nan_idx]

order = sortperm(v)
Expand Down
14 changes: 14 additions & 0 deletions test/integration/test_bridge_sampling_integration.jl
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,20 @@ import Measurements
@test isfinite(Measurements.value(log(result)))
end

@testset "concentrated held-out weights" begin
dist = MvNormal(zeros(1), ones(1))
values = [[x] for x in repeat(range(-1, 1, length = 10), 2)]
samples = DensitySampleVector(
v = values, logd = logpdf.(Ref(dist), values),
weight = [ones(10); 1000; ones(9)],
)
result = bat_integrate(
EvaluatedMeasure(dist, empirical = samples),
BridgeSampling(pretransform = DoNotTransform()), context,
).result
@test isfinite(Measurements.uncertainty(log(result)))
end

test_integration(BridgeSampling(pretransform=DoNotTransform()), "funnel distribution", FunnelDistribution(), val_rtol = 15)
#! ToDo: Fix this test, cause trouble on x86-32
#test_integration(BridgeSampling(pretransform=DoNotTransform()), "multimodal student-t distribution", MultimodalStudentT(), val_rtol = 50)
Expand Down
3 changes: 3 additions & 0 deletions test/variates/test_density_sample.jl
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ _SampleAux() = _SampleInfo(0)
)
@test quantile(samples16, 0.25) == 1.0

zero_mass_nan = DensitySampleVector(v = [1.0, NaN], logd = zeros(2), weight = [1, 0])
@test quantile.(Ref(zero_mass_nan), probabilities) == ones(5)

@test quantile.(Ref(compressed), probabilities) == quantile.(Ref(expanded), probabilities) == expected
end

Expand Down
Loading