Hello,
I am running a meta-analysis model of mark-release-recapture experiments. I am encountering an issue where the estimates of my parameters from the individual experiments are often skewed away from the centre of my population level estimates.
As an example here is the output from my model applied to data I simulated for 3 experiments,
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
kappa[1] 1.16 0.09 0.96 0.32 0.49 0.81 1.47 3.70 126 1.05
kappa[2] 2.73 0.11 1.48 0.84 1.74 2.41 3.44 6.33 183 1.01
kappa[3] 1.79 0.06 0.95 0.61 1.08 1.60 2.23 4.06 219 1.02
a 0.14 0.00 0.04 0.06 0.11 0.14 0.16 0.21 165 1.02
p 0.79 0.02 0.39 0.26 0.52 0.73 0.99 1.82 276 1.02
r 20.66 0.19 3.33 14.66 18.41 20.33 22.44 28.11 307 1.00
cDecay[1] 0.15 0.01 0.06 0.02 0.11 0.15 0.18 0.28 119 1.05
cDecay[2] 0.16 0.00 0.05 0.06 0.12 0.15 0.19 0.28 259 1.02
cDecay[3] 0.17 0.00 0.06 0.07 0.13 0.16 0.20 0.29 282 1.00
psi[1] 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 142 1.02
psi[2] 0.03 0.00 0.01 0.01 0.02 0.03 0.03 0.05 274 1.01
psi[3] 0.08 0.00 0.03 0.04 0.06 0.07 0.10 0.14 297 1.00
sigma 0.05 0.00 0.02 0.01 0.03 0.05 0.06 0.09 182 1.02
overallKappa 1.56 0.09 1.74 0.03 0.37 0.94 2.09 6.23 350 1.01
overallcDecay 0.14 0.00 0.06 0.03 0.10 0.14 0.18 0.27 238 1.00
lifeExpectancy[1] 21.05 12.17 118.60 3.62 5.42 6.85 9.38 47.58 95 1.04
lifeExpectancy[2] 7.36 0.26 3.85 3.57 5.28 6.63 8.30 15.81 214 1.02
lifeExpectancy[3] 7.01 0.25 3.78 3.47 4.92 6.22 7.88 14.27 234 1.00
overallPsi 0.05 0.00 0.05 0.00 0.01 0.03 0.07 0.16 400 0.99
overallLifeExpectancy 334.86 320.04 6400.89 3.73 5.63 7.02 9.80 33.28 400 1.00
lp__ 3119.85 0.30 3.02 3112.94 3118.16 3120.19 3122.05 3124.71 99 1.05
and in particular we see that the overall estimates of the parameter 'cDecay' are skewed slightly away from the average effect -- given by 'overallcDecay'.
Whilst the above isn't a particularly strong effect, in my actual data I sometimes see a really big difference. The magnitude of this difference does decrease a bit as I increase the # of simulated experiments in the meta-analysis, although doesn't disappear entirely; in one of my experimental 'batches' I have 20 experiments and the population-level estimates still differ from the bulk of the study-level estimates!
Does anyone have an idea as to why I am seeing the difference between the study-level estimates and the population-level ones?
My model is below. I assume that there is a constant death rate of the organisms, and hence use an exponential survival function. I would have liked to move to a non-centered model, but since most of my parameters are non-negative I couldn't think of a way to do this that worked well (I tried doing the Matt-Trick on lognormal -- rather than normal -- priors, but this didn't work as well as the below.)
data {
int<lower=0> N; ## Total number of observations
int<lower=0> K; ## Total number of groups
int Y[N]; ## Vector of observations for the release
int S[K]; ## Array of ints for the group sizes
vector[N] t; ## Vector of time observations (days)
int Pos[K]; ## Array of the starting position of each dataset
vector[K] RelNumber; ## Vector of the numbers released across each study
}
parameters {
real<lower=0> kappa[K];
real<lower=0> a;
real<lower=0> p;
real<lower=0> r;
real<lower=0> cDecay[K]; ## mortality hazard
real<lower=0,upper=1> psi[K]; ## prob of recapture on a given day
real<lower=0> sigma;
}
model {
for (i in 1:K) {
real lambda[S[i]];
real numberCaught;
numberCaught = 0;
for (j in 1:S[i]){
lambda[j]= psi[i]*(RelNumber[i]-numberCaught)*exp(-cDecay[i]*(t[Pos[i] + j - 1]));
Y[Pos[i] + j - 1] ~ neg_binomial_2(lambda[j]+1e-5,kappa[i]);
numberCaught = numberCaught + Y[Pos[i] + j - 1];
}
}
for (i in 1:K) {
cDecay[i] ~ normal(a,sigma);
kappa[i] ~ exponential(p);
psi[i] ~ exponential(r);
}
a ~ normal(0.09,0.045);
sigma ~ exponential(20);
p ~ lognormal(1,1);
r ~ gamma(40,2);
}
generated quantities {
real overallKappa;
real overallcDecay;
real lifeExpectancy[K];
real overallPsi;
real overallLifeExpectancy;
for(i in 1:K){
lifeExpectancy[i] = 1/cDecay[i];
}
overallcDecay = normal_rng(a,sigma);
while(overallcDecay<0) overallcDecay = normal_rng(a,sigma);
overallKappa = exponential_rng(p);
overallPsi = exponential_rng(r);
overallLifeExpectancy = 1/overallcDecay;
}