Skip to content

Commit efbb8a2

Browse files
committed
partial work on the Raftery model
1 parent d34371b commit efbb8a2

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

code/Raftery_1988.r

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
library(cmdstanr)
2+
library(rstan)
3+
stanfit <- function(fit) rstan::read_stan_csv(fit$output_files())
4+
5+
6+
impala <- c(15, 20, 21, 23, 26)
7+
waterbuck <- c(53, 57, 66, 67, 72)
8+
9+
stan.data <- list(x = impala, n = length(impala), kappa_1 = 1, kappa_2 = 1)
10+
11+
raftery <- cmdstanr::cmdstan_model("stan/raftery.stan")
12+
13+
fit <- stanfit(raftery$sample(data = stan.data,
14+
max_treedepth = 15,
15+
adapt_delta = .99,
16+
parallel_chains = 4))
17+
18+
fit

code/stan/raftery.stan

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
data{
2+
int<lower=1> n;
3+
real<lower=0> x[n];
4+
real<lower=0> kappa_1;
5+
real<lower=0> kappa_2;
6+
}
7+
transformed data{
8+
real S = sum(x);
9+
}
10+
parameters{
11+
real<lower=max(x)> N;
12+
real<lower=0, upper=1> theta;
13+
}
14+
transformed parameters{
15+
real lPbar = 0.0;
16+
for(j in 1:n) lPbar += lchoose(N, x[j]);
17+
}
18+
model{
19+
target += -lgamma(N + 1) + lgamma(N + kappa_1) + lPbar;
20+
target += (-N + S)*log(theta) + (n*N -S)*log1m(theta)
21+
-(N + kappa_1)*log(1/theta + kappa_2);
22+
}

code/stan/raftery_wrong.stan

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
functions{
2+
real bin_lpdf(real x, real n, real p){
3+
real ans = lchoose(n, x) + x*log(p) + (n-x)*log1m(p);
4+
return(ans);
5+
}
6+
real pois_lpdf(real z, real mu){
7+
real ans = -mu + z*log(mu) - lgamma(z + 1);
8+
return(ans);
9+
}
10+
}
11+
data{
12+
int<lower=1> n;
13+
real<lower=0> x[n];
14+
real<lower=0> kappa_1;
15+
real<lower=0> kappa_2;
16+
}
17+
parameters{
18+
real<lower=max(x)> N;
19+
real<lower=0, upper=1> theta;
20+
real<lower=0> mu;
21+
}
22+
model{
23+
for(j in 1:n) target += bin_lpdf(x[j] | N, theta);
24+
target += pois_lpdf(N | mu);
25+
}

0 commit comments

Comments
 (0)