Hello there!
I’m trying to reproduce/translate the following Winbugs code from this [paper](// from Inverse Gaussian process models for degradation analysis: A Bayesian perspective - ScienceDirect), tbh really far from being a success,
Could anyone advise on any inconsistency you might spot?
Attached data and original winbugs model
data_stan.Rdata (915 Bytes)
// Adaptation from
// from https://www.sciencedirect.com/science/article/pii/S0951832014001276
//
functions {
// attempt to code inverse gaussian from http://paul-buerkner.github.io/brms/articles/brms_families.html
real IG_lpdf(real y, real alpha, real beta ){
real prob;
prob = pow( (alpha / 2*pi()*(pow(y,3))), 0.5) * exp( - alpha * pow( (y - beta ), 2) / (2* pow(beta,2)*y));
return prob;
}
}
data{
int<lower=1> nUnits;
int<lower=1> nTime;
matrix[nUnits, nTime] t;
matrix[nUnits, nTime] Y;
}
transformed data{
matrix[nUnits, nTime] deltaY;
for (i in 1:nUnits){
for (j in 2:nTime){
deltaY[i,j] = Y[i,j] - Y[i,j-1]; // diff
}
}
}
parameters{
real<lower=0> lambda; //
real<lower=0> q;
real<lower=0> mu_b;
real<lower=0> mu_a;
real<lower=0> mu_raw;
}
transformed parameters{
real<lower=0> mu[nUnits];
matrix[nUnits, nTime] deltaLambda;
real<lower=0> a;
real<lower=0> b;
//
//
for (i in 1:nUnits){
mu[i] = mu_a + mu_b*mu_raw;
for (j in 2:nTime){
deltaLambda[i,j] = pow(t[i,j],q) - pow(t[i,j-1],q);
a = mu[i] * deltaLambda[i,j];
b = pow(mu[i],3) *pow(deltaLambda[i,j],2) / lambda ;
}
}
}
model{
mu_b ~ normal(0,50);
mu_a ~ normal(0,50);
lambda ~ gamma(4.5, 0.1);
q ~ normal(0,10);
mu_raw ~ std_normal();
for (i in 1:nUnits){
for (j in 2:nTime){
deltaY[i,j] ~ IG(a, b);
}
}
}