2

I'm trying to call winBUGS from R to estimate a logistic regression. I'm using the following code:

# Directorio de trabajo
setwd("~/3 Diplomado/7 Bayesiana/8t1")

# paquete para hablarse con WinBUGS desde R
library(R2WinBUGS)

# cargamos datos
reg <- read.table("enf.csv", header = TRUE, sep = ",")
edad <- reg$edad
enfer <- reg$efer
n <- length(reg$edad)

# Primeras filas de los datos
head(reg)

# Nombres de los datos para alimentar al modelo en WinBUGS
datos <- list("edad","enfer", "n")

# Construimos el modelo

modelo <- function(){
  for (i in 1:n) {
    enfer[i] ~ dbin(theta[i], 1)
    logit(theta[i]) < - beta0 + beta1 * edad[i] 
    phi[i]<-theta[i]/(1-theta[i])
      }
  beta0 ~ dnorm(0, 0.0001)
  beta1 ~ dnorm(0, 0.0001)

}

## escribimos el modelo a un archivo .bug file:
write.model(modelo, "modelo.bug")
## Para echarle un vistazo al modelo:
file.show("modelo.bug")

# Distribuciones iniciales
iniciales <- function(){
 list(beta0=1,beta1=1)
}

# Corremos esto en WinBUGS

   regresionlogistica.sim = bugs(datos,iniciales,
                 model.file="modelo.bug",
                 parameters=c("beta0","beta1"),
                 n.chains=1,n.iter=20000,n.burnin=5000,n.thin=1,
                 bugs.directory="C:/Users/pythonxy/Documents/3 Diplomado/7 Bayesiana/winbugs14",
                 working.directory="~/3 Diplomado/7 Bayesiana/8t1",          
                 codaPkg=FALSE)

WinBUGS opens but I get an error. "Incompatible copy". I have been searching for this error and have found that many people have experienced this. I have tried the proposed solutions: shorter file path for model.bug, making sure there are no more "data" files in the work directory, using list of names for data variable names, etc.

But I still cant get this to work. What am I doing wrong?

JEquihua
  • 1,217
  • 3
  • 20
  • 40

1 Answers1

5

If I remember well, this error arises if there are some problems with input data or output parameters. I spot several potential problems in your code:

  1. I think this datos <- list("edad","enfer", "n") is wrong: you should have used like datos <- list(edad = edad, enfer = enfer, n = n), because you want to pass the actual data, not just R variable names! Don't confuse this with the output parameters!

  2. phi node is computed but not monitored. I'm not sure if this could be a problem but WinBUGS sometimes behaves strange in this way. Give it a try!

  3. the initial values should be generated randomly, not fixed like this (like rnorm(1, 0, 0.01) etc.)

Tomas
  • 57,621
  • 49
  • 238
  • 373
  • agree except not necessarily about #3. Sometimes deterministic initial values are more convenient, especially for debugging purposes. – Ben Bolker Jan 31 '13 at 14:10
  • @BenBolker, good note! But I guess the rest of the process will not be deterministic anyways... – Tomas Jan 31 '13 at 14:18
  • No, now it ways that the variable edad cannot be found, enfer cannot be found, n cannot be found... – JEquihua Jan 31 '13 at 22:43
  • DONE! thank you! and actually datos <- list("edad","enfer", "n") is correct! – JEquihua Jan 31 '13 at 23:12
  • @JEquihua, sorry, what I actually do in my code is like `datos <- list(edad = edad, enfer = enfer, n = n)`, I edited my answer! I thought `datos <- list(edad, enfer, n)` does the same but it doesn't, sorry! Anyways, you got rid of the problem already, in a different way? What helped, where was the problem? – Tomas Feb 01 '13 at 12:19