Построение модели переменного пересечения в RStan - сообщение об ошибке

Я пытаюсь построить модель переменного перехвата в RStan, пытаясь предсказать использование женских противозачаточных средств в одном регионе Индии на основе возраста, количества детей и того, живут ли они в городской местности, с перехваты варьируются в зависимости от района.

Ниже мой код:

stan_list <- list(N = nrow(train), contra = (train$contraceptive_use),
                  district = train$district,
                  urban = train$urban,
                  children = train$living.children,
                  age = train$age_mean)
str(stan_list)

code <- '
data {                          
int<lower=0> N;                              // number of observations
int<lower=1, upper=60> district[N];          // number of districts (J = 60)
vector[N] contra;                            // dependent variable
vector[N] urban;                             // independent variable 1
vector[N] children;                          // independent variable 2
vector[N] age;                               // independent variable 3
}

parameters {
vector[60] beta_0;                       // intercept estimated with 60 districts   
real mu_beta_0;                          // mean for intercepts
real sigma_beta_0;                       // standard error for the intercept
real beta_1;
real beta_2;                              
real beta_3;
}

transformed parameters {
vector[N] contra_hat;                        // create one variable with predictions for each observation
for (i in 1:N) {                              // loop for all cases
     contra_hat[i] <- beta_0[district[i]] + beta_1 * urban[i] + beta_2 * children[i] + beta_3 * age[i];
}
}

model {
mu_beta_0 ~ normal(0, 100);
sigma_beta_0 ~ exponential(0.1);
beta_0 ~ normal(mu_beta_0, sigma_beta_0);
beta_1 ~ normal(4, sigma_beta_0);
beta_2 ~ normal(-3, sigma_beta_0);
beta_3 ~ normal(-2, sigma_beta_0);

// Likelihood
contra ~ bernoulli_logit(contra_hat);
}
'

# Translate the model into C++
model1 <- stan(model_code = code, data = stan_list, iter = 2000, chains = 4)

Когда я определяю модель выше, я получаю следующее сообщение об ошибке:

Warning (non-fatal): assignment operator <- deprecated in the Stan language; use = instead.
No matches for: 

  vector ~ bernoulli_logit(vector)

Available argument signatures for bernoulli_logit:

  int ~ bernoulli_logit(real)
  int ~ bernoulli_logit(real[])
  int ~ bernoulli_logit(vector)
  int ~ bernoulli_logit(row vector)
  int[] ~ bernoulli_logit(real)
  int[] ~ bernoulli_logit(real[])
  int[] ~ bernoulli_logit(vector)
  int[] ~ bernoulli_logit(row vector)

require real scalar return type for probability function.
  error in 'model323f123010a7_b7f3052df681e80851694dd14c79969c' at line 36, column 38
  -------------------------------------------------
    34: 
    35: // Likelihood
    36: contra ~ bernoulli_logit(contra_hat);
                                             ^
    37: }
  -------------------------------------------------

Ошибка в stanc (файл = файл, код_модели = код_модели, имя_модели = имя_модели,:

не удалось проанализировать стандартную модель b7f3052df681e80851694dd14c79969c из-за указанной выше ошибки.

Кто-нибудь может помочь, пожалуйста?


person Tommy Shay    schedule 03.03.2018    source источник


Ответы (1)


Результат должен быть объявлен в блоке данных как целочисленный массив, чтобы bernoulli_logit мог его использовать, как в

int<lower=0,upper=1> contra[N];
person Ben Goodrich    schedule 03.03.2018