Como posso modelar uma proporção com BUGS / JAGS / STAN?


10

Estou tentando construir um modelo em que a resposta seja proporcional (na verdade, é a parcela de votos que um partido obtém nos círculos eleitorais). Sua distribuição não é normal, então decidi modelá-la com uma distribuição beta. Eu também tenho vários preditores.

No entanto, não sei como escrevê-lo em BUGS / JAGS / STAN (JAGS seria minha melhor escolha, mas isso realmente não importa). Meu problema é que eu faço uma soma de parâmetros pelos preditores, mas o que posso fazer com isso?

O código seria algo assim (na sintaxe JAGS), mas não sei como "vincular" os parâmetros y_hate y.

for (i in 1:n) {
 y[i] ~ dbeta(alpha, beta)

 y_hat[i] <- a + b * x[i]
}

( y_haté apenas o produto cruzado de parâmetros e preditores, daí a relação determinística. ae bsão os coeficientes que tento estimar, xsendo preditores).

Obrigado por suas sugestões!


O que são a, b, y_hat? Você deve definir claramente seu modelo. A propósito, a sintaxe do BUGS está próxima da sintaxe matemática. Portanto, se você sabe escrever seu modelo em linguagem matemática, quase todo o trabalho está feito.
Stéphane Laurent

Stéphane, obrigado. Editei a pergunta para definir a, b, y_hat. Eu não sei a resposta matematicamente quer, caso contrário, a resposta seria certamente muito mais fácil ;-)
Joël

Suspeito que eu possa desenvolver o fato de que E (y) = alfa / (alfa + beta), mas não consigo descobrir exatamente como exatamente.
Joël

Respostas:


19

μϕμα=μ×ϕβ=(1μ)×ϕμϕ

Possivelmente algo como:

for(i in 1:n) {
  y[i] ~ dbeta(alpha[i], beta[i])
  alpha[i] <- mu[i] * phi
  beta[i]  <- (1-mu[i]) * phi
  logit(mu[i]) <- a + b*x[i]
}
phi ~ dgamma(.1,.1)
a ~ dnorm(0,.001)
b ~ dnorm(0,.001)

Obrigado, isso é muito útil! Estou tentando encaixar um modelo com o seu conselho.
Joël

No entanto, quando executo o modelo, obtenho erros como: "Erro no nó y [6283] Valores pai inválidos". Alguma idéia do que está acontecendo aqui?
Joël

@ Joël, qual é o valor de y [6283]? você certificou-se de que os valores dos alfas e betas sejam restritos aos valores legais? Espero que algo tenha ido para 0 ou abaixo e que dê o erro.
Greg Neve

Não, verifiquei que todos os meus valores y são estritamente superiores a 0 (e inferiores a 1). Talvez meus prévios colidam com os valores empíricos y em algum momento? Mas não sei como verificar isso, e meus anteriores parecem sensatos - pelo menos para mim!
Joël

11
@colin, eu não conheço JAGS tão bem, então isso pode ser melhor solicitado em um fórum especificamente para JAGS. Ou tente em uma ferramenta diferente, acho que gosto de Stan para Bayes hoje em dia.
Greg Neve

18

Greg Snow deu uma ótima resposta. Para completar, aqui está o equivalente na sintaxe Stan. Embora Stan tenha uma distribuição beta que você possa usar, é mais rápido calcular o logaritmo da densidade beta, porque as constantes log(y)e log(1-y)podem ser calculadas uma vez desde o início (e não sempre que y ~ beta(alpha,beta)seria chamado). Ao incrementar a lp__variável reservada (veja abaixo), você pode somar o logaritmo da densidade beta sobre as observações em sua amostra. Eu uso o rótulo "gama" para o vetor de parâmetro no preditor linear.

data {
  int<lower=1> N;
  int<lower=1> K;
  real<lower=0,upper=1> y[N];
  matrix[N,K] X;
}
transformed data {
  real log_y[N];
  real log_1my[N];
  for (i in 1:N) {
    log_y[i] <- log(y[i]);
    log_1my[i] <- log1m(y[i]);
  }
}
parameters {
  vector[K] gamma;
  real<lower=0> phi;
}
model {
  vector[N] Xgamma;
  real mu;
  real alpha_m1;
  real beta_m1;
  Xgamma <- X * gamma;
  for (i in 1:N) {
    mu <- inv_logit(Xgamma[i]);
    alpha_m1 <- mu * phi - 1.0;
    beta_m1 <- (1.0 - mu) * phi - 1.0;
    lp__ <- lp__ - lbeta(alpha,beta) + alpha_m1 * log_y[i] + 
                                        beta_m1 * log_1my[i];
  }
  // optional priors on gamma and phi here
}

Obrigado Ben! Muito útil ter a sintaxe Stan também.
Joël

Stan v2 tem uma "beta_proportion" amostragem declaração que eu acredito que elimina a necessidade de manipular diretamente "lp__"
THK
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.