Я хочу включить весовые коэффициенты в вероятность того, что модель WINBUGS сделает то, что brms
делает с весовыми коэффициентами.
Обычные ошибки приближаются для достижения этой цели.для 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