Search code examples
rlogistic-regressionjags

Logistic regression when response is a proportion (using JAGS)


I am trying to fit a logistic regression model in JAGS, but I have data in the form of (# success y, # attempts n), rather than a binary variable. In R, one can fit a model to data such as these by using glm(y/n ~ ) with the "weights" argument, but I am not sure how to fit this in JAGS.

Here is a simple example that I hope addresses what I am trying to ask. Note that I am using the rjags package. Thanks for any help!

y <- rbinom(10, 500, 0.2)
n <- sample(500:600, 10)
p <- y/n
x <- sample(0:100, 10) # some covariate

data <- data.frame(y, n, p, x)

model <- "model{
# Specify likelihood
for(i in 1:10){
    y[i] ~ dbin(p[i], n[i])
    logit(p[i]) <- b0 + b1*x
}

# Specify priors
b0 ~ dnorm(0, 0.0001)
b1 ~ dnorm(0, 0.0001)
}"

Solution

  • You don't need to compute p in your data set at all. Just let it be a logical node in your model. I prefer the R2jags interface, which allows you to specify a BUGS model in the form of an R function ...

    jagsdata <- data.frame(y=rbinom(10, 500, 0.2),
                       n=sample(500:600, 10),
                       x=sample(0:100, 10))
    model <- function() {
        ## Specify likelihood
        for(i in 1:10){
            y[i] ~ dbin(p[i], n[i])
            logit(p[i]) <- b0 + b1*x[i]
        }
        ## Specify priors
        b0 ~ dnorm(0, 0.0001)
        b1 ~ dnorm(0, 0.0001)
    }
    

    Now run it:

    library("R2jags") 
    jags(model.file=model,data=jagsdata,
         parameters.to.save=c("b0","b1"))