sim {arm}R Documentation

Functions to Get Posterior Distributions

Description

This generic function gets posterior simulations of sigma and beta from a lm object, or simulations of beta from a glm object, or simulations of beta from a mer object

Usage

sim(object, ...)

## S4 method for signature 'lm':
sim(object, n.sims = 100)
## S4 method for signature 'glm':
sim(object, n.sims = 100)
## S4 method for signature 'mer':
sim(object, n.sims = 100, ranef=TRUE)

Arguments

object the output of a call to lm with n data points and k predictors.
... further arguments passed to or from other methods.
n.sims number of independent simulation draws to create.
ranef default is TRUE, which will return simulated random effects.

Value

coef matrix (dimensions n.sims x k) of n.sims random draws of coefficients. Previously, it is called beta.
fixef matrix (dimensions n.sims x k) of n.sims random draws of coefficients of the fixed effects for the mer objects. Previously, it is called unmodeled.
sigma vector of n.sims random draws of sigma (for glm's, this just returns a vector of 1's or else of the square root of the overdispersion parameter if that is in the model)

Author(s)

Andrew Gelman gelman@stat.columbia.edu; Yu-Sung Su ys463@columbia.edu

References

Andrew Gelman and Jennifer Hill. (2006). Data Analysis Using Regression and Multilevel/Hierarchical Models. Cambridge University Press.

See Also

display, lm, glm, lmer

Examples

#Examples of "sim" 
 set.seed (1)
 J <- 15
 n <- J*(J+1)/2
 group <- rep (1:J, 1:J)
 mu.a <- 5
 sigma.a <- 2
 a <- rnorm (J, mu.a, sigma.a)
 b <- -3
 x <- rnorm (n, 2, 1)
 sigma.y <- 6
 y <- rnorm (n, a[group] + b*x, sigma.y)
 u <- runif (J, 0, 3)
 y123.dat <- cbind (y, x, group)
# Linear regression 
 x1 <- y123.dat[,2]
 y1 <- y123.dat[,1]
 M1 <- lm (y1 ~ x1)
 display(M1)
 M1.sim <- sim(M1)
 ## to get the uncertainty for the simulated estimates
 apply(M1.sim$coef, 2, quantile)
 quantile(M1.sim$sigma)
 
# Logistic regression 
 u.data <- cbind (1:J, u)
 dimnames(u.data)[[2]] <- c("group", "u")
 u.dat <- as.data.frame (u.data)
 y <- rbinom (n, 1, invlogit (a[group] + b*x))
 M2 <- glm (y ~ x, family=binomial(link="logit"))
 display(M2)
 M2.sim <- sim (M2)

# Using lmer:
# Example 1
 E1 <- lmer (y ~ x + (1 | group))
 display(E1)
 E1.sim <- sim (E1)
 ## obtain intervals of the estimates
 t(apply(E1.sim$fixef, 2, quantile, probs = c(0.025, 0.5, 0.975)))

# Example 2
 u.full <- u[group]
 E2 <- lmer (y ~ x + u.full + (1 | group))
 display(E2)
 E2.sim <- sim (E2)

# Example 3 
 y <- rbinom (n, 1, invlogit (a[group] + b*x))
 E3 <- glmer (y ~ x + (1 | group), family=binomial(link="logit"))
 display(E3)
 E3.sim <- sim (E3)
 

[Package arm version 1.2-8 Index]