[R] How to Package Extra Results to summary.lm

Matthew Dubins matt.dubins at utoronto.ca
Fri Mar 21 22:49:56 CET 2008


Dear R users,

I came up with some simple functions to give me the standard betas and 
tolerance values from a predefined lm() model.  I have been trying to 
insert the results from these functions into the coefficients matrix in 
a modified summary.lm function that I'm calling summary2 (I'd never edit 
the summary.lm function directly!!).  I managed to get the results 
inserted into the output, but a few things have changed: 1) Now instead 
of the Pr(>|t|) column being the only one to ever be expressed in 
scientific notation, the other columns (except for the new 'Tolerance' 
column) are also expressed in scientific notation, with 3 decimal places 
before the exponent value. 2) The stars that would previously indicate 
the significance of the coefficients no longer show up, and neither does 
the legend that explains the stars on the bottom. 3) I get a warning 
message at the bottom of the output saying the following:

"Warning message:
In cbind(betas, est, se, tval, 2 * pt(abs(tval), rdf, lower.tail = 
FALSE),  :
  number of rows of result is not a multiple of vector length (arg 1)"

In order to give you a 'paper trail', following are the new functions I 
defined, the url linking you to my summary2 script and  a dataset I've 
been using to test the summary function, and the regression results from 
using summary2 on this dataset:
-----------------------------------------

std.betas = function(mod)
    {
        coefs = coef(mod)
        sds = sd(mod$model[,2:length(names(mod$model))])
        sd.Y = sd(mod$model[,1])
        coefs.in.sds = coefs[2:length(coefs)]/sd.Y
        std.betas = coefs.in.sds / (1/sds)
        std.betas
    }

tolerance = function(model)  # Dependent on car package
    {
        1/vif(model)
    }

http://www.utsc.utoronto.ca/~mdubins/summary2.R
http://www.utsc.utoronto.ca/~mdubins/Tab15-1.dat

 > summary2(b)

Call:
lm(formula = Overall ~ Teach + Exam + Knowledge + Grade + Enroll)

Residuals:
     Min       1Q   Median       3Q      Max
-0.69991 -0.16245  0.01669  0.20511  0.82464

Coefficients:
            Std.Estimate   Estimate Std. Error    t value   Pr(>|t|) 
Tolerance
(Intercept)    6.620e-01 -1.195e+00  6.312e-01 -1.893e+00  6.494e-02     
0.418
Teach          1.061e-01  7.632e-01  1.329e-01  5.742e+00  8.068e-07     
0.325
Exam           3.251e-01  1.320e-01  1.628e-01  8.107e-01  4.219e-01     
0.675
Knowledge     -1.055e-01  4.890e-01  1.365e-01  3.581e+00  8.491e-04     
0.620
Grade          1.242e-01 -1.843e-01  1.655e-01 -1.114e+00  2.715e-01     
0.653
Enroll         6.620e-01  5.255e-04  3.901e-04  1.347e+00  1.848e-01     
0.418

Residual standard error: 0.3202 on 44 degrees of freedom
Multiple R-squared: 0.7554,     Adjusted R-squared: 0.7277
F-statistic: 27.18 on 5 and 44 DF,  p-value: 1.979e-12

Warning message:
In cbind(betas, est, se, tval, 2 * pt(abs(tval), rdf, lower.tail = 
FALSE),  :
  number of rows of result is not a multiple of vector length (arg 1)


--------------------------------

All I want is to have the extra Std.Estimate and Tolerance columns 
without changing anything else in the regression output.  Any help is 
appreciated!

Thanks,
Matthew Dubins



More information about the R-help mailing list