paf.confidence: Confidence Intervals for the Population Attributable Fraction

Description Usage Arguments Details Value Note Author(s) See Also Examples

View source: R/paf_confidence.R

Description

Function that estimates confidence intervals for the Population Attributable Fraction paf from a cross-sectional sample of the exposure X with a known Relative Risk function rr with meta-analytical parameter theta, where the Population Attributable Fraction is given by:

PAF = mean(rr(X; theta) - 1)/mean(rr(X; theta)).

Usage

1
2
3
4
5
6
7
8
paf.confidence(X, thetahat, rr, thetavar = NA, thetalow = NA,
  thetaup = NA, method = "empirical", confidence_method = "bootstrap",
  confidence = 95, confidence_theta = 99, nsim = 1000,
  weights = rep(1/nrow(as.matrix(X)), nrow(as.matrix(X))), Xvar = var(X),
  deriv.method.args = list(), deriv.method = "Richardson", adjust = 1,
  n = 512, ktype = "gaussian", bw = "SJ", check_exposure = TRUE,
  check_cft = TRUE, check_rr = TRUE, check_xvar = TRUE,
  check_integrals = TRUE, check_thetas = TRUE, force.min = FALSE)

Arguments

X

Random sample (data.frame) which includes exposure and covariates or sample mean if "approximate" method is selected.

thetahat

Asymptotically consistent of Fisher consistent estimator (vector) of theta for the Relative Risk function. thetahat should be asymptotically normal with mean theta and variance var_of_theta.

rr

function for Relative Risk which uses parameter theta. The order of the parameters should be rr(X, theta).

**Optional**

thetavar

Estimator of variance var_of_theta of asymptotic normality of thetahat.

thetalow

(vector) lower bound of the confidence interval of theta.

thetaup

(vector) upper bound of the confidence interval of theta.

method

Either "empirical" (default), "kernel" or "approximate". For details on estimation methods see pif.

confidence_method

Either bootstrap (default) inverse, one2one, linear, loglinear. See details for additional explanation.

confidence

Confidence level % (default 95). If confidence_method "one2one" is selected, confidence should be at most the one from theta's confidence interval (confidence_theta%).

confidence_theta

Confidence level % of theta corresponding to the interval [thetalow, thetaup] (default: 99%).

nsim

Number of simulations for estimation of variance.

weights

Normalized survey weights for the sample X.

Xvar

Variance of exposure levels (for "approximate" method).

deriv.method.args

method.args for hessian (for "approximate" method).

deriv.method

method for hessian. Don't change this unless you know what you are doing (for "approximate" method).

adjust

Adjust bandwith parameter (for "kernel" method) from density.

n

Number of equally spaced points at which the density (for "kernel" method) is to be estimated (see density).

ktype

kernel type: "gaussian", "epanechnikov", "rectangular", "triangular", "biweight", "cosine", "optcosine" (for "kernel" method). Additional information on kernels in density.

bw

Smoothing bandwith parameter (for "kernel" method) from density. Default "SJ".

check_exposure

boolean Check that exposure X is positive and numeric.

check_cft

boolean Check that counterfactual function cft reduces exposure.

check_rr

boolean Check that Relative Risk function rr equals 1 when evaluated at 0.

check_xvar

boolean Check Xvar is a covariance matrix.

check_integrals

boolean Check that counterfactual cft and relative risk's rr expected values are well defined for this scenario.

check_thetas

boolean Check that theta associated parameters are correctly inputed for the model.

force.min

Boolean indicating whether to force the rr to have a minimum value of 1 instead of 0 (not recommended). This works only for confidence_method "inverse".

Details

The confidence_method estimates confidence intervals with different methods. A bootstrap approximation is conducted by "bootstrap". The Delta Method is applied to paf or log(paf) when choosing "linear" and "loglinear" respectively. The "inverse" method estimates confidence intervals for the Relative Risk function rr and applies the transformation 1 - 1/rr. Finally, "one2one" works with functions for which the expected value over X of the relative risk is injective in theta.

Additional information on confidence method estimations can be found in the package's vignette: browseVignettes("pifpaf").

Value

pafvec Vector with lower ("Lower_CI"), and upper ("Upper_CI") confidence bounds for the paf as well as point estimate "Point_Estimate" and estimated variance or variance of log(paf) (if confidence_method is "loglinear").

Note

paf.confidence is a wrapper for pif.confidence with counterfactual of theoretical minimum risk exposure (rr = 1) .

For more information on kernels see density.

Do not use the $ operator when using "approximate" method.

Author(s)

Rodrigo Zepeda-Tello [email protected]

Dalia Camacho-Garc<c3><ad>a-Forment<c3><ad> [email protected]

See Also

pif.confidence for confidence interval estimation of pif, and paf for only point estimates.

Sensitivity analysis plots can be done with paf.plot, and paf.sensitivity.

Examples

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#Example 1: Exponential Relative Risk
#--------------------------------------------
set.seed(18427)
X        <- data.frame(Exposure = rnorm(100,3,1))
thetahat <- 0.32
thetavar <- 0.02
rr       <- function(X, theta){exp(theta*X)}

#Using bootstrap method
paf.confidence(X, thetahat, rr, thetavar)

## Not run: 
#Same example with loglinear method
paf.confidence(X, thetahat, rr, thetavar, confidence_method = "loglinear")

#Same example with linear method (usually the widest and least precise)
paf.confidence(X, thetahat, rr, thetavar, confidence_method = "linear")

#Same example with inverse method 
paf.confidence(X, thetahat, rr, thetavar, confidence_method = "inverse")

#Same example with one2one method 
#assume 99% ci of theta is [0.27, 0.35]
paf.confidence(X, thetahat, rr, thetalow = 0.27, thetaup = 0.35, 
confidence_method = "one2one", confidence_theta = 99)

#Example 2: Linear Relative Risk with weighted sample
#--------------------------------------------
set.seed(18427)
X                   <- data.frame(Exposure = rbeta(100,3,1))
weights             <- runif(100)
normalized_weights  <- weights/sum(weights)
thetahat            <- 0.17
thetavar            <- 0.01
rr                  <- function(X, theta){theta*X^2 + 1}
paf.confidence(X, thetahat, rr, thetavar, weights = normalized_weights)

#Change the confidence level and paf method
paf.confidence(X, thetahat, rr,  thetavar, weights = normalized_weights, 
     method = "kernel", confidence = 90)


#Example 3: Multivariate Linear Relative Risk
#--------------------------------------------
set.seed(18427)
X1       <- rnorm(100,4,1)
X2       <- rnorm(100,2,0.4)
thetahat <- c(0.12, 0.03)
thetavar <- diag(c(0.01, 0.02))

#But the approximate method crashes due to operator
Xmean <- data.frame(Exposure = mean(X1), 
                    Covariate = mean(X2))
Xvar  <- var(cbind(X1, X2))

#When creating relative risks avoid using the $ operator
#as it doesn't work under approximate method of PAF
rr_not    <- function(X, theta){
               exp(theta[1]*X$Exposure + theta[2]*X$Covariate)
             }
rr_better <- function(X, theta){
               exp(theta[1]*X[,"Exposure"] + theta[2]*X[,"Covariate"])
             }
             
paf.confidence(Xmean, thetahat, rr_better, thetavar,
               method = "approximate", Xvar = Xvar)

## End(Not run)
## Not run: 
#Warning: $ operator in rr definitions don't work in approximate
paf.confidence(Xmean, thetahat, rr_not, thetavar,
               method = "approximate", Xvar = Xvar)

## End(Not run)

## Not run: 
#Example 4: Categorical Relative Risk & Exposure
#--------------------------------------------
set.seed(18427)
mysample  <- sample(c("Normal","Overweight","Obese"), 100, 
                   replace = TRUE, prob = c(0.4, 0.1, 0.5))
X        <- data.frame(Exposure = mysample)

thetahat <- c(1, 1.2, 1.5)
thetavar <- diag(c(0.1, 0.2, 0.3))

#Categorical relative risk function
rr <- function(X, theta){

   #Create return vector with default risk of 1
   r_risk <- rep(1, nrow(X))
   
   #Assign categorical relative risk
   r_risk[which(X[,"Exposure"] == "Normal")]      <- thetahat[1]
   r_risk[which(X[,"Exposure"] == "Overweight")]  <- thetahat[2]
   r_risk[which(X[,"Exposure"] == "Obese")]       <- thetahat[3]
   
   return(r_risk)
}

paf.confidence(X, thetahat, rr, thetavar, check_rr = FALSE)


#Example 5: Continuous Exposure and Categorical Relative Risk
#------------------------------------------------------------------
set.seed(18427)

#Assume we have BMI from a sample
BMI          <- data.frame(Exposure = rlnorm(100, 3.1, sdlog = 0.1))

#Theoretical minimum risk exposure is at 20kg/m^2 in borderline "Normal" category
BMI_adjusted <- BMI - 20

thetahat <- c(Malnourished = 2.2, Normal = 1, Overweight = 1.8, 
              Obese = 2.5)
thetavar <- diag(c(0.1, 0.2, 0.2, 0.1))
rr       <- function(X, theta){
     
     #Create return vector with default risk of 1
     r_risk <- rep(1, nrow(X))
   
     #Assign categorical relative risk
     r_risk[which(X[,"Exposure"] < 0)]             <- theta[1] #Malnourished
     r_risk[intersect(which(X[,"Exposure"] >= 0), 
                      which(X[,"Exposure"] < 5))]  <- theta[2] #Normal
     r_risk[intersect(which(X[,"Exposure"] >= 5), 
                      which(X[,"Exposure"] < 10))] <- theta[3] #Overweight
     r_risk[which(X[,"Exposure"] >= 10)]           <- theta[4] #Obese
   
   return(r_risk)
}

paf.confidence(BMI_adjusted, thetahat, rr, thetavar, check_exposure = FALSE)

#Example 6: Bivariate exposure and rr ("classical PAF")
#------------------------------------------------------------------
set.seed(18427)
mysample  <- sample(c("Exposed","Unexposed"), 1000, 
                replace = TRUE, prob = c(0.1, 0.9))
X         <- data.frame(Exposure = mysample)
theta     <- c("Exposed" = 2.5, "Unexposed" = 1.2)  
thetavar  <- matrix(c(0.04, 0.02, 0.02, 0.03), ncol = 2)
rr        <- function(X, theta){
   
   #Create relative risk function
   r_risk <- rep(1, nrow(X))
   
   #Assign values of relative risk
   r_risk[which(X[,"Exposure"] == "Unexposed")] <- theta["Unexposed"]
   r_risk[which(X[,"Exposure"] == "Exposed")]   <- theta["Exposed"]
   
   return(r_risk)
}    

paf.confidence(X, theta, rr, thetavar)

#Example 7: Continuous exposure, several covariates
#------------------------------------------------------------------
X <- data.frame(Exposure = rbeta(100, 2, 3),
                Age      = runif(100, 20, 100),
                Sex      = sample(c("M","F"), 100, replace = TRUE),
                BMI      = rlnorm(100, 3.2, 0.2))
thetahat <- c(-0.1, 0.05, 0.2, -0.4, 0.3, 0.1)

#Create variance of theta
almostvar <- matrix(runif(6^2), ncol = 6)
thetavar  <- t(almostvar) %*% almostvar
rr <- function(X, theta){
     #Create risk vector
     Risk    <- rep(1, nrow(X))
     
     #Identify subpopulations
     males   <- which(X[,"Sex"] == "M")
     females <- which(X[,"Sex"] == "F")
     
     #Calculate population specific rr
     Risk[males] <- theta[1]*X[males,"Exposure"] + 
                                      theta[2]*X[males,"Age"]^2 + 
                                      theta[3]*X[males,"BMI"]/2 
                                     
     Risk[females] <- theta[4]*X[females,"Exposure"] + 
                                      theta[5]*X[females,"Age"]^2 + 
                                      theta[6]*X[females,"BMI"]/2 
                                     
    return(Risk)
}

paf.confidence(X, thetahat, rr, thetavar)

## End(Not run)

pifpaf documentation built on Sept. 29, 2017, 1:03 a.m.