# power law
scalingCode <- nimbleCode({
# monument scaling params
intercept0 ~ dnorm(mean = 0, sd = 5)
sd0 ~ dexp(rate = 0.5)
scaling0 ~ dnorm(mean = 0, sd = 5)
sd1 ~ dexp(rate = 0.5)
for(k in 1:K){
intercept_raw[k] ~ dnorm(0, 1)
intercept[k] <- intercept0 + intercept_raw[k] * sd0
scaling_raw[k] ~ dnorm(0, 1)
scaling[k] <- scaling0 + scaling_raw[k] * sd1
}
# prior for negbinom size parameter (dispersion)
size ~ dexp(rate = 0.5)
# population--area linking params
b0 ~ dnorm(mean = 0, sd = 10)
b1 ~ dnorm(mean = 0, sd = 10)
sigma_pop ~ dexp(rate = 1)
# main model
for(n in 1:N){
pop_mu[n] <- b0 + b1 * x[n] # pop_mu, x are on log scale
pop[n] ~ dnorm(mean = pop_mu[n], sd = sigma_pop) # pop is on log scale
log_mu[n] <- intercept[v[n]] + scaling[v[n]] * pop[n] # log_mu, is on
# log scale
mu[n] <- exp(log_mu[n]) # mu is now on original, non-log scale
p[n] <- size / (size + mu[n])
y[n] ~ dnegbin(prob = p[n], size = size) # original scale for count data,
# but power-law model for mean
y_hat[n] <- (size * (1 - p[n])) / p[n]
}
})
# linear-log
scalingCode_linear_log <- nimbleCode({
# monument scaling params
intercept0 ~ dnorm(mean = 0, sd = 5)
sd0 ~ dexp(rate = 0.5)
scaling0 ~ dnorm(mean = 0, sd = 5)
sd1 ~ dexp(rate = 0.5)
for(k in 1:K){
intercept_raw[k] ~ dnorm(0, 1)
intercept[k] <- intercept0 + intercept_raw[k] * sd0
scaling_raw[k] ~ dnorm(0, 1)
scaling[k] <- scaling0 + scaling_raw[k] * sd1
}
# prior for negbinom size parameter (dispersion)
size ~ dexp(rate = 0.5)
# population--area linking params
b0 ~ dnorm(mean = 0, sd = 10)
b1 ~ dnorm(mean = 0, sd = 10)
sigma_pop ~ dexp(rate = 1)
# main model
for(n in 1:N){
pop_mu[n] <- b0 + b1 * x[n] # pop_mu, x are on log scale
pop[n] ~ dnorm(mean = pop_mu[n], sd = sigma_pop) # pop is on log scale
mu[n] <- intercept[v[n]] + scaling[v[n]] * pop[n] # mu is log scale
p[n] <- size / (size + mu[n])
y[n] ~ dnegbin(prob = p[n], size = size) # original scale for count data,
# but linear-log model for mean
# (b\c mu is still on log-scale)
y_hat[n] <- (size * (1 - p[n])) / p[n]
}
})