Russell Ivory
2008-Jul-10 16:21 UTC
[R] by() function doesn't work inside another function
I have a longitudinal data set in long format and I want to run
individual regressions. I do this by using the by() function as
follows:
temp <- by(tolerance.pp, tolerance.pp$id, function(x)
summary(lm(tolerance ~ time, data=x)))
This works fine. Coefficients for the first two subjects are shown
below.
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.9020 0.2519 7.549 0.00482 **
time 0.1190 0.1029 1.157 0.33105
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.14400 0.13336 8.578 0.00333 **
time 0.17400 0.05444 3.196 0.04948 *
Each subject has five rows of data, measured at periods 0,1,2,3,4. There
are 16 subjects so 80 total rows and the output is 16 regression models.
However, if I put this inside another function, the by() function no
longer generates regressions by subject id. It does generate 16 models;
but each model is identical which is a regression using all 80 rows at
once. The function and coefficients for the first two models are shown
below.
test <- function(X,x,y,id)
{
temp <- by(X, id, function(z) summary(lm(y~x,data=z)))
temp
}
attach(tolerance.pp)
test(tolerance.pp, time, tolerance, id)
>
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.35775 0.08952 15.167 < 2e-16 ***
x 0.13081 0.03655 3.579 0.000596 ***
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.35775 0.08952 15.167 < 2e-16 ***
x 0.13081 0.03655 3.579 0.000596 ***
Without attaching the data I've even tried
test(tolerance.pp, tolerance.pp$time, tolerance.pp$tolerance,
tolerance.pp$id)
but get the same results. Any thoughts are greatly appreciated.
Russell Ivory
Merrick Bank
South Jordan, UT
****************************************************************************This
e-mail and any files transmitted with it are confidential and are intended
solely for the use of the individual or entity to whom it is addressed. If you
are not the intended recipient or the person responsible for delivering the
e-mail to the intended recipient, be advised that you have received this e-mail
in error, and that any use, dissemination, forwarding, printing, or copying of
this e-mail is strictly prohibited. If you received this e-mail in error, please
return the e-mail to the sender at Merrick Bank and delete it from your
computer. Although Merrick Bank attempts to sweep e-mail and attachments for
viruses, it does not guarantee that either are virus-free and accepts no
liability for any damage sustained as a result of viruses.
[[alternative HTML version deleted]]
