Skip to content

Commit d2e5c12

Browse files
committed
Add test of dp measure fix.
1 parent 4f2924a commit d2e5c12

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

packages/nimble/tests/testthat/test-bnp.R

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)