我正在使用R包R2WinBUGS通过WinBUGS运行网络元分析模型。在WinBUGS将要关闭且R将要导入尾声文件的同时,我收到两个陷阱错误(在WinBUGS中):
仅单独使用WinBUGS(即不通过R)使用时,模型运行良好。
对于上下文,我正在使用3条链,并使用一次完整运行更新模型,该运行将使用老化运行的最后一条链值。也就是说,我两次调用bugs(),一次用于老化,一次用于全面运行。在老化期间,我监视两个长度小于20的参数向量。这似乎很好用,至少可以进行300,000次迭代(我通常会少用很多)。
完整运行可监视约500个参数(包括标量,向量和数组)。使用R2WinBUGS,可以毫无问题地进行多达10,000次迭代的仿真。只有当我将迭代次数增加到大约30,000或更多时,我才开始出现陷阱错误。理想情况下,我希望有机会做更多的事情:例如,如果将来的分析产生具有高自相关性的链。陷阱错误会在WinBUGS即将关闭时发生。也就是说,就像历史(,…)出现在WinBUGS脚本中一样。 WinBUGS也会在尾声(,…)和stats(*)阶段进入“不响应”状态。我认为这是由于文件的大小所致。
我怀疑错误是由内存问题引起的,因为只有在迭代次数增加时才会出现陷阱错误。同时,尾声文件不是很大,应该可以由R读取。由于模型在WinBUGS中运行良好(单独运行);在R中使用R2WinBUGS进行老化运行,并在完整运行中进行少量迭代;并且模型代码与NICE技术支持文档(NICE TSD2 Program 1b)非常相似,我认为问题不在于模型代码。
我正在使用R版本3.5.3,带有8GB RAM。如果您需要更多信息,请告诉我。
R中的bug函数的调用方式如下:
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
)
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
任何帮助将不胜感激。