
Performs an analysis of the sensitivity of a binary treatment (prev.u
. With the default method
(or.method="x:u y:u"
), prev.u
. This second method results in
the adjusted odds ratio for
There is a plot
method for plotting objects created by
sensuc
. Values of event
function. The
default plot uses four symbols which differentiate whether for the
# fit <- lrm(formula=y ~ x + other.predictors, x=TRUE, y=TRUE) #or
# fit <- cph(formula=Surv(event.time,event.indicator) ~ x + other.predictors,
# x=TRUE, y=TRUE)sensuc(fit,
or.xu=seq(1, 6, by = 0.5), or.u=or.xu,
prev.u=0.5, constrain.binary.sample=TRUE,
or.method=c("x:u y:u","u|x,y"),
event=function(y) if(is.matrix(y))y[,ncol(y)] else 1*y)
# S3 method for sensuc
plot(x, ylim=c((1+trunc(min(x$effect.u)-.01))/
ifelse(type=='numbers',2,1),
1+trunc(max(x$effect.u)-.01)),
xlab='Odds Ratio for X:U',
ylab=if(x$type=='lrm')'Odds Ratio for Y:U' else
'Hazard Ratio for Y:U',
digits=2, cex.effect=.75, cex.z=.6*cex.effect,
delta=diff(par('usr')[3:4])/40,
type=c('symbols','numbers','colors'),
pch=c(15,18,5,0), col=c(2,3,1,4), alpha=.05,
impressive.effect=function(x)x > 1,...)
sensuc
returns an object of class "sensuc"
with the following elements: OR.xu
(vector of desired OOR.xu
(observed marginal OR.u
(desired effect.x
(adjusted odds or hazards ratio for
effect.u
(unadjusted effect.u.adj
(adjusted prev.u
(input to sensuc
), cond.prev.u
(matrix with one row per
combination, specifying prevalences of
combinations), and type
("lrm"
or "cph"
).
result of lrm
or cph
with x=TRUE, y=TRUE
. The
first variable in the right hand side of the model formula must have
been the binary
result of sensuc
vector of possible odds ratios measuring the
vector of possible odds ratios measuring the or.xu
.
desired prevalence of
By default, the binary constrain.binary.sample=FALSE
to sample from ordinary Bernoulli
distributions, to allow proportions of
see above
a function classifying the response variable into a binary event for the
purposes of constraining the association between event
is left at its default value, which
is the identify function, i.e, the original event
function takes the last column of the Surv
object
stored with the fit. For rare events (high proportion of censored
observations), odds ratios approximate hazard ratios, so the default is OK.
For other cases, the survival times should be considered (probably in
conjunction with the event indicators), although it may not be possible
to get a high enough hazard ratio between Surv
object (first column of
response variable=event time, second=event indicator). When
dichotomizing survival time at a given point, it is advantageous to choose
the cutpoint so that not many censored survival times preceed the cutpoint.
Note that in fitting Cox models to examine sensitivity to
y-axis limits for plot
x-axis label
y-axis label
number of digits to the right of the decimal point for drawing numbers
on the plot, for
type="numbers"
or type="colors"
.
character size for drawing effect ratios
character size for drawing
decrement in
specify "symbols"
(the default), "numbers"
, or "colors"
(see above)
4 plotting characters corresponding to positive and significant
effects for
4 colors as for pch
significance level
a function of the odds or hazard ratio for TRUE
for a
positive effect. By default, a positive effect is taken to mean a
ratio exceeding one.
optional arguments passed to plot
Frank Harrell
Mark Conaway
Department of Biostatistics
Vanderbilt University School of Medicine
fh@fharrell.com, mconaway@virginia.edu
Rosenbaum, Paul R (1995): Observational Studies. New York: Springer-Verlag.
Rosenbaum P, Rubin D (1983): Assessing sensitivity to an unobserved binary covariate in an observational study with binary outcome. J Roy Statist Soc B 45:212--218.
Lee WC (2011): Bounding the bias of unmeasured factors with confounding and effect-modifying potentials. Stat in Med 30:1007-1017.
lrm
, cph
, sample
set.seed(17)
x <- sample(0:1, 500,TRUE)
y <- sample(0:1, 500,TRUE)
y[1:100] <- x[1:100] # induce an association between x and y
x2 <- rnorm(500)
f <- lrm(y ~ x + x2, x=TRUE, y=TRUE)
#Note: in absence of U odds ratio for x is exp(2nd coefficient)
g <- sensuc(f, c(1,3))
# Note: If the generated sample of U was typical, the odds ratio for
# x dropped had U been known, where U had an odds ratio
# with x of 3 and an odds ratio with y of 3
plot(g)
# Fit a Cox model and check sensitivity to an unmeasured confounder
# require(survival)
# f <- cph(Surv(d.time,death) ~ treatment + pol(age,2)*sex, x=TRUE, y=TRUE)
# sensuc(f, event=function(y) y[,2] & y[,1] < 365.25 )
# Event = failed, with event time before 1 year
# Note: Analysis uses f$y which is a 2-column Surv object
Run the code above in your browser using DataLab