Ajay Narottam Shah
2006-Aug-14 13:08 UTC
[R] Presentation of multiple models in one table using xtable
Consider this situation:> x1 <- runif(100); x2 <- runif(100); y <- 2 + 3*x1 - 4*x2 + rnorm(100) > m1 <- summary(lm(y ~ x1)) > m2 <- summary(lm(y ~ x2)) > m3 <- summary(lm(y ~ x1 + x2))Now you have estimated 3 different "competing" models, and suppose you want to present the set of models in one table. xtable(m1) is cool, but doing that thrice would give us 3 different tables. What I want is this one table: ----------------------------------------------------------- M1 M2 M3 ----------------------------------------------------------- Intercept 0.0816 3.6292 2.2272 (0.5533) (0.2316)*** (0.2385)*** x1 2.8151 2.7606 (0.5533)*** (0.3193)*** x2 -4.2899 -4.2580 (0.401)*** (0.3031)*** $\sigma_e$ 1.538 1.175 0.8873 $R^2$ 0.2089 0.5385 0.7393 ----------------------------------------------------------- How would one set about doing this? I am hoping that it's possible to write a function xtable.multi.lm where one would say xtable.multi.lm(m1,m2,m3) and get the above table. My sense is there are three challenges: 1. How to write a general R function which eats a unpredictable number of summary(lm()) objects, and fill out a matrix with results such as the above. 2. How to get a good xtable(), with decimal alignment and with the *** stuff (actually, $^{***}$). Will there be any catch in dropping into mathmode for $R^2$? After each pair of lines, I'd like to have a \\[2mm] so as to get a nice spacing in the table. 3. This style of presentation seems relevant to a whole host of models - whether ARCH models or survival models - not just OLS regressions. It would be very nice if one supported all manner of model objects and not just what comes out of lm(). I'm happy to take a crack at writing this function, which should ideally go back into the xtable library. But I don't have an idea on how to go about these two questions. If you will guide me, I am happy to work on it. :-) -- Ajay Shah http://www.mayin.org/ajayshah ajayshah at mayin.org http://ajayshahblog.blogspot.com <*(:-? - wizard who doesn't know the answer.
Dieter Menne
2006-Aug-16 06:50 UTC
[R] Presentation of multiple models in one table using xtable
Ajay Narottam Shah <ajayshah <at> mayin.org> writes:> > Consider this situation: > > x1 <- runif(100); x2 <- runif(100); y <- 2 + 3*x1 - 4*x2 + rnorm(100) > > m1 <- summary(lm(y ~ x1)) > > m2 <- summary(lm(y ~ x2)) > > m3 <- summary(lm(y ~ x1 + x2)) > > Now you have estimated 3 different "competing" models, and suppose you > want to present the set of models in one table. xtable(m1) is cool, > but doing that thrice would give us 3 different tables. > > What I want is this one table: > > ----------------------------------------------------------- > M1 M2 M3 > ----------------------------------------------------------- > Intercept 0.0816 3.6292 2.2272 > (0.5533) (0.2316)*** (0.2385)***...... (my gmane newreader complains when I quote too much, and contrary to the general believe on this list, I think he is right). There is no standard way of doing this, so the first formatting must be done manually. For a nice output, check the R2HTML packages and the latex() derivates in Frank Harrell's Hmisc package. Dieter