Continuation Ratio Ordinal Logistic Setup
Creates several new variables which help set up a dataset with an
ordinal response variable $y$ for use in fitting a forward continuation
ratio (CR) model. The CR model can be fitted with binary logistic
regression if each input observation is replicated the proper
number of times according to the $y$ value, a new binary $y$
is computed that has at most one $y=1$ per subject,
and if a
cohort variable is used to define the current
qualifying condition for a cohort of subjects, e.g., $y\geq 2$.
cr.setup creates the needed auxilliary variables. See
validate.lrm for information about
validating CR models (e.g., using the bootstrap to sample with
replacement from the original subjects instead of the records used in
the fit, validating the model separately for user-specified values of
- a character, numeric,
factorvector containing values of the response variable. For
levelsof the variable are assumed to be listed in an ordi
- a list with components
y, cohort, subs, reps.
yis a new binary variable that is to be used in the binary logistic fit.
factorvector specifying which cohort condition currently applies.
subsis a vector of subscripts that can be used to replicate other variables the same way
repsspecifies how many times each original observation was replicated.
y, cohort, subsare all the same length and are longer than the original
repsis the same length as the original
subsvector is suitable for passing to
calibrate, which pass this vector under the name
predab.resampleso that bootstrapping can be done by sampling with replacement from the original subjects rather than from the individual records created by
- logistic regression model
- continuation ratio model
- ordinal logistic model
- ordinal response
Berridge DM, Whitehead J: Analysis of failure time data with ordinal categories of response. Stat in Med 10:1703--1710, 1991.
y <- c(NA, 10, 21, 32, 32) cr.setup(y) set.seed(171) y <- sample(0:2, 100, rep=TRUE) sex <- sample(c("f","m"),100,rep=TRUE) sex <- factor(sex) table(sex, y) options(digits=5) tapply(y==0, sex, mean) tapply(y==1, sex, mean) tapply(y==2, sex, mean) cohort <- y>=1 tapply(y[cohort]==1, sex[cohort], mean) u <- cr.setup(y) Y <- u$y cohort <- u$cohort sex <- sex[u$subs] lrm(Y ~ cohort + sex) f <- lrm(Y ~ cohort*sex) # saturated model - has to fit all data cells f #Prob(y=0|female): # plogis(-.50078) #Prob(y=0|male): # plogis(-.50078+.11301) #Prob(y=1|y>=1, female): plogis(-.50078+.31845) #Prob(y=1|y>=1, male): plogis(-.50078+.31845+.11301-.07379) combinations <- expand.grid(cohort=levels(cohort), sex=levels(sex)) combinations p <- predict(f, combinations, type="fitted") p p0 <- p[c(1,3)] p1 <- p[c(2,4)] p1.unconditional <- (1 - p0) *p1 p1.unconditional p2.unconditional <- 1 - p0 - p1.unconditional p2.unconditional dd <- datadist(inputdata) # do this on non-replicated data options(datadist='dd') pain.severity <- inputdata$pain.severity u <- cr.setup(pain.severity) # inputdata frame has age, sex with pain.severity attach(inputdata[u$subs,]) # replicate age, sex # If age, sex already available, could do age <- age[u$subs] etc., or # age <- rep(age, u$reps), etc. y <- u$y cohort <- u$cohort dd <- datadist(dd, cohort) # add to dd f <- lrm(y ~ cohort + age*sex) # ordinary cont. ratio model g <- lrm(y ~ cohort*sex + age, x=TRUE,y=TRUE) # allow unequal slopes for # sex across cutoffs cal <- calibrate(g, cluster=u$subs, subset=cohort=='all') # subs makes bootstrap sample the correct units, subset causes # Predicted Prob(pain.severity=0) to be checked for calibration