func <- function(x, sd, parm, phi) {
## IID N(0, sd^2)
f1 <- function(x)sum(dnorm(x, sd=sd, log=TRUE))
Sigma <- diag(2) + parm
## MVNORM(0, Sigma)
f2 <- function(x)dmvnorm(x, Sigma=Sigma, log=TRUE)
## AR(2) process
f3 <- function(x)dautoreg(x, phi=phi, log=TRUE)
## Separable extension (implicit log=TRUE)
-dseparable(f1, f2, f3)(x)
}
parameters <- list(x = array(0, c(10, 2, 10)), sd=2, parm=1, phi=c(.9, -.2))
obj <- MakeADFun(function(p)do.call(func, p), parameters, random="x")
## Check that density integrates to 1
obj$fn()
## Check that integral is independent of the outer parameters
obj$gr()
## Check that we can simulate from this density
s <- obj$simulate()
Run the code above in your browser using DataLab