[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