Hi folks,
I'm trying to consolidate the outputs (of anova() and lrm()) from
multiple runs of single-variable logistic regression. Here's how the
output looks:
------------------------------------------------------------
y ~ x1 y ~ x2 y ~ x3 y ~
x4
Chi-Square 0.1342152 1.573538 1.267291 1.518200
d.f. 2 2
2 1
P 0.9350946 0.4553136 0.5306538 0.2178921
R2 0.01003342 0.1272791 0.0954126 0.1184302
-------------------------------------------------------------------
The problem I have is when there are a lot more variables (15+) --- It
would be nice if this output is transposed.
A reproducible code is included below. I tried the transpose function,
but it didn't seem to work. If there is a neater way of getting the
desired output, I'd appreciate that as well.
==========================================Lines <- "y x1 x2 x3 x4
0 m 1 0 7
1 t 2 1 13
0 f 1 2 18
1 t 1 2 16
1 f 3 0 16
0 t 3 1 16
0 t 1 1 16
0 t 2 1 16
1 t 3 2 14
0 t 1 0 9
0 t 1 0 10
1 m 1 0 4
0 f 2 2 18
1 f 1 1 12
0 t 2 0 13
0 t 1 1 16
1 t 1 2 7
0 f 2 1 18"
my.data <- read.table(textConnection(Lines), header = TRUE)
my.data$x1 <- as.factor(my.data$x1)
my.data$x2 <- as.factor(my.data$x2)
my.data$x3 <- as.factor(my.data$x3)
my.data$y <- as.logical(my.data$y)
sapply(paste("y ~", names(my.data)[2:dim(my.data)[2]]),
function(f){tab <- cbind(as.data.frame(t(anova(lrm(as.formula(f),data
= my.data,x=T,y=T))[1,])),
as.data.frame(t(lrm(as.formula(f),data = my.data,x=T,y=T)$stats[10])))
})
================================
Thanks,
- Girish
> sessionInfo()
R version 2.9.0 (2009-04-17)
i386-pc-mingw32
locale:
LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.
1252;LC_MONETARY=English_United States.
1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
attached base packages:
[1] splines grid stats graphics grDevices utils
datasets methods
[9] base
other attached packages:
[1] xtable_1.5-5 fBasics_2100.77 timeSeries_2100.83
timeDate_290.85
[5] gplots_2.7.1 caTools_1.9 bitops_1.0-4.1
gdata_2.4.2
[9] gtools_2.6.1 Design_2.2-0 survival_2.35-4
RWinEdt_1.8-1
[13] coda_0.13-4 verification_1.29 CircStats_0.2-3
boot_1.2-36
[17] fields_5.02 spam_0.15-4 waveslim_1.6.1
lmtest_0.9-24
[21] zoo_1.5-6 psychometric_2.1 multilevel_2.3
MASS_7.2-47
[25] nlme_3.1-92 languageR_0.953 zipfR_0.6-5
lme4_0.999375-31
[29] Matrix_0.999375-29 lattice_0.17-25 ggplot2_0.8.3
reshape_0.8.3
[33] plyr_0.1.8 proto_0.3-8 Hmisc_3.6-0
doBy_3.9
[37] car_1.2-14
loaded via a namespace (and not attached):
[1] cluster_1.12.0 Formula_0.1-3 kinship_1.1.0-22
plm_1.1-4 sandwich_2.2-1
[6] tools_2.9.0
On Jun 17, 2009, at 10:06 AM, Girish A.R. wrote:> Hi folks, > > I'm trying to consolidate the outputs (of anova() and lrm()) from > multiple runs of single-variable logistic regression. Here's how the > output looks: > ------------------------------------------------------------ > y ~ x1 y ~ x2 y ~ x3 y ~ > x4 > Chi-Square 0.1342152 1.573538 1.267291 1.518200 > d.f. 2 2 > 2 1 > P 0.9350946 0.4553136 0.5306538 0.2178921 > R2 0.01003342 0.1272791 0.0954126 0.1184302 > ------------------------------------------------------------------- > The problem I have is when there are a lot more variables (15+) --- It > would be nice if this output is transposed. > > A reproducible code is included below. I tried the transpose function, > but it didn't seem to work. If there is a neater way of getting the > desired output, I'd appreciate that as well. > > ==========================================> Lines <- "y x1 x2 x3 x4 > 0 m 1 0 7 > 1 t 2 1 13 > 0 f 1 2 18 > 1 t 1 2 16 > 1 f 3 0 16 > 0 t 3 1 16 > 0 t 1 1 16 > 0 t 2 1 16 > 1 t 3 2 14 > 0 t 1 0 9 > 0 t 1 0 10 > 1 m 1 0 4 > 0 f 2 2 18 > 1 f 1 1 12 > 0 t 2 0 13 > 0 t 1 1 16 > 1 t 1 2 7 > 0 f 2 1 18" > > my.data <- read.table(textConnection(Lines), header = TRUE) > my.data$x1 <- as.factor(my.data$x1) > my.data$x2 <- as.factor(my.data$x2) > my.data$x3 <- as.factor(my.data$x3) > my.data$y <- as.logical(my.data$y) > > sapply(paste("y ~", names(my.data)[2:dim(my.data)[2]]), > function(f){tab <- cbind(as.data.frame(t(anova(lrm(as.formula(f),data > = my.data,x=T,y=T))[1,])), > as.data.frame(t(lrm(as.formula(f),data = my.data,x=T,y=T)$stats[10]))) > }) > ================================> > Thanks, > > - GirishYou can try something like this: library(Design) my.func <- function(x) { mod <- lrm(my.data$y ~ x) data.frame(t(anova(mod)[1, ]), R2 = mod$stats[10]) } > t(sapply(my.data[, -1], my.func)) Chi.Square d.f. P R2 x1 0.1342152 2 0.9350946 0.01003342 x2 1.573538 2 0.4553136 0.1272791 x3 1.267291 2 0.5306538 0.0954126 x4 1.518200 1 0.2178921 0.1184302 I am not sure what your end game might be, but would simply express the appropriate caution if this is a step in any approach to variable selection for subsequent model development... HTH, Marc Schwartz