提问人:Krantz 提问时间:12/28/2018 最后编辑:double-beepKrantz 更新时间:5/21/2019 访问量:763
如何将权重合并到 WinBUGS 模型的可能性中?
How to incorporate weights into the likelihood of a WinBUGS model?
问:
我想将权重合并到 WINBUGS 模型的可能性中,以执行 brms
对权重所做的工作。
通常的 BUGS 方法用于实现这一点,但不适用于 。dnorm
dpois
dbin
在 brms 中,正如 paul.buerkner 在这里所说,这是通过这样的 Stan 代码完成的:
vector[N] weights; \\ model weights
target += weights[n] * neg_binommial_2_log_lpmf(Y[n] | mu[n], shape);
当我在我的 BUGS 模型中实现这种方法时,我得到了下面的错误。
以下是数据和模型:
library(R2WinBUGS)
dat <- data.frame(
A = c(1, 1, 0, 0), B = c(1, 0, 1, 0),
Pass = c(278, 100, 153, 79), Fail = c(743, 581, 1232, 1731), Weights= c(3, 1, 12, 3))
N <- length(dat$Pass)
case <- dat$Pass
nn <- dat$Fail+dat$Pass
A <- dat$A
B <- dat$B
data <- list (N = N, case = case, A = A, B = B, nn = nn)
weights <- dat$Weights
data.weighted <- list (N = N, case = case, A = A, B = B, nn = nn, weights = weights)
model {
for (i in 1:N){
pp[i] <- exp(a0) * (1 + a1*A[i] + a2*B[i] + a3*A[i]*B[i])
case[i] ~ dbin(pp[i], nn[i])}
a0 ~ dnorm(0, 5)
a1 ~ dnorm(0, 5)
a2 ~ dnorm(0, 5)
a3 ~ dnorm(0, 5)
ones <- 1
ones ~ dbern(C1)
C1 <- step(0 - a0)*step(1 + a1)*step(exp(- a0) - 1 - a1)*step(1 - a2)*
step(exp(-a0) -1 - a2)*step(1 + a1 + a2 + a3)*step(exp(- a0) - 1 - a1 - a2 - a3)}
inits <- function(){list(a0=-4,a1=0,a2=0, a3=0)}
sim1 <- bugs(data, inits=inits, model.file = "C:/.../bug/regi1.bug",
parameters = c("a0", "a1", "a2", "a3"),
n.chains = 4, n.burnin = 500000, n.iter = 1000000,
bugs.directory = "C:/.../winbugs14_unrestricted/WinBUGS14", debug=FALSE)
print(sim1)
当我实现像 brms 中使用的解决方案时,出现错误:
不兼容的副本
BugsCmds.TextError [000003A1H] .beg INTEGER 1670313368
.end INTEGER 44779932 .name ARRAY 256 OF
CHAR "C:/Users/.../AppData/Local/" ... .pos INTEGER 144
.text TextModels.Model [02AB7940H] .v Views.View [02AB8C80H]
BugsCmds.Parse [00000470H] .name ARRAY 256 OF
CHAR "C:/Users/.../AppData/Local/" ...
.s BugsScanners.Scanner Fields StdInterpreter.CallProc [0000047AH]
.a BOOLEAN FALSE .b BOOLEAN FALSE .c BOOLEAN FALSE
.i Meta.Item Fields .imported ARRAY 256 OF CHAR "" ...
.importing ARRAY 256 OF CHAR "" ... .mn Meta.Name "BugsCmds"
.mod StdInterpreter.Ident "BugsCmds" .object ARRAY 256 OF CHAR ""
... .ok BOOLEAN TRUE .parType INTEGER 3 .pn Meta.Name "Parse"
.proc StdInterpreter.Ident "Parse" ... .res INTEGER 0
.v StdInterpreter.ProcVal Fields .vi StdInterpreter.ProcIVal Fields
.vii StdInterpreter.ProcIIVal Fields
.vr StdInterpreter.ProcRVal Fields
.vri StdInterpreter.ProcRIVal Fields
.vrii StdInterpreter.ProcRIIVal Fields
.vrr StdInterpreter.ProcRRVal Fields
.vrri StdInterpreter.ProcRRIVal Fields
.vrrii StdInterpreter.ProcRRIIVal Fields
.vrs StdInterpreter.ProcRSVal Fields
.vrsi StdInterpreter.ProcRSIVal Fields
.vrsii StdInterpreter.ProcRSIIVal Fields
.vs StdInterpreter.ProcSVal Fields
.vsi StdInterpreter.ProcSIVal Fields
.vsii StdInterpreter.ProcSIIVal Fields
.vsr StdInterpreter.ProcSRVal Fields
.vsri StdInterpreter.ProcSRIVal Fields
.vsrii StdInterpreter.ProcSRIIVal Fields
.vss StdInterpreter.ProcSSVal Fields
.vssi StdInterpreter.ProcSSIVal Fields
.vssii StdInterpreter.ProcSSIIVal Fields StdInterpreter.Command
[0000131CH] .left StdInterpreter.Ident "BugsCmds" .ptype INTEGER 3
.right StdInterpreter.Ident "Parse" ...
StdInterpreter.CallHook.Call [00001441H] .ch CHAR 0X .e ARRAY 64
OF CHAR "" ... .errorMsg ARRAY 1 OF CHAR "" .f ARRAY 64 OF CHAR ""
... .g ARRAY 64 OF CHAR "" ...
.hook StdInterpreter.CallHook [02B00050H] .i INTEGER 83
.i0 INTEGER 0 .i1 INTEGER 0 .id StdInterpreter.Ident "Parse" ...
.par0 Dialog.String "" ... .par1 Views.Title "" ... .proc ARRAY
240 OF CHAR "BugsCmds.Parse('C:/Users/..." ... .res INTEGER 0
.s0 Dialog.String "C:/Users/.../AppData/Local/" ...
.s1 Dialog.String "" ... .type INTEGER 3 .x INTEGER 0
Dialog.Call [00002FC8H] .errorMsg ARRAY 1 OF CHAR "" .proc ARRAY
240 OF CHAR "BugsCmds.Parse('C:/Users/..." ... .res INTEGER 0
BugsScript.Call [00000130H] .bugsCommands ARRAY 240 OF
CHAR "BugsCmds.SetOK; BugsCmds.Clear; " ... .i INTEGER 114
.item Meta.Item Fields .j INTEGER 82 .ok BOOLEAN FALSE
.par Dialog.Par Fields .pos INTEGER -1 .res INTEGER 0 .s ARRAY 240
OF CHAR "BugsCmds.Parse('C:/Users/..." ... .scriptCommand ARRAY 240
OF CHAR "#Bugs:check" ... .start INTEGER 77
.v BugsScript.RECORD Fields BugsScript.Action.Do [0000062FH]
.a BugsScript.Action [02C72400H] .argNum INTEGER 0
.bugsCommands ARRAY 240 OF CHAR "BugsCmds.SetOK; BugsCmds.Clear; "
... .p ARRAY 3, 120 OF CHAR Elements .s BugsScanners.Scanner Fields
.scriptCommand ARRAY 240 OF CHAR "#Bugs:check" ...
.vectorName BOOLEAN FALSE Services.Exec [00000136H]
.a Services.Action [02C72400H] .t POINTER [67400170H]
Services.IterateOverActions [000002F4H]
.p Services.Action [02C72400H] .t POINTER NIL
.time LONGINT 36194437 Services.StdHook.Step [0000034DH]
.h Services.StdHook [02ABE380H] HostWindows.Idle [00004A86H]
.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 4395250 Kernel.Try [00003A61H]
.a INTEGER 4395250 .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 "øëv" ... .w INTEGER 1825694848 .wParam INTEGER 1
.wnd INTEGER 4395250 <system (pc=7697BF1AH, fp=0061FAB0H)
<system (pc=769783E9H, fp=0061FB98H) <system (pc=76977C9DH,
fp=0061FC14H) <system (pc=7696CDCFH, fp=0061FC1CH) HostMenus.Loop
[00003BDEH] .done BOOLEAN FALSE .f SET {0..5} .n INTEGER 0
.res INTEGER 0 .w HostWindows.Window NIL Kernel.Start [00002B8CH]
.code PROCEDURE HostMenus.Loop
答: 暂无答案
评论