[R] function to convert lm model to LaTeX equation
Ista Zahn
izahn at psych.rochester.edu
Sun Oct 18 15:41:30 CEST 2009
On Sun, Oct 18, 2009 at 9:09 AM, Frank E Harrell Jr
<f.harrell at vanderbilt.edu> wrote:
> Ista Zahn wrote:
>>
>> Dear list,
>> I've tried several times to wrap my head around the Design library,
>> without much success. It does some really nice things, but I'm often
>> uncomfortable because I don't understand exactly what it's doing.
>> Anyway, one thing I really like is the latex.ols() function, which
>> converts an R linear model formula to a LaTeX equation.
>>
>> So, I started writing a latex.lm() function (not actually using
>> classes at this point, I just named it that for consistency). This
>> turned out to be easy enough for simple cases (see code below), but
>> now I'm wondering a) if anyone knows of existing functions that do
>> this (again, for lm() models, I know I'm reinventing the wheel in as
>> far as the Design library goes), or if not, b) if anyone has
>> suggestions for improving the function below.
>>
>> Thanks,
>> Ista
>>
>> ### Function to create LaTeX formula from lm() model. Needs amsmath
>> package in LaTeX. ###
>>
>> latex.lm <- function(object, file="", math.env=c("$","$"),
>> estimates="none", abbreviate = TRUE, abbrev.length=8, digits=3) {
>> # Get and format IV names
>> co <- c("Int", names(object$coefficients)[-1])
>> co.n <- gsub("p.*)", "", co)
>> if(abbreviate == TRUE) {
>> co.n <- abbreviate(gsub("p.*)", "", co), minlength=abbrev.length)
>> }
>> # Get and format DV
>> m.y <- strsplit((as.character(object$call[2])), " ~ ")[[1]][1]
>> # Write coefficent labels
>> b.x <- paste("\\beta_{", co.n ,"}", sep="")
>> # Write error term
>> e <- "\\epsilon_i"
>> # Format coefficint x variable terms
>> m.x <- sub("}Int","}", paste(b.x, co.n, " + ", sep="", collapse=""))
>> # If inline estimates convert coefficient labels to values
>> if(estimates == "inline") {
>> m.x <- sub("Int", "",
>> paste(round(object$coefficients,digits=digits), co.n, " + ", sep="",
>> collapse=""))
>> m.x <- gsub("\\+ \\-", "-", m.x)
>> }
>> # Format regression equation
>> eqn <- gsub(":", " \\\\\\times ", paste(math.env[1], m.y, " = ",
>> m.x, e, sep=""))
>> # Write the opening math mode tag and the model
>> cat(eqn, file=file)
>> # If separae estimates format estimates and write them below the model
>> if(estimates == "separate") {
>> est <- gsub(":", " \\\\\\times ", paste(b.x, " = ",
>> round(object$coefficients, digits=digits), ", ", sep="", collapse=""))
>> cat(", \\\\ \n \\text{where }", substr(est, 1, (nchar(est)-2)),
>> file=file)
>> }
>> # Write the closing math mode tag
>> cat(math.env[2], "\n", file=file)
>> }
>>
>> # END latex.lm
>>
>> Xvar1 <- rnorm(20)
>> Xvar2 <- rnorm(20)
>> Xvar3 <- factor(rep(c("A","B"),10))
>> Y.var <- rnorm(20)
>> D <- data.frame(Xvar1, Xvar2, Xvar3, Y.var)
>>
>> x1 <- lm(Y.var ~ pol(Xvar1, 3) + Xvar2*Xvar3, data=D)
>> latex.lm(x1)
>>
>
> It's not reinventing the wheel, in the sense that you are not attempting to
> handle the most needed features (simplifying regression splines and
> factoring out interaction terms with brackets). I don't think you followed
> the posting guide though. You didn't state your exact problem with Design
> and you didn't include any code. Also note that the Design package is
> replaced with the rms package although latex features have not changed.
Thank you for your response Prof. Harrell. Sorry my original post
didn't meet the guidelines -- it was poorly worded I'm afraid. The
question was not about the Design package, but about how to represent
a lm() model as a LaTeX equation, and specifically whether anyone had
already written code for this task, and if not how the function I
wrote could be improved. Thank you for you're suggestions about
needing to handle regression splines and factoring out interaction
terms, that's very helpful.
Thanks again,
Ista
>
> --
> Frank E Harrell Jr Professor and Chair School of Medicine
> Department of Biostatistics Vanderbilt University
>
--
Ista Zahn
Graduate student
University of Rochester
Department of Clinical and Social Psychology
http://yourpsyche.org
More information about the R-help
mailing list