Skip to content

Querying from a chain given an explicitly ignored variable throws an error #198

@mgmverburg

Description

@mgmverburg

I believe I found an issue, that may or may not be related to the previous issue I created (#190).

So, with a very similar model to the first issue I created, I now tried to see what happens when I query using a chain, and instead of specifying a conditional, explicitly ignoring one (so setting it as missing or nothing). I believe this should be possible, because otherwise I cannot think of how else to perform such a query. Essentially, when having 2 random variables A and B, I just want to calculate P(A).

using Turing

@model function gdemo(x, y)
    s ~ InverseGamma(2, 3)
    m ~ Normal(0, sqrt(s))
    x ~ Normal(m, sqrt(s))
    for i in 1:length(y)
        y[i] ~ Normal(x, sqrt(s))
    end
end

model_gdemo = gdemo(1.0, [1.5, 0.0])
c2 = sample(model_gdemo, NUTS(0.65), 100)

result1 = prob"y = [1.5] | chain = c2, model = model_gdemo, x = nothing"
Stacktrace

MethodError: no method matching vectorize(::Distributions.Normal{Float64}, ::Missing)

Closest candidates are:

vectorize(::Distributions.Distribution{Distributions.Univariate,S} where S<:Distributions.ValueSupport, !Matched::Real) at /home/michiel/.julia/packages/DynamicPPL/rPTnE/src/utils.jl:109

  1. tilde(::Random._GLOBAL_RNG, ::DynamicPPL.LikelihoodContext{NamedTuple{(:chain, :model, :x),Tuple{MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}},DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}},Missing}}}, ::DynamicPPL.SampleFromPrior, ::Distributions.Normal{Float64}, ::DynamicPPL.VarName{:x,Tuple{}}, ::Tuple{}, ::DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64})@context_implementations.jl:34
    2. tilde_assume(::Random._GLOBAL_RNG, ::DynamicPPL.LikelihoodContext{NamedTuple{(:chain, :model, :x),Tuple{MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}},DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}},Missing}}}, ::DynamicPPL.SampleFromPrior, ::Distributions.Normal{Float64}, ::DynamicPPL.VarName{:x,Tuple{}}, ::Tuple{}, ::DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64})@context_implementations.jl:52
    3. Immutable parameters support #1@Other: 5[inlined]
    4. (::Main.workspace167.var"Immutable parameters support #1#2")(::Random._GLOBAL_RNG, ::DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(:x,),Tuple{Missing,Array{Float64,1}},Tuple{}}, ::DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64}, ::DynamicPPL.SampleFromPrior, ::DynamicPPL.LikelihoodContext{NamedTuple{(:chain, :model, :x),Tuple{MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}},DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}},Missing}}}, ::Missing, ::Array{Float64,1})@none:0
    5. macro expansion@model.jl:0[inlined]
    6. _evaluate(::Random._GLOBAL_RNG, ::DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(:x,),Tuple{Missing,Array{Float64,1}},Tuple{}}, ::DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64}, ::DynamicPPL.SampleFromPrior, ::DynamicPPL.LikelihoodContext{NamedTuple{(:chain, :model, :x),Tuple{MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}},DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}},Missing}}})@model.jl:160
    7. evaluate_threadunsafe(::Random._GLOBAL_RNG, ::DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(:x,),Tuple{Missing,Array{Float64,1}},Tuple{}}, ::DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64}, ::DynamicPPL.SampleFromPrior, ::DynamicPPL.LikelihoodContext{NamedTuple{(:chain, :model, :x),Tuple{MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}},DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}},Missing}}})@model.jl:130
    8. (::DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(:x,),Tuple{Missing,Array{Float64,1}},Tuple{}})(::Random._GLOBAL_RNG, ::DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64}, ::DynamicPPL.SampleFromPrior, ::DynamicPPL.LikelihoodContext{NamedTuple{(:chain, :model, :x),Tuple{MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}},DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}},Missing}}})@model.jl:92
    9. (::DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(:x,),Tuple{Missing,Array{Float64,1}},Tuple{}})(::DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64}, ::Vararg{Any,N} where N)@model.jl:98
    10. (::DynamicPPL.var"[WIP] Fix support for distributions with stochastic support #115#116"{DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(:x,),Tuple{Missing,Array{Float64,1}},Tuple{}},DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64},MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}}})(::Tuple{Int64,Int64})@prob_macro.jl:197
    11. iterate@generator.jl:47[inlined]
    12. collect(::Base.Generator{Base.Iterators.ProductIterator{Tuple{UnitRange{Int64},UnitRange{Int64}}},DynamicPPL.var"[WIP] Fix support for distributions with stochastic support #115#116"{DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(:x,),Tuple{Missing,Array{Float64,1}},Tuple{}},DynamicPPL.VarInfo{NamedTuple{(:s, :m, :x),Tuple{DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:s,Tuple{}},Int64},Array{Distributions.InverseGamma{Float64},1},Array{DynamicPPL.VarName{:s,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:m,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:m,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}},DynamicPPL.Metadata{Dict{DynamicPPL.VarName{:x,Tuple{}},Int64},Array{Distributions.Normal{Float64},1},Array{DynamicPPL.VarName{:x,Tuple{}},1},Array{Float64,1},Array{Set{DynamicPPL.Selector},1}}}},Float64},MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}}}})@array.jl:686
    13. map(::Function, ::Base.Iterators.ProductIterator{Tuple{UnitRange{Int64},UnitRange{Int64}}})@abstractarray.jl:2188
    14. loglikelihood(::NamedTuple{(:y,),Tuple{Array{Float64,1}}}, ::NamedTuple{(:chain, :model, :x),Tuple{MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}},DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}},Missing}}, ::DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}}, ::Nothing)@prob_macro.jl:195
    15. logprob(::NamedTuple{(:y,),Tuple{Array{Float64,1}}}, ::NamedTuple{(:chain, :model, :x),Tuple{MCMCChains.Chains{Float64,AxisArrays.AxisArray{Float64,3,Array{Float64,3},Tuple{AxisArrays.Axis{:iter,StepRange{Int64,Int64}},AxisArrays.Axis{:var,Array{Symbol,1}},AxisArrays.Axis{:chain,UnitRange{Int64}}}},Missing,NamedTuple{(:parameters, :internals),Tuple{Array{Symbol,1},Array{Symbol,1}}},NamedTuple{(),Tuple{}}},DynamicPPL.Model{Main.workspace167.var"Immutable parameters support #1#2",(:x, :y),(),(),Tuple{Float64,Array{Float64,1}},Tuple{}},Missing}})@prob_macro.jl:29
    16. top-level scope@Local: 5

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions