R2WinBUGS - Ошибка прерывания - «индекс вне диапазона» и «разыменование NIL (чтение)» - PullRequest
0 голосов
/ 25 апреля 2019

Я использую модель сетевого анализа с использованием WinBUGS через R с пакетом R R2WinBUGS. Я получаю две ошибки (в WinBUGS) как раз в тот момент, когда WinBUGS закрывается и R собирается импортировать файлы coda:

  1. Индекс вне диапазона
  2. разыменование NIL (читать)

Модель работает нормально только при использовании WinBUGS, то есть не через R.

Для контекста я использую 3 цепочки и обновляю модель с помощью полного прогона, который использует последние значения цепочки прогона. То есть я вызываю bugs () дважды, один раз для прожига, один раз для полного запуска. В течение периода записи я наблюдаю за двумя векторами параметров длины <20. Кажется, это работает нормально, по крайней мере, до 300 000 итераций (обычно я буду использовать гораздо меньше). </p>

Полный прогон отслеживает около 500 параметров (включая скаляры, векторы и массивы). С R2WinBUGS моделирование до 10 000 итераций производится без проблем. Только когда я увеличиваю количество итераций примерно до 30 000 и более, я начинаю получать сообщения об ошибках. В идеале я хотел бы иметь возможность сделать больше: например, если в результате будущего анализа будут получены цепочки с высокой автокорреляцией. Ошибки перехвата происходят, как только WinBUGS собирается закрыться. То есть история (,…) появляется в скрипте WinBUGS. WinBUGS также имеет тенденцию входить в состояние «не отвечает» на этапах coda (,…) и stats (*). Я предполагаю, что это связано с размером файлов.

Я подозреваю, что ошибки вызваны проблемами с памятью, так как только ошибки увеличиваются, когда появляются ошибки. В то же время, файлы Coda не очень большие и должны быть доступны для чтения R. Так как модель прекрасно работает в WinBUGS (сама по себе); в R с R2WinBUGS для прогона прогона и для короткого числа итераций на полном прогоне; и код модели очень похож на документ технической поддержки NICE ( Программа NICE TSD2 1b ), я не думаю, что проблемы связаны с кодом модели.

Я использую R версии 3.5.3, с 8 ГБ ОЗУ. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Функция ошибок в R вызывается так:

full <- bugs(data = data_bugs, 
               inits = l.values,                              
               model.file = model,
               parameters.to.save = parameters_to_monitor,
               DIC = TRUE,
               n.burnin = 0,
               n.thin = n.thin,
               n.iter = n.iter.full,
               n.chains = n.chains,
               bugs.directory = 'S:/Resources/Statistics/Meta-Analysis/WinBUGS14'
#               ,debug = T
               )

Ошибки Trap в BUGS выглядят так:

(для краткости я не показывал эту ловушку в полном объеме)

NIL dereference (read)

 SamplesInterface.Samples   [00000F55H] 
    .beg    INTEGER 0
    .end    INTEGER 1000000
    .firstChain INTEGER 1
    .i  INTEGER 99
    .label  POINTER [5ADBB800H] 
    .lastChain  INTEGER 3
    .len    INTEGER 171
    .lenChain   INTEGER 60000
    .monitor    SamplesMonitors.Monitor [02C63EF0H] 
    .noChains   INTEGER 3
    .num    INTEGER 99
    .offset POINTER [5ADBB540H] 
    .ok BOOLEAN TRUE
    .s  BugsScanners.Scanner    Fields
    .samples    POINTER [5ADC5870H] 
    .start  POINTER [5ADC5B30H] 
    .step   INTEGER 1

и

index out of range

 HostWindows.AppendInt   [000002B7H] 
    .d  ARRAY 12 OF CHAR    "086'700'000'"
    .i  INTEGER 12
    .j  INTEGER 0
    .len    INTEGER 0
    .n  INTEGER 1
    .s  ARRAY 256 OF CHAR   " Allocated Memory: "   ...
    .useSeparators  BOOLEAN TRUE
 HostWindows.UpdateInfo   [000048B8H] 
    .res    INTEGER 6420476
    .sstr   ARRAY 256 OF SHORTCHAR  "øôa"   ...
    .str    ARRAY 256 OF CHAR   " Allocated Memory: "   ...
 HostWindows.Idle   [00004A73H] 
    .focus  BOOLEAN FALSE
    .tick   Controllers.TickMsg Fields
    .w  HostWindows.Window  NIL
 HostMenus.TimerTick   [00003422H] 
    .lParam INTEGER 0
    .ops    Controllers.PollOpsMsg  Fields
    .wParam INTEGER 1
    .wnd    INTEGER 202002
 Kernel.Try   [00003A61H] 
    .a  INTEGER 202002
    .b  INTEGER 1
    .c  INTEGER 0
    .h  PROCEDURE   HostMenus.TimerTick
 HostMenus.ApplWinHandler   [00003841H] 
    .Proc   PROCEDURE   NIL
    .hit    BOOLEAN FALSE
    .lParam INTEGER 0
    .message    INTEGER 275
    .res    INTEGER 0
    .s  ARRAY 256 OF SHORTCHAR  ""   ...
    .w  INTEGER 1997698375
    .wParam INTEGER 1
    .wnd    INTEGER 202002
<system>   (pc=7713635AH,  fp=0061FAACH)
<system>   (pc=7712729BH,  fp=0061FB90H)
<system>   (pc=771263DAH,  fp=0061FC04H)
<system>   (pc=7711BB3FH,  fp=0061FC0CH)
 HostMenus.Loop   [00003BDEH] 
    .done   BOOLEAN FALSE
    .f  SET {0..5}
    .n  INTEGER 4
    .res    INTEGER 0
    .w  HostWindows.Window  NIL
 Kernel.Start   [00002B8CH] 
    .code   PROCEDURE   HostMenus.Loop

Любая помощь будет принята с благодарностью.

...