我想将权重合并到WINBUGS模型的可能性中,以进行brms
权重的操作。
为dnorm
和dpois
完成此操作的常用BUGS approaches对于dbin
不起作用。
在brms中,正如paul.buerkner说的here一样,这是通过以下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