ReactiveBayes / RxInfer.jl

Julia package for automated Bayesian inference on a factor graph with reactive message passing
MIT License
265 stars 23 forks source link

Error initializing model parameters as constants in GMM #314

Open mhidalgoaraya opened 3 months ago

mhidalgoaraya commented 3 months ago

Hello, I am trying to initialize a simple toy model with the parameters of a GMM (m_s and τ_s ) as point masses, however I get an error
_ERROR: The number of means and precisions in NormalMixture must be at least 2. Got 1 means and 1 precisions._

@model function lGMM_model(y, μx0, τx0)

    # Switch 
    θ  = 0.5
    m_s= [0.0, 0.0]
    τ_s = [0.01, 0.001]

    xprior ~ Normal(mean = μx0, precision = τx0)

    c ~ Bernoulli(θ)
    s ~ NormalMixture(switch=c, m=m_s, p=τ_s) 

    x ~ Normal(mean = xprior, precision = 0.01) 
    w  := x + s 
    y ~ Normal(mean = w, precision = 0.01)
end

What is is strange is that the initializantion works if I define the parameters as tuples

m_s= (0.0, 0.0) τ_s = (0.01, 0.001)

bvdmitri commented 3 months ago

@wouterwln, the @model macro creates a single constant for m_s instead of an array of individual constants. I'm unsure of the best approach to fix this. Additionally, I'm not certain why it works for tuples. I recommend double-checking if it functions correctly or if it produces arbitrary inference results due to some Julia dispatch magic.