Hello
I am trying to write a poisson arrival model that incorporates 2 rate changes. Unlike the change point model in the manual (8.2), my change points are in continuous time. For the single rate change model I managed to marginalise the parameter using integrals and achieved a similar result to that of the manual’s example. Now with the 2 rate change model I am getting the fatal error of ‘Log probability evaluates to log(0)’. I was wondering if anyone has experience with a similar model.
This is my simulated data I am using to test the model
simuldata <- rep(0,23)
simuldata[1:7] <- rexp(7,0.001)
simuldata[8:15] <- rexp(8,0.002)
simuldata[16:23] <- rexp(8,0.003)
D = cumsum(simuldata)
T = cumsum(simuldata)[length(simuldata)]+100
data {
real<lower=0> T; //total observation time
int<lower=1> N; //number of observations
vector[N] D; //arrival time data
}
transformed data{
vector[N+2] DAT;
DAT[1] = 0;
DAT[2:(N+1)] = D;
DAT[N+2] = T; //appends bracket of total observation time around data
}
parameters {
real<lower=0> lambda1; //first rate
real<lower=0> lambda2; //second rate
real<lower=0> lambda3; //third rate
}
transformed parameters {
matrix[(N+1),(N+1)] lp3;
for (i in 1:(N+1)) {
lp3[i,i] = log((lambda1/lambda3)^(i-1)*((exp(-(lambda1-lambda2)*DAT[i+1])-exp(-(lambda1-lambda2)*DAT[i]))*exp(-(lambda2-lambda3)*DAT[i+1])/(lambda2-lambda1) -
(exp(-(lambda1-lambda3)*DAT[i+1])-exp(-(lambda1-lambda3)*DAT[i]))/(lambda3-lambda1))/(lambda3-lambda2));
}
for (i in 1:N) {
for (j in (i+1):(N+1)) {
lp3[i,j]= log(((lambda1/lambda2)^(i-1))*(exp(-(lambda1-lambda2)*DAT[i+1])-exp(-(lambda1-lambda2)*DAT[i]))*
((lambda2/lambda3)^(j-1))*(exp(-(lambda2-lambda3)*DAT[j+1])-exp(-(lambda2-lambda3)*DAT[j]))/((lambda2-lambda1)*(lambda3-lambda2)));
}
}
}
model {
target += N*log(lambda3) - lambda3*T - log((T^2)/2);
target += log_sum_exp(to_vector(lp3));
lambda1 ~ exponential(580);
lambda2 ~ exponential(580);
lambda3 ~ exponential(580);
}
If needed I will provide the derivation for the calculations, however I’m pretty certain they are correct as I can run the loops in R and the values are reasonable.
Thanks