@@ -1727,6 +1727,54 @@ test_that("check use of epsilon parameter in getSamplesDPmeasure", {
17271727})
17281728
17291729
1730+ test_that(" getSamplesDPmeasure handles change in size from tildeVars to use with data" , {
1731+ code_bnp_mvn_reg = nimbleCode({
1732+ alpha ~ dgamma(alpha_shape , alpha_rate )
1733+ z [1 : n ] ~ dCRP(alpha , size = n )
1734+ for ( k in 1 : Kmax ) {
1735+ beta [1 : pJ , k ] ~ dmnorm(beta_mean [1 : pJ ], cov = beta_cov [1 : pJ , 1 : pJ ])
1736+ Sigma [1 : J , 1 : J , k ] ~ dinvwish(S = Sigma_scale [1 : J , 1 : J ], df = Sigma_df )
1737+ }
1738+ for ( i in 1 : n ) {
1739+ mu [i , 1 : J ] <- X [id_start [i ]: id_end [i ], 1 : pJ ] %*% beta [1 : pJ , z [i ]]
1740+ y [id_start [i ]: id_end [i ]] ~ dmnorm(mu [i , 1 : J ], cov = Sigma [1 : J , 1 : J , z [i ]])
1741+ }
1742+ })
1743+ pJ <- 7
1744+ J <- 3
1745+ n <- 20
1746+ Kmax <- 12
1747+
1748+ X <- matrix (rnorm(n * J * pJ ), nrow = n * J )
1749+ id_start = integer(n )
1750+ id_end = integer(n )
1751+ id_start [1 ] = 1
1752+ id_end [1 ] = J
1753+ for ( i in 2 : n ) {
1754+ id_end [i ] = id_end [i - 1 ] + J
1755+ id_start [i ] = id_end [i ] - (J - 1 )
1756+ }
1757+ constants <- list (pJ = pJ , J = J , n = n , Kmax = Kmax , id_start = id_start , id_end = id_end )
1758+
1759+ data = list (y = rnorm(n * J ), X = X )
1760+ Sigma <- array (0 , c(J ,J ,Kmax ))
1761+ for (i in 1 : Kmax ) Sigma [,,i ] <- diag(J )
1762+ inits <- list (alpha = 2 , z = rep(1 , n ), beta = matrix (rnorm(pJ * Kmax ), nrow = pJ ),
1763+ Sigma = Sigma , beta_mean = rep(0 , pJ ), beta_cov = diag(pJ ),
1764+ Sigma_scale = diag(J ), Sigma_df = 5 , alpha_shape = 8 , alpha_rate = 2 )
1765+
1766+ model <- nimbleModel(code_bnp_mvn_reg , constants , data , inits )
1767+ mcmcConf <- configureMCMC(model , monitors = c(' alpha' , ' beta' , ' Sigma' , ' z' ) )
1768+ cmodel <- compileNimble(model )
1769+ mcmc <- buildMCMC(mcmcConf )
1770+ cmcmc <- compileNimble(mcmc , project = cmodel )
1771+ fit <- runMCMC(cmcmc , niter = 10 , nburnin = 0 )
1772+ fit_stick <- getSamplesDPmeasure(cmcmc )
1773+ expect_identical(length(fit_stick ), 10L )
1774+ expect_identical(dim(fit_stick [[1 ]]), c(29L , 1L + 7L + 9L ))
1775+ })
1776+
1777+
17301778
17311779
17321780
0 commit comments