Re: [R] function to convert lm model to LaTeX equation

2009-10-18 Thread Frank E Harrell Jr

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.


--
Frank E Harrell Jr   Professor and Chair   School of Medicine
 Department of Biostatistics   Vanderbilt University

__
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.


Re: [R] function to convert lm model to LaTeX equation

2009-10-18 Thread Ista Zahn
On Sun, Oct 18, 2009 at 9:09 AM, Frank E Harrell Jr
f.harr...@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

__
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] function to convert lm model to LaTeX equation

2009-10-17 Thread Ista Zahn
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)

-- 
Ista Zahn
Graduate student
University of Rochester
Department of Clinical and Social Psychology
http://yourpsyche.org

__
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.