Closed jtrakk closed 2 years ago
Can you give me code to replicate the error?
This reproduces ArgumentError: reducing over an empty collection is not allowed
.
Is it clear what I'm doing wrong?
using Soss, SampleChainsDynamicHMC, TypedTables, Random, MeasureTheory
m = @model (d) begin
β1 ~ Normal(μ=0., σ=0.05)
rs = rows(d)
y ~ let rs = rs
For(rs) do r
v = β1 * r.x1
p = logistic(v)
Bernoulli(p)
end
end
end
pred = predictive(m)
n = 100
tbl = Table(x1 = rand(1:10, n), res=rand(Bool, n))
condmod = m(d=collect(tbl)) | (; y=tbl.res)
multichain = Soss.sample(Random.GLOBAL_RNG, condmod, dynamichmc(), 10, 1)
mapped = map(θ->pred(;d=tbl,), multichain);
simulate.(mapped)
julia> predictive(m)
@model begin
end
Do you mean to say
julia> predictive(m, :β1)
@model (d, β1) begin
rs = rows(d)
y ~ let rs = rs
For(rs) do r
v = β1 * r.x1
p = logistic(v)
Bernoulli(p)
end
end
end
Then maybe
mapped = map(multichain) do sample
rand(pred(d=d, β1=sample.β1))
end
Thanks, that fixes my issue for simulate
and rand
. Still getting that error for predict
though, and the non-broadcasted version hangs:
using Soss, SampleChainsDynamicHMC, TypedTables, Random, MeasureTheory, DataFrames
m = @model (d) begin
β1 ~ Normal(μ=0., σ=0.05)
rs = rows(d)
y ~ For(rs) do r
v = β1 * r.x1
p = logistic(v)
Bernoulli(p)
end
end
n = 100
tbl = DataFrame(x1 = rand(Float64.(1:10), n), res=rand(Bool, n))
condmod = m(d=tbl) | (; y=tbl.res)
multichain = Soss.sample(Random.GLOBAL_RNG, condmod, dynamichmc(), 10, 1)
pred = predictive(m, :β1)
mapped = [pred(;d=tbl,β1=θ.β1) for θ in multichain];
simulate.(mapped)
rand.(mapped)
predict.(mapped) # ArgumentError: reducing over an empty collection is not allowed
predict(mapped) # hangs
It's the same problem. predictive
makes a new model using the names of variables you'd like to turn into arguments. predict
is basically predictive
followed by rand
. The code for it is pretty short, and may be the easiest way to see what it does:
https://github.com/cscherrer/Soss.jl/blob/master/src/transforms/predict.jl
Got it, thanks!
I'm hitting this error in
predict(::ConditionalModel)
.