# Posterior predictive checks and LOOCV for multinomial logistic regression

Hi all,

I am running a multinomial logit regression. Everything is running well, but when I am getting an error message when I try to obtain the replications for posterior predictive checking, as well as an error message when trying to get the LOOCV. Here is the code

``````data.list <- list(N=nrow(M),
D=ncol(M),
x=M,

``````
``````modelString <- "

data {
int <lower=2> K;
int <lower=0> N;
int <lower=1> D;
int <lower=1, upper=K> ASBR07A[N];
matrix[N, D] x;
}
parameters {
matrix[D, K] beta;
}
transformed parameters {
matrix[N, K] x_beta= x * beta;
}
model {
to_vector(beta) ~ normal (0,2);
for (i in 1:N) {
ASBR07A[i] ~ categorical_logit(x_beta[i]');
}
}
generated quantities {
int <lower=1, upper=K> ASBR07A_rep[N];
vector[N] log_lik;
for (i in 1:N){
ASBR07A_rep[i] = categorical_logit_rng(x_beta[i]');
log_lik[i] = categorical_logit_lpmf(ASBR07A[i] |x_beta[i]');
}
}
"
``````

# Start estimation

``````nChains = 4
nIter= 5000
thinSteps = 10
burnInSteps = floor(nIter/2)

ASBR07A = data.list\$ASBR07A

MultiNomRegFit = stan(data=data.list,model_code=modelString,
iter=nIter,warmup=burnInSteps,thin=thinSteps)
``````

and here are the error messages

``````> ASBR07A_rep = extract(MultiNomRegFit,"ASBR07A_rep")\$ASBR07A_rep
Error in extract(MultiNomRegFit, "ASBR07A_rep") :
object of type 'S4' is not subsettable
``````

and

`````` log_lik1 = extract_log_lik(MultiNomRegFit, parameter_name="log_lik", merge_chains = FALSE)
Error in extract_log_lik(MultiNomRegFit, parameter_name = "log_lik", merge_chains = FALSE) :
could not find function "extract_log_lik"
``````

David

Actually, I solved the problem with the posterior predictive check by writing

``````ASBR07A_rep = rstan::extract(MultiNomRegFit,"ASBR07A_rep")\$ASBR07A_rep
``````

However, I still canâ€™t seem to get log_lik1. I tried rstan::extract_log_lik, but that didnâ€™t work. I also tried various combinations by just asking for â€śextractâ€ť with rstan:: and also removing the parameter_name statement, to no avail. Thoughts?

Thanks,

David

Are you using extract_log_lik() from the loo package? Maybe loo::extract_log_lik()?

1 Like

That did the trick. Itâ€™s interesting because in other analyses, I didnâ€™t need to use ::

David