Я использую модель сетевого анализа с использованием WinBUGS через R с пакетом R R2WinBUGS. Я получаю две ошибки (в WinBUGS) как раз в тот момент, когда WinBUGS закрывается и R собирается импортировать файлы coda:
- Индекс вне диапазона
- разыменование 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
Любая помощь будет принята с благодарностью.