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]]