R2WinBUGS-陷阱错误-'索引超出范围'和'NIL取消引用(读取)'

时间:2019-04-25 09:10:51

标签: winbugs r2winbugs

我正在使用R包R2WinBUGS通过WinBUGS运行网络元分析模型。在WinBUGS将要关闭且R将要导入尾声文件的同时,我收到两个陷阱错误(在WinBUGS中):

  1. 索引超出范围
  2. 取消对NIL的引用(已读)

仅单独使用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

任何帮助将不胜感激。

0 个答案:

没有答案