[R] Other ways to lm() regression? (non-loop?)

Gerrit Eichner Gerrit.Eichner at math.uni-giessen.de
Mon Dec 26 16:56:36 CET 2011


Hello, iliketurtles (?),

for whatever strange reasons you want to regress all y-columns on all 
x-columns, maybe

reg <- apply( x, 2, function( xx) lm( y ~ xx))
do.call( "cbind", lapply( reg, coef))

does what you want. (To understand what the code above does, check the 
documentation for lm(): "If response is a matrix a linear model is fitted 
separately by least-squares to each column of the matrix.")

Hth  --  Gerrit


On Mon, 26 Dec 2011, iliketurtles wrote:

> Hi, I'm quite new to R (1 month full time use so far). I have to run loop
> regressions VERY often in my work, so I would appreciate some new
> methodology that I'm not considering.
>
> #---------------------------------------------------------------------------------------------
> y<-matrix(rnorm(100),ncol=10,nrow=10)
> x<-matrix(rnorm(50),ncol=5,nrow=10)
>
> #Suppose I want to run the specification y=A+Bx+error, for each and every
> y[,n] onto each and every x[,n].
> #So with:
> ncol(y);ncol(x)
> #I should end up with 10*5=50 regressions in total.
>
> #I know how to do this fine:
> MISC1<-0
> for(i in 1:ncol(y)){
> for(j in 1:ncol(x)){
> reg<-lm(y[,i]~x[,j])
> MISC1<-cbind(MISC1,coef(reg)) #for coefficients
> }}
> coef<-matrix(MISC1[,-1],ncol=50)
>
> coef[,1];coef(lm(y[,1]~x[,1])) #test passed
> ncol(coef)                                #as desired, 50 regressions.
> #---------------------------------------------------------------------------------------------
>
> Now for my question: Is there easier or better methods of doing this? I know
> of a lapply method, but the only lapply way I know of for lm(..) is
> basically doing a lapply inside of a lapply, meaning it's exactly the same
> as the double loop above... I'm looking to escape from loops.
>
> Also, if any of you could share your top R tips that you've learned over the
> years, I'd really appreciate it. Tiny things like learning that array() and
> matrix() can have a 3rd dimension, learning of strsplit, etc.. have helped
> me immeasurably. (Not that I'm also googling for this stuff! I'm doing R 14
> hours a day!).
>
> Thanks.
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Other-ways-to-lm-regression-non-loop-tp4234487p4234487.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list