RxInfer.jl icon indicating copy to clipboard operation
RxInfer.jl copied to clipboard

Error initializing model parameters as constants in GMM

Open mhidalgoaraya opened this issue 1 year ago • 1 comments

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)

mhidalgoaraya avatar Jun 04 '24 13:06 mhidalgoaraya

@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.

bvdmitri avatar Jun 04 '24 13:06 bvdmitri

Linking this #560 and assigning @ThijsJenneskens because I think these issues are exactly the same.

wouterwln avatar Nov 12 '25 14:11 wouterwln

I talked to Marco, he already fixed it. This issue can be closed.

ThijsJenneskens avatar Nov 12 '25 14:11 ThijsJenneskens