{AF}R Documentation

Attributable fraction for mached and non-matched case-control sampling designs. NOTE! Deprecated function. Use AFglm (for unmatched case-control studies) or AFclogit (for matched case-control studies).

Description estimates the model-based adjusted attributable fraction for data from matched and non-matched case-control sampling designs.

Usage, data, exposure, clusterid, matched = FALSE)



an object of class "formula" (or one that can be coerced to that class): a symbolic description of the model used for confounder adjustment. The exposure and confounders should be specified as independent (right-hand side) variables. The outcome should be specified as dependent (left-hand side) variable. The formula is used to object a logistic regression by glm for non-matched case-control and conditional logistic regression by gee (in package drgee) for matched case-control.


an optional data frame, list or environment (or object coercible by to a data frame) containing the variables in the model. If not found in data, the variables are taken from environment (formula), typically the environment from which the function is called.


the name of the exposure variable as a string. The exposure must be binary (0/1) where unexposed is coded as 0.


the name of the cluster identifier variable as a string, if data are clustered (e.g. matched).


a logical that specifies if the sampling design is matched (TRUE) or non-matched (FALSE) case-control. Default setting is non-matched (matched = FALSE).

Details estimates the attributable fraction for a binary outcome Y under the hypothetical scenario where a binary exposure X is eliminated from the population. The estimate is adjusted for confounders Z by logistic regression for unmatched case-control (glm) and conditional logistic regression for matched case-control (gee). The estimation assumes that the outcome is rare so that the risk ratio can be approximated by the odds ratio, for details see Bruzzi et. al. Let the AF be defined as

AF = 1 - \frac{Pr(Y_0=1)}{Pr(Y = 1)}

where Pr(Y_0=1) denotes the counterfactual probability of the outcome if the exposure would have been eliminated from the population. If Z is sufficient for confounding control then the probability Pr(Y_0=1) can be expressed as


Using Bayes' theorem this implies that the AF can be expressed as

AF = 1-\frac{E_Z\{Pr(Y=1\mid X=0,Z)\}}{Pr(Y=1)}=1-E_Z\{RR^{-X}(Z)\mid{Y = 1}\}

where RR(Z) is the risk ratio


Moreover, the risk ratio can be approximated by the odds ratio if the outcome is rare. Thus,

AF \approx 1 - E_Z\{OR^{-X}(Z)\mid{Y = 1}\}.

The odds ratio is estimated by logistic regression or conditional logistic regression. If clusterid is supplied, then a clustered sandwich formula is used in all variance calculations.



estimated attributable fraction.


estimated variance of AF.est. The variance is obtained by combining the delta methods with the sandwich formula.


a vector of the estimated log odds ratio for every individual. log.or contains the estimated coefficient for the exposure variable X for every level of the confounder Z as specified by the user in the formula. If the model to be estimated is

logit\{Pr(Y=1|X,Z)\} = \alpha+\beta{X}+\gamma{Z}

then log.or is the estimate of \beta. If the model to be estimated is


then log.odds is the estimate of \beta + \psi{Z}.


the fitted model. Fitted using logistic regression, glm, for non-matched case-control and conditional logistic regression, gee, for matched case-control.


Elisabeth Dahlqwist, Arvid Sjölander


Bruzzi, P., Green, S. B., Byar, D., Brinton, L. A., and Schairer, C. (1985). Estimating the population attributable risk for multiple risk factors using case-control data. American Journal of Epidemiology 122, 904-914.

See Also

The new and more general version of the function: AFglm for non-matched and AFclogit for matched case-control sampling designs. glm and gee used for fitting the logistic regression model (for non-matched case-control) and the conditional logistic regression model (for matched case-control).


expit <- function(x) 1 / (1 + exp( - x))
NN <- 1000000
n <- 500

# Example 1: non matched case-control
# Simulate a sample from a non matched case-control sampling design
# Make the outcome a rare event by setting the intercept to -6
intercept <- -6
Z <- rnorm(n = NN)
X <- rbinom(n = NN, size = 1, prob = expit(Z))
Y <- rbinom(n = NN, size = 1, prob = expit(intercept + X + Z))
population <- data.frame(Z, X, Y)
Case <- which(population$Y == 1)
Control <- which(population$Y == 0)
# Sample cases and controls from the population
case <- sample(Case, n)
control <- sample(Control, n)
data <- population[c(case, control), ]

# Estimation of the attributable fraction
AF.cc_est <- = Y ~ X + Z + X * Z, data = data, exposure = "X")

# Example 2: matched case-control
# Duplicate observations in order to create a matched data sample
# Create an unobserved confounder U common for each pair of individuals
U  <- rnorm(n = NN)
Z1 <- rnorm(n = NN)
Z2 <- rnorm(n = NN)
X1 <- rbinom(n = NN, size = 1, prob = expit(U + Z1))
X2 <- rbinom(n = NN, size = 1, prob = expit(U + Z2))
Y1 <- rbinom(n = NN, size = 1, prob = expit(intercept + U + Z1 + X1))
Y2 <- rbinom(n = NN, size = 1, prob = expit(intercept + U + Z2 + X2))
# Select discordant pairs
discordant <- which(Y1!=Y2)
id <- rep(1:n, 2)
# Sample from discordant pairs
incl <- sample(x = discordant, size = n, replace = TRUE)
data <- data.frame(id = id, Y = c(Y1[incl], Y2[incl]), X = c(X1[incl], X2[incl]),
                   Z = c(Z1[incl], Z2[incl]))

# Estimation of the attributable fraction
AF.cc_match <- = Y ~ X + Z + X * Z, data = data,
                         exposure = "X", clusterid = "id", matched = TRUE)

[Package AF version 0.1.5 Index]