I am attempting to build a simple multivariate normal example in stan using the target+= accumulator. I am doing this to learn how to code up a custom likelihood using the same format.
However, I keep getting the same error and I can’t work out where it is coming from or how to resolve it.
No matches for:
Available argument signatures for multi_normal:
Real return type required for probability function
This occurs at line 33 in the stan file below.
After checking for past posts in this forum regarding the issue, I believe that this is occurring due to me not understanding how the target+= vs ~ notation works but I have been unable to resolve it.
Below I have also included my R code to fit the model.
data {
int<lower=0> n;
int<lower = 1> p;
vector[p] x[n];
vector[p] beta_0;
matrix[p,p] sigma_0;
matrix[p,p] sigma;
}
parameters {
real mu;
real<lower=0> rho;
}
model {
mu~multi_normal(beta_0,sigma_0);
rho~inv_gamma(2, 2);
target+=multi_normal_lpdf(x[n]|mu,rho*sigma);
//y ~ normal(mu, sigma);
}
The data is embedded in the r code.
rm(list=ls())
library(rstan)
library(MASS)
x <- matrix(c( .8, 102,
1.0, 98,
.5, 100,
.9, 105,
.7, 103,
.4, 110,
1.2, 99,
1.4, 87,
.6, 113,
1.1, 89,
1.3, 93), nrow=11, ncol=2, byrow=TRUE)
n<-nrow(x)
sigma_<-diag(c(1,1))
sigma_[1,2]<-.5
sigma_[2,1]<-.5
beta_0_=c(0,0)
sigma_0_=diag(c(.1,.1))
p=2
data_ <- list(x=x,
n=n,
sigma=sigma_,
p=2,
beta_0=beta_0,
sigma_0=sigma_0)
niter_ <- 3000
nchains_ <- 4
full_fit <- stan('/D/Dissertation/Chapter2/R/Multivariate_Normal_Distribution_V01.stan', data = data_,
iter = niter_, chains = nchains_, verbose = FALSE)