greta-dev / greta

simple and scalable statistical modelling in R
https://greta-stats.org
Other
543 stars 63 forks source link

error in calculate call when using mixture distribution #728

Open AugustHao opened 1 month ago

AugustHao commented 1 month ago

If mixture is used to define distribution, and I try to run calculate on a parameter of the model with both posterior samples provided through values arg and number of simulations through nsim arg, then I get hit with error argument is of length zero.

It seems to have something to do with how the mixture distribution node is defined in dag, maybe some attribute is missing.

Note this error does not occur if running calculate without specifying either values or nsim


library(greta)
#> 
#> Attaching package: 'greta'
#> The following objects are masked from 'package:stats':
#> 
#>     binomial, cov2cor, poisson
#> The following objects are masked from 'package:base':
#> 
#>     %*%, apply, backsolve, beta, chol2inv, colMeans, colSums, diag,
#>     eigen, forwardsolve, gamma, identity, rowMeans, rowSums, sweep,
#>     tapply
weights_raw <- uniform(0, 1, dim = 1)
#> ℹ Initialising python and checking dependencies, this may take a moment.
#> ✔ Initialising python and checking dependencies ... done!
#> 
weights <- c(weights_raw, 1 - weights_raw)
alpha <- beta <- normal(0,1)
a <- mixture(normal(alpha, 0.5),
             normal(beta, 0.5),
             weights = weights
)
m <- model(a)
fit <- mcmc(m, n_samples = 500)
#> running 4 chains simultaneously on up to 8 CPU cores
#> 
#>     warmup                                           0/1000 | eta:  ?s              warmup ==                                       50/1000 | eta: 24s              warmup ====                                    100/1000 | eta: 13s              warmup ======                                  150/1000 | eta:  9s              

calculate(weights, values = fit, nsim = 10)
#> argument is of length zero

Created on 2024-10-15 with reprex v2.1.1