Stan Ошибка приведения параметра к int

Я пытаюсь провести анализ точек переключения с помощью STAN. У меня есть вектор данных y который имеет две разные последовательности гауссовских случайных величин. Цель состоит в том, чтобы найти последующее распределение того, когда мог произойти сдвиг. я использую RStan запустить его, но ошибка лежит в STAN.

Это код STAN;

data {
  int N;
  vector[N] y;
}
parameters {
  real mu1;
  real sigma1;
  real mu2;
  real sigma2;
  real<lower=0, upper=N> shift;
}
model {
  int i_shift <- round(shift);
  for(n1 in 1:i_shift)
    y[n1] ~ normal(mu1, sigma1);
  for(n2 in i_shift:N)
    y[n2] ~ normal(mu2, sigma2);
}

Парсер (который поставляется с Rstudio) выдает следующую ошибку;

SYNTAX ERROR, MESSAGE(S) FROM PARSER:


ERROR at line 13

 11:    }
 12:    model {
 13:      int i_shift <- round(shift);
                      ^
 14:      for(n1 in 1:i_shift)

PARSER EXPECTED: ";"
Error in stanc(model_code = paste(program, collapse = "\n"), model_name = model_cppname,  : 
  failed to parse Stan model due to the above error.

Почему он не может обработать переменную, которая выполняет приведение? Требуется ли для STAN другой шаблон для такого рода анализа. Я пытался создать целочисленную переменную в parameters но STAN, похоже, не поддерживает случайные целочисленные переменные, только непрерывные.

2 ответа

Решение

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

В настоящее время в программе Stan нет составного объявления и определения (по состоянию на v2.9.0).

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

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