сообщения об ошибках

Я новичок в WinBUGS/OpenBUGS и испытываю трудности с отладкой своего кода.

Кто-нибудь знает список потенциальных сообщений об ошибках для моделей BUGS и их значения на простом английском языке?


person user3343467    schedule 23.02.2014    source источник


Ответы (2)


В руководстве есть список некоторых распространенных ошибок. Я добавил несколько дополнительных замечаний из собственного опыта:

  • ожидаемое имя переменной указывает на неподходящее имя переменной. Иногда я получаю эту ошибку при предоставлении данных, возможно, я использовал 1.02e04 вместо 1.02E04.

  • неопределенная переменная — переменные в файле данных должны быть определены в модели (просто поместите их как константы или с нечеткими априорными значениями). Если логический узел сообщается как неопределенный, проблема может быть связана с узлом на «правой стороне». Иногда я получаю эту ошибку, когда удаляю переменную из модели, но не из данных, или пропустил запятую в данных.

  • просканирован недействительный или неожиданный токен – проверьте, заполнено ли поле значения логического узла в Doodle.

  • index out of range — обычно указывает, что циклический индекс выходит за пределы размера вектора (или размера матрицы); иногда, однако, появляется, если # был опущен в начале строки комментария

  • Слишком большой линейный предиктор в пробит-регрессии указывает на числовое переполнение. Ниже приведены возможные решения для ловушки «неопределенный реальный результат».

  • слишком сложное логическое выражение — логический узел определяется в терминах слишком большого количества параметров/констант или слишком большого количества операторов: попробуйте ввести дополнительные логические узлы для представления частей общего вычисления; например, a1 + a2 + a3 + b1 + b2 + b3 можно записать как A + B, где A и B — более простые логические выражения a1 + a2 + a3 и b1 + b2 + b3 соответственно. Обратите внимание, что линейные предикторы со многими терминами должны быть сформулированы путем «векторизации» параметров и ковариат, а затем с использованием функции inprod(.,.)

  • невозможно выбрать метод обновления означает, что ограничение в программе было нарушено

Вы также можете попасть в ловушку в начале или во время MCMC. В руководстве BUGS перечислены следующие распространенные ловушки (я всегда получаю первые две, никогда не встречал последние две):

  • неопределенный реальный результат указывает на числовое переполнение. Возможные причины включают в себя:

    • initial values generated from a 'vague' prior distribution may be numerically extreme - specify appropriate initial values;
    • численно невозможные значения, такие как log неположительного числа - проверьте, например, что при моделировании Пуассона не было задано нулевых ожиданий;
    • численные трудности при отборе проб. Возможные решения включают в себя:
    • лучшие начальные значения;
    • более информативные априорные значения - унифицированные априорные значения все еще могут использоваться, но их диапазон ограничен правдоподобными значениями;
    • лучшая параметризация для улучшения ортогональности;
    • стандартизация ковариат, чтобы иметь среднее значение 0 и стандартное отклонение 1.
    • может произойти, если все начальные значения равны. Пробит-модели особенно восприимчивы к этой проблеме, т.е. генерируют неопределенные реальные результаты. Если пробит является стохастическим узлом, это может помочь установить разумные границы его распределения, например.

        probit(p[i]) <- delta[i]
        delta[i] ~ dnorm(mu[i], tau)I(-5, 5)
      

      Из этой ловушки иногда можно выбраться, просто нажав кнопку обновления. Эквивалентная конструкция

        p[i] <- phi(delta[i])
      

      может быть более снисходительным.

  • Возможные причины индексного массива вне допустимого диапазона:

    • attempting to assign values beyond the declared length of an array;
    • если логическое выражение слишком длинное для оценки, разбейте его на более мелкие компоненты.
  • переполнение стека может произойти, если существует рекурсивное определение логического узла.

  • Разыменование NIL (чтение) может происходить при компиляции в некоторых случаях, когда выполняется недопустимое преобразование, например массив в скаляр.

  • Сообщения-ловушки, относящиеся к DFreeARS, указывают на численные проблемы с алгоритмом адаптивного отклонения без производных, используемым для логарифмически вогнутых распределений. Одна из возможностей - перейти на выборку «Срез».

person guyabel    schedule 25.02.2014

Это Руководство пользователя WinBUGS может оказаться полезным.

person Rich Scriven    schedule 23.02.2014