[R] Using lm with a matrix?

Charilaos Skiadas cskiadas at gmail.com
Sat Jun 7 15:28:39 CEST 2008


On Jun 7, 2008, at 8:13 AM, jonboym wrote:

>
> I'm trying to do a linear regression between the columns of  
> matrices.  In
> example below I want to regress column 1 of matrix xdat with  
> column1 of ydat
> and do a separate regression between the column 2s of each matrix.   
> But the
> output I get seems to give correct slopes but incorrect intercepts and
> another set of slopes with value NA.  How do I do this correctly?   
> I'm after
> the slope and intercept of each columns regression
>
>> xdat <- matrix(1:6,3,2)
>> xdat
>      [,1] [,2]
> [1,]    1    4
> [2,]    2    5
> [3,]    3    6
>> ydat <- xdat
>> ydat[,1] <- xdat[,1]*3 +2
>> ydat
>      [,1] [,2]
> [1,]    5    4
> [2,]    8    5
> [3,]   11    6
>> ydat[,2] <- xdat[,2]*4 - 3
>> yadt
> Error: object "yadt" not found
>> ydat
>      [,1] [,2]
> [1,]    5   13
> [2,]    8   17
> [3,]   11   21
>> lrg <- lm(y~x)
> Error in eval(expr, envir, enclos) : object "y" not found
>> lrg <- lm(ydat~xdat)
>> lrg
>
> Call:
> lm(formula = ydat ~ xdat)
>
> Coefficients:
>              [,1]  [,2]
> (Intercept)   2     9
> xdat1         3     4
> xdat2        NA    NA

Try this:

lapply( 1:2, function(i) lm( y~x, data=list(x=xdat[,i], y=ydat[,i]) ) )

Haris Skiadas
Department of Mathematics and Computer Science
Hanover College



More information about the R-help mailing list