-
Notifications
You must be signed in to change notification settings - Fork 228
Description
The predict
function outputs wrong results depending on how the multivariate parameters are constructed. I present below a simple linear regression problem which always converge fine, but whose predict
results depend on how the coef
parameter is constructed.
using Turing, Plots, StatsPlots
using Turing.Inference: predict
@model function simple_linear(x, y)
intercept ~ Normal(0,1)
## this corrupts `predict` output
coef ~ MvNormal(2, 1)
## this alternative also
# coef ~ filldist(Normal(0,1), 2)
## but this version works fine
# coef = Vector(undef, 2)
# for i in axes(coef, 1)
# coef[i] ~ Normal(0,1)
# end
## this works too
# coef1 ~ Normal(0,1)
# coef2 ~ Normal(0,1)
# coef = [coef1, coef2]
coef = reshape(coef, 1, size(x,1))
mu = intercept .+ coef * x |> vec
error ~ truncated(Normal(0,1), 0, Inf)
y ~ MvNormal(mu, error)
end
# simple linear transformation
x = randn(2, 100)
y = [1 + 2 * a + 3 * b for (a,b) in eachcol(x)]
chain = sample(simple_linear(x, y), NUTS(), 1000)
# model converges fine
plot(chain) |> display
@show chain
p = predict(simple_linear(x, missing), chain)
# prediction correctness depends on how multivariate params were constructed
@show y[1]
@show p["y[1]"].value.data |> mean # should be close to y[1] above
@show p["y[1]"].value.data |> std # sould be close to 0.0
I'm trying this on Julia 1.4.1 with Turing 0.13.0.
Metadata
Metadata
Assignees
Labels
No labels