1 Set-up
suppressPackageStartupMessages({
library(bage)
library(poputils)
library(ggplot2)
library(dplyr)
})
#> Error in get(paste0(generic, ".", class), envir = get_method_env()) :
#> object 'type_sum.accel' not found
plot_exch <- function(draws) {
ggplot(draws, aes(x = element, y = value)) +
facet_wrap(vars(draw), nrow = 1) +
geom_hline(yintercept = 0, col = "grey") +
geom_point(col = "darkblue", size = 0.7) +
scale_x_continuous(n.breaks = max(draws$element)) +
xlab("Unit") +
ylab("") +
theme(text = element_text(size = 8))
}
plot_cor_one <- function(draws) {
ggplot(draws, aes(x = along, y = value)) +
facet_wrap(vars(draw), nrow = 1) +
geom_hline(yintercept = 0, col = "grey") +
geom_line(col = "darkblue") +
xlab("Unit") +
ylab("") +
theme(text = element_text(size = 8))
}
plot_cor_many <- function(draws) {
ggplot(draws, aes(x = along, y = value)) +
facet_grid(vars(by), vars(draw)) +
geom_hline(yintercept = 0, col = "grey") +
geom_line(col = "darkblue") +
xlab("Unit") +
ylab("") +
theme(text = element_text(size = 8))
}
plot_svd_one <- function(draws) {
ggplot(draws, aes(x = age_mid(age), y = value, color = sexgender)) +
facet_wrap(vars(draw), nrow = 1) +
geom_line() +
scale_color_manual(values = c("darkgreen", "darkorange")) +
xlab("Age") +
ylab("") +
theme(text = element_text(size = 8),
legend.position = "top",
legend.title = element_blank())
}
plot_svd_many <- function(draws) {
draws |>
mutate(element = paste("Unit", element)) |>
ggplot(aes(x = age_mid(age), y = value, color = sexgender)) +
facet_grid(vars(element), vars(draw)) +
geom_line() +
scale_color_manual(values = c("darkgreen", "darkorange")) +
xlab("Age") +
ylab("") +
theme(text = element_text(size = 8),
legend.position = "top",
legend.title = element_blank())
}
2 Exchangeable Units
3 Units Correlated With Neighbours
3.1 Random Walk RW()
3.2 Second-Order Random Walk RW2()
3.2.1 Model
\[\begin{align} \beta_1 & \sim \text{N}(0, \mathtt{sd}^2) \\ \beta_2 & \sim \text{N}(\beta_1, \mathtt{sd\_slope}^2) \\ \beta_j & \sim \text{N}(2\beta_{j-1} - \beta_{j-2}, \tau^2), \quad j = 3, \cdots, J \\ \tau & \sim \text{N}^+(0, \mathtt{s}^2) \end{align}\]
3.3 Autoregressive AR()
3.3.1 Model
\[\begin{equation} \beta_j \sim \text{N}\left(\phi_1 \beta_{j-1} + \cdots + \phi_{\mathtt{n\_coef}} \beta_{j-\mathtt{n\_coef}}, \omega^2\right) \end{equation}\] TMB derives a value of \(\omega\) that gives each \(\beta_j\) variance \(\tau^2\). The prior for \(\tau\) is \[\begin{equation} \tau \sim \text{N}^+(0, \mathtt{s}^2). \end{equation}\] The prior for each \(\phi_k\) is \[\begin{equation} \frac{\phi_k + 1}{2} \sim \text{Beta}(\mathtt{shape1}, \mathtt{shape2}). \end{equation}\]
3.4 First-Order Autoregressive AR1()
3.4.1 Model
\[\begin{equation} \beta_j \sim \text{N}\left(\phi \beta_{j-1}, \omega^2\right) \end{equation}\] TMB derives a value of \(\omega\) that gives each \(\beta_j\) variance \(\tau^2\). The prior for \(\tau\) is \[\begin{equation} \tau \sim \text{N}^+(0, \mathtt{s}^2). \end{equation}\] The prior for \(\phi\) is \[\begin{equation} \frac{\phi - \mathtt{min}}{\mathtt{max} - \mathtt{min}} \sim \text{Beta}(\mathtt{shape1}, \mathtt{shape2}). \end{equation}\]
3.5 Random Walk with Seasonal Effects RW_Seas()
3.5.1 Model
\[\begin{align} \beta_j & = \alpha_j + \lambda_j \\ \alpha_1 & \sim \text{N}(0, \mathtt{sd}^2) \\ \alpha_j & \sim \text{N}(\alpha_{j-1}, \tau^2), \quad j = 2, \cdots, J \\ \tau & \sim \text{N}^+\left(0, \mathtt{s}^2\right) \\ \lambda_j & \sim \text{N}(0, \mathtt{sd\_seas}^2), \quad j = 1, \cdots, \mathtt{n\_seas} - 1 \\ \lambda_j & = -\sum_{s=1}^{j-1} \lambda_{j-s}, \quad j = \mathtt{n\_seas},\; 2 \mathtt{n\_seas}, \cdots \\ \lambda_j & \sim \text{N}(\lambda_{j-\mathtt{n\_seas}}, \omega^2), \quad \text{otherwise} \\ \omega & \sim \text{N}^+\left(0, \mathtt{s\_seas}^2\right) \end{align}\]
3.6 Second-Order Random Walk with Seasonal Effects RW2_Seas()
3.6.1 Model
\[\begin{align} \beta_j & = \alpha_j + \lambda_j \\ \alpha_1 & \sim \text{N}(0, \mathtt{sd}^2) \\ \alpha_2 & \sim \text{N}(\alpha_1, \mathtt{sd\_slope}^2) \\ \alpha_j & \sim \text{N}(2\alpha_{j-1} - \alpha_{j-2}, \tau^2), \quad j = 3, \cdots, J \\ \tau & \sim \text{N}^+\left(0, \mathtt{s}^2\right) \\ \lambda_j & \sim \text{N}(0, \mathtt{sd\_seas}^2), \quad j = 1, \cdots, \mathtt{n\_seas} - 1 \\ \lambda_j & = -\sum_{s=1}^{j-1} \lambda_{j-s}, \quad j = \mathtt{n\_seas},\; 2 \mathtt{n\_seas}, \cdots \\ \lambda_j & \sim \text{N}(\lambda_{j-\mathtt{n\_seas}}, \omega^2), \quad \text{otherwise} \\ \omega & \sim \text{N}^+\left(0, \mathtt{s\_seas}^2\right) \end{align}\]
3.7 Linear Lin()
3.7.1 Model
\[\begin{align} \beta_j & = \alpha_j + \epsilon_j \\ \alpha_j & = \left(j - \frac{J + 1}{2}\right) \eta \\ \eta & \sim \text{N}\left(\mathtt{mean\_slope}, \mathtt{sd\_slope}^2 \right) \\ \epsilon & \sim \text{N}(0, \tau^2) \\ \tau & \sim \text{N}^+\left(0, \mathtt{s}^2\right) \end{align}\]
3.8 Linear with AR Errors Lin_AR()
3.8.1 Model
\[\begin{align} \beta_j & = \alpha_j + \epsilon_j \\ \alpha_j & = \left(j - \frac{J + 1}{2}\right) \eta \\ \eta & \sim \text{N}\left(\mathtt{mean\_slope}, \mathtt{sd\_slope}^2 \right) \\ \epsilon_j & \sim \text{N}\left(\phi_1 \epsilon_{j-1} + \cdots + \phi_{\mathtt{n\_coef}} \epsilon_{j-\mathtt{n\_coef}}, \omega^2\right) \tau & \sim \text{N}^+\left(0, \mathtt{s}^2\right) \\ \frac{\phi_k + 1}{2} & \sim \text{Beta}(\mathtt{shape1}, \mathtt{shape2}) \end{align}\]
3.9 Linear with AR1 Errors Lin_AR1()
3.9.1 Model
\[\begin{align} \beta_j & = \alpha_j + \epsilon_j \\ \alpha_j & = \left(j - \frac{J + 1}{2}\right) \eta \\ \eta & \sim \text{N}\left(\mathtt{mean\_slope}, \mathtt{sd\_slope}^2 \right) \\ \epsilon_j & \sim \text{N}\left(\phi \epsilon_{j-1}, \omega^2\right) \tau & \sim \text{N}^+\left(0, \mathtt{s}^2\right) \\ \frac{\phi - \mathtt{min}}{\mathtt{max} - \mathtt{min}} \sim \text{Beta}(\mathtt{shape1}, \mathtt{shape2}) \end{align}\]
3.10 Penalised Spline Sp()
3.10.1 Model
\[\begin{align} \pmb{\beta} & = \bm{X} \pmb{\alpha} \\ \alpha_1 & \sim \text{N}(0, \mathtt{sd}^2) \\ \alpha_2 & \sim \text{N}(\alpha_1, \mathtt{sd\_slope}^2) \\ \alpha_j & \sim \text{N}(2\alpha_{j-1} - \alpha_{j-2}, \tau^2), \quad j = 3, \cdots, J \\ \tau & \sim \text{N}^+\left(0, \mathtt{s}^2\right) \\ \end{align}\]
4 SVD-Based Priors
4.1 Exchangeable SVD()
4.2 Dynamic SVD Prior: SVD_AR()
SVD_AR(HMD, indep = FALSE, s = 0.1) |>
generate(n_draw = 6, n_along = 5) |>
ggplot(aes(x = age_mid(age),
y = value,
color = sexgender)) +
facet_grid(vars(draw), vars(along)) +
geom_line() +
scale_color_manual(values = c("darkgreen", "darkorange")) +
xlab("Age") +
ylab("") +
theme(text = element_text(size = 8),
legend.position = "top",
legend.title = element_blank())