mimodelo <- glm(y ~ x + prop, data = datos, family = binomial)
y
es 0-1 según dónde use el cliente la tarjeta la próxima vez.x
es una variable predictora adicional (pudieran ser más)prop
es la proporción de uso de la tarjeta en TPV en el pasado(Fuente: Perry, P.O., Fast moment-based estimation for hierarchical models).
Pero \(\theta_i\) tiene incertidumbre que depende
\[\theta_i \sim \text{Beta}(\lambda p_i, \lambda (1-p_i))\]
stanmodelcode <- '
data {
int<lower=1> N;
int x0[N];
int x1[N];
int x2[N];
int total[N];
int tpv[N];
}
parameters {
real<lower = 0, upper = 1> theta[N];
real a0;
real b1;
real b2;
}
model {
real a[N];
real b[N];
real p[N];
for (i in 1:N){
p[i] <- inv_logit(a0 + b1 * x1[i] + b2 * x2[i]);
a[i] <- 0.25 + 3 * p[i];
b[i] <- 0.25 + 3 * (1-p[i]);
}
theta ~ beta(a, b);
tpv ~ binomial(total, theta);
}
'
fit <- stan(model_code = stanmodelcode,
data = list(N = nrow(mis.datos), x0 = mis.datos$x == "a",
x1 = mis.datos$x == "b", x2 = mis.datos$x == "c",
total = mis.datos$n.usos, tpv = mis.datos$n.tpv),
iter=12000, warmup=2000,
chains=4, thin=10)
Con la aproximación bayesiana hemos combinado dos modelos en uno:
Es posible construirlos por separado y juntarlos de una manera más o menos limpia