2010/2/18 Philipp Rappold <philipp.rapp...@gmail.com>: > Göran, David, > > in order to adapt aftreg to my needs I wrote a little function that I would > like to share with you and the community.
I once promised to fix this 'asap'. Now I promise to do it tonight. OK? Göran > > > WHAT DOES IT FIX? > > (1) Using the id-argument in combination with missing values on covariates > wasn't easily possible before because the id-dataframe and the > data-dataframe had different sizes and aftreg quitted with an error. My fix > makes sure that NAs are excluded from both dataframes and aftreg will run > without error here. > > (2) The id-argument was required to be specified by its "absolute path" (eg. > id=testdata$groupvar, see below in this thread). My adapted funtion takes > the name of the id-variable as a string, eg. id="groupvar". > > > HOW DOES IT WORK? > > Use function aftreg2 just like you would use aftreg. Mandatory arguments > are: formula, data and id, where id is a string variable. Example: > >> testdata > start stop censor groupvar var1 > 1 0 1 0 1 0.1284928 > 2 1 2 0 1 0.4896125 > 3 2 3 0 1 0.7012899 > 4 3 4 0 1 NA > 5 0 1 0 2 0.7964361 > 6 1 2 0 2 0.8466039 > 7 2 3 1 2 0.2234271 > > model1 <- aftreg(Surv(start, stop, censor)~var1, data=testdata, id=groupvar) >> ERROR. > > model2 <- aftreg2(Surv(start, stop, censor)~var1, data=testdata, > id="groupvar") >> WORKS FINE. > > > PREREQUISITES: > > (1) Make sure that missing values are only present at the end of a lifetime. > The regression will yield false results if you have missing covariate data > in the middle of a lifetime. For instance: known covariates from liftetime > 0-10, 13-20, but not from 11-12. (Göran: Please correct me if I'm wrong > here!). > > (2) If you have missing covariate data at the beginning of a lifetime (eg. > missing from 0-5, but present from 6-censoring), this fix will yield false > results if one _cannot_ assume that the missing covariates were the same > from 0-5 as they were at 6. (Göran: Please correct me again if I'm wrong > here with my interpretation, but that's basically what you said before) > > > LISTING: > > aftreg2 <- function(formula, data, id, ...){ > > call <- match.call() > > non_na_cols <- attr(attr(terms(formula), "factors"), > "dimnames")[2][[1]] > > data <- data[complete.cases(data[non_na_cols]),] > data <- data[complete.cases(data[id]),] > > cat("Original Call: ") > print(call) > > return(aftreg(formula=formula, data=data, id=data[,id], ...)) > } > > > Hope someone finds this interesting. > > All the best > Philipp > > > David Winsemius wrote: >> >> On Feb 11, 2010, at 5:58 AM, Philipp Rappold wrote: >> >>> Göran, thanks! >>> >>> One more thing that I found: As soon as you have at least one NA in the >>> independent vars, the trick that you mentioned does not work anymore. >>> Example: >>> >>> > testdata >>> start stop censor groupvar var1 >>> 1 0 1 0 1 0.1284928 >>> 2 1 2 0 1 0.4896125 >>> 3 2 3 0 1 0.7012899 >>> 4 3 4 0 1 NA >>> 5 0 1 0 2 0.7964361 >>> 6 1 2 0 2 0.8466039 >>> 7 2 3 1 2 0.2234271 >>> >>> > aftreg(Surv(start, stop, censor)~var1, data=testdata, >>> > id=testdata$groupvar) >>> Error in order(id, Y[, 1]) : Different length of arguments (* I >>> translated this from the German Output *) >>> >>> Do you think there is a simple hack which excludes all subjects that have >>> at least on NA in their independent vars? If it was only one dependent var >>> it would probably be easy by just using subset, but I have lots of different >>> combinations of vars that I'd like to test ;) >>> >> >> I don't know if it's a "hack", but there are a set of functions that >> perform such subsetting: >> >> ?na.omit >> >> There is a parameter that would accomplish that goal inside aftreg. You >> may want to check what your defaults are for na.action. >> > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.