prophet_linear_growth.stan 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. data {
  2. int T; // Sample size
  3. int<lower=1> K; // Number of seasonal vectors
  4. real t[T]; // Day
  5. real y[T]; // Time-series
  6. int S; // Number of changepoints
  7. real A[T, S]; // Split indicators
  8. real t_change[S]; // Index of changepoints
  9. real X[T,K]; // season vectors
  10. vector[K] sigmas; // scale on seasonality prior
  11. real<lower=0> tau; // scale on changepoints prior
  12. }
  13. parameters {
  14. real k; // Base growth rate
  15. real m; // offset
  16. real delta[S]; // Rate adjustments
  17. real<lower=0> sigma_obs; // Observation noise (incl. seasonal variation)
  18. real beta[K]; // seasonal vector
  19. }
  20. transformed parameters {
  21. real gamma[S]; // adjusted offsets, for piecewise continuity
  22. for (i in 1:S) {
  23. gamma[i] = -t_change[i] * delta[i];
  24. }
  25. }
  26. model {
  27. real Y[T];
  28. //priors
  29. k ~ normal(0, 5);
  30. m ~ normal(0, 5);
  31. delta ~ double_exponential(0, tau);
  32. sigma_obs ~ normal(0, 0.5);
  33. beta ~ normal(0, sigmas);
  34. // Likelihood
  35. for (i in 1:T) {
  36. Y[i] = (dot_product(A[i], delta) + k) * t[i] + (dot_product(A[i], gamma) + m) + dot_product(X[i], beta);
  37. }
  38. y ~ normal(Y, sigma_obs);
  39. }