STAN - получение разных результатов при использовании оператора выборки и прямого увеличения вероятности записи

Я пытаюсь реализовать модель в stan, напрямую увеличивая вероятность регистрации, используя функциональность 'target += bernoulli_logit_lmpf(y|alpha)'. Полная модель ниже:

data {
  int<lower=0> Ntotal;
  int y[Ntotal];
  int<lower=0> Nsubj;
  int<lower=0> s[Ntotal];
  int<lower=0> Nstages;
  int<lower=0> Nstates;
  vector[Nstages*Nstates] log_ts;
  vector[Nstages*Nstates] log_ds;
  int<lower=0> a_i[Ntotal];
  int<lower=0> b_i[Ntotal];
}  

parameters {
  real log_w1;
  real log_w3;
  real delta;
  real delta_p;
  real tau_p;
}

transformed parameters {
  vector[Nstates*Nstages] gradient;
  gradient =  exp(log_ds*delta_p + log_ts*tau_p + log_w3) + exp(log_ds*delta + 
  log_w1);
}

model {
  log_w1 ~ normal(0,5);
  log_w3 ~ normal(0,5);
  delta ~ normal(0,2);
  delta_p ~ normal(0,2);
  tau_p ~ normal(0,2);

 for(n in 1:Ntotal){
    target += bernoulli_logit_lpmf(y[n] | (gradient[a_i[n]] - 
    gradient[b_i[n]]) );
  }
}

Насколько я понимаю, это должно привести к тем же результатам, что и приведенное ниже утверждение выборки:

model {
  log_w1 ~ normal(0,5);
  log_w3 ~ normal(0,5);
  delta ~ normal(0,2);
  delta_p ~ normal(0,2);
  tau_p ~ normal(0,2);

  y ~ bernoulli_logit(gradient[a_i] - gradient[b_i]);
}

Однако две модели дают совершенно разные результаты (даже с одним и тем же начальным числом в R и Stan). Я подумал, что проблема могла заключаться в том, как я реализовал прямое приращение, поэтому я попробовал и следующую модель.

model {
  real lps[Ntotal];
  log_w1 ~ normal(0,5);
  log_w3 ~ normal(0,5);
  delta ~ normal(0,2);
  delta_p ~ normal(0,2);
  tau_p ~ normal(0,2);

  for(n in 1:Ntotal){
    lps[n] = bernoulli_logit_lpmf(y[n] | (gradient[a_i[n]] - gradient[b_i[n]]));
  }
  target += log_sum_exp(lps);
}

Тем не менее, все три модели дают разные результаты. Интересно, что прямое приращение выполняется примерно в два раза быстрее, чем оператор выборки, но, похоже, не дает правильных результатов. Мне нужно использовать метод прямого приращения, потому что я в конечном итоге преобразую эту модель в смешанную модель, и, насколько я знаю, смешанные модели нуждаются в непосредственном обновлении логарифмической вероятности. Любая помощь с этим будет высоко ценится!

С уважением, Тим

0 ответов

Другие вопросы по тегам