[R] applying lm on an array of observations with common design matrix

Prof Brian Ripley ripley at stats.ox.ac.uk
Sun Feb 18 08:46:56 CET 2007

On Sat, 17 Feb 2007, Ranjan Maitra wrote:

> Dear list,
> I have a 4-dimensional array Y of dimension 330 x 67 x 35 x 51. I have a 
> design matrix X of dimension 330 x 4. I want to fit a linear regression 
> of each
> lm( Y[, i, j, k] ~ X). for each i, j, k.
> Can I do it in one shot without a loop?


YY <- YY
dim(YY) <- c(330, 67*35*51)
fit <- lm(YY ~ X)

> Actually, I am also interested in getting the p-values of some of the 
> coefficients -- lets say the coefficient corresponding to the second 
> column of the design matrix. Can the same be done using array-based 
> operations?

Use lapply(summary(fit), function(x) coef(x)[3,4])  (since there is a 
intercept, you want the third coefficient).

Note that this will give a vector, so set its dimension to c(67,35,51) to 
relate to the original array.

I have not BTW looked into the memory requirements here, and you might 
want to do this on slices of the array for that reason.

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-help mailing list