Claude Code Plugins

Community-maintained marketplace

Feedback

time-series-models

@choxos/BayesianAgent
0
0

Bayesian time series models including AR, MA, ARMA, state-space models, and dynamic linear models in Stan and JAGS.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name time-series-models
description Bayesian time series models including AR, MA, ARMA, state-space models, and dynamic linear models in Stan and JAGS.

Time Series Models

AR(1) Model

Stan

data {
  int<lower=0> T;
  vector[T] y;
}
parameters {
  real mu;
  real<lower=-1, upper=1> phi;  // Stationarity
  real<lower=0> sigma;
}
model {
  mu ~ normal(0, 10);
  phi ~ uniform(-1, 1);
  sigma ~ exponential(1);

  // Stationary initial distribution
  y[1] ~ normal(mu, sigma / sqrt(1 - phi^2));

  // AR(1) likelihood
  for (t in 2:T)
    y[t] ~ normal(mu + phi * (y[t-1] - mu), sigma);
}

Vectorized Stan (Efficient)

model {
  y[1] ~ normal(mu, sigma / sqrt(1 - square(phi)));
  y[2:T] ~ normal(mu + phi * (y[1:(T-1)] - mu), sigma);
}

JAGS

model {
  y[1] ~ dnorm(mu, tau / (1 - phi * phi))
  for (t in 2:T) {
    y[t] ~ dnorm(mu + phi * (y[t-1] - mu), tau)
  }
  mu ~ dnorm(0, 0.001)
  phi ~ dunif(-1, 1)
  tau ~ dgamma(0.001, 0.001)
  sigma <- 1/sqrt(tau)
}

AR(p) Model

Stan

data {
  int<lower=0> T;
  int<lower=1> P;  // AR order
  vector[T] y;
}
parameters {
  real mu;
  vector[P] phi;
  real<lower=0> sigma;
}
model {
  mu ~ normal(0, 10);
  phi ~ normal(0, 0.5);
  sigma ~ exponential(1);

  for (t in (P+1):T) {
    real pred = mu;
    for (p in 1:P)
      pred += phi[p] * (y[t-p] - mu);
    y[t] ~ normal(pred, sigma);
  }
}

Local Level (Random Walk + Noise)

Stan

data {
  int<lower=0> T;
  vector[T] y;
}
parameters {
  vector[T] mu;           // Latent state
  real<lower=0> sigma_y;  // Observation noise
  real<lower=0> sigma_mu; // State noise
}
model {
  sigma_y ~ exponential(1);
  sigma_mu ~ exponential(1);

  // State evolution (random walk)
  mu[1] ~ normal(y[1], sigma_y);
  mu[2:T] ~ normal(mu[1:(T-1)], sigma_mu);

  // Observations
  y ~ normal(mu, sigma_y);
}

Local Linear Trend

Stan

parameters {
  vector[T] mu;           // Level
  vector[T] delta;        // Trend
  real<lower=0> sigma_y;
  real<lower=0> sigma_mu;
  real<lower=0> sigma_delta;
}
model {
  // Level evolution
  mu[2:T] ~ normal(mu[1:(T-1)] + delta[1:(T-1)], sigma_mu);

  // Trend evolution
  delta[2:T] ~ normal(delta[1:(T-1)], sigma_delta);

  // Observations
  y ~ normal(mu, sigma_y);
}

Seasonal Model

Stan (Additive Seasonality)

data {
  int<lower=0> T;
  int<lower=2> S;  // Season length (e.g., 12 for monthly)
  vector[T] y;
}
parameters {
  vector[T] mu;
  vector[S-1] gamma_init;  // Initial seasonal effects
  real<lower=0> sigma_y;
  real<lower=0> sigma_mu;
  real<lower=0> sigma_gamma;
}
transformed parameters {
  vector[T] gamma;
  // Sum-to-zero constraint
  for (t in 1:(S-1))
    gamma[t] = gamma_init[t];
  gamma[S] = -sum(gamma_init);
  for (t in (S+1):T)
    gamma[t] = -sum(gamma[(t-S+1):(t-1)]) + normal_rng(0, sigma_gamma);
}
model {
  y ~ normal(mu + gamma, sigma_y);
}

GARCH(1,1) (Volatility Clustering)

Stan

parameters {
  real mu;
  real<lower=0> alpha0;
  real<lower=0, upper=1> alpha1;
  real<lower=0, upper=1-alpha1> beta1;
}
transformed parameters {
  vector<lower=0>[T] sigma2;
  sigma2[1] = alpha0 / (1 - alpha1 - beta1);
  for (t in 2:T)
    sigma2[t] = alpha0 + alpha1 * square(y[t-1] - mu) + beta1 * sigma2[t-1];
}
model {
  y ~ normal(mu, sqrt(sigma2));
}

Diagnostics

  • Check stationarity constraints (|phi| < 1 for AR)
  • Examine residual autocorrelation (ACF/PACF)
  • One-step-ahead predictions for model comparison
  • Use generated quantities for forecasting