prophet_linear_growth.stan 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. data {
  2. int T; // Sample size
  3. int<lower=1> K; // Number of seasonal vectors
  4. vector[T] t; // Day
  5. vector[T] y; // Time-series
  6. int S; // Number of changepoints
  7. matrix[T, S] A; // Split indicators
  8. real t_change[S]; // Index of changepoints
  9. matrix[T,K] X; // 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. vector[S] delta; // Rate adjustments
  17. real<lower=0> sigma_obs; // Observation noise (incl. seasonal variation)
  18. vector[K] beta; // seasonal vector
  19. }
  20. transformed parameters {
  21. vector[S] gamma; // adjusted offsets, for piecewise continuity
  22. for (i in 1:S) {
  23. gamma[i] = -t_change[i] * delta[i];
  24. }
  25. }
  26. model {
  27. //priors
  28. k ~ normal(0, 5);
  29. m ~ normal(0, 5);
  30. delta ~ double_exponential(0, tau);
  31. sigma_obs ~ normal(0, 0.5);
  32. beta ~ normal(0, sigmas);
  33. // Likelihood
  34. y ~ normal((k + A * delta) .* t + (m + A * gamma) + X * beta, sigma_obs);
  35. }