Hi all, My question is not really urgent. I can write a loop and solve the problem. But I know that I'll be in a similar situation many more times so it would be useful to find out the answer Is there a fast way to perform linear fit to all the columns of a matrix? (or in the one dimension of a multi-dimensional array.) I'm talking about many single linear fits, not about a multiple fit. I thought that a combination of apply and lm would do it but I can't make it work Thank you Kostas -- Kostas Douvis PhD Student University of Athens - Department of Geography and Climatology Academy of Athens - Research Centre for Atmospheric Physics and Climatology email: cdouvis at geol.uoa.gr tel: +30-210-8832048
On 4/9/2008 6:55 AM, Costas Douvis wrote:> Hi all, > > My question is not really urgent. I can write a loop and solve the > problem. But I know that I'll be in a similar situation many more times so > it would be useful to find out the answer > > Is there a fast way to perform linear fit to all the columns of a matrix? > (or in the one dimension of a multi-dimensional array.) I'm talking about > many single linear fits, not about a multiple fit. I thought that a > combination of apply and lm would do it but I can't make it workThe Details section of ?lm says: If response is a matrix a linear model is fitted separately by least-squares to each column of the matrix. That seems to be what you are asking for. Here is an example: lm(as.matrix(iris[,1:3]) ~ iris$Species) Call: lm(formula = as.matrix(iris[, 1:3]) ~ iris$Species) Coefficients: Sepal.Length Sepal.Width Petal.Length (Intercept) 5.006 3.428 1.462 iris$Speciesversicolor 0.930 -0.658 2.798 iris$Speciesvirginica 1.582 -0.454 4.090> Thank you > Kostas-- Chuck Cleland, Ph.D. NDRI, Inc. (www.ndri.org) 71 West 23rd Street, 8th floor New York, NY 10010 tel: (212) 845-4495 (Tu, Th) tel: (732) 512-0171 (M, W, F) fax: (917) 438-0894
If you have the same design matrix then you can specify a matrix of responses in lm(), e.g., Y <- matrix(rnorm(100*10), 100, 10) x <- rnorm(100) fit <- lm(Y ~ x) fit summary(fit) I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm ----- Original Message ----- From: "Costas Douvis" <cdouvis at geol.uoa.gr> To: <r-help at r-project.org> Sent: Wednesday, April 09, 2008 12:55 PM Subject: [R] apply lm() for all the columns of a matrix> Hi all, > > My question is not really urgent. I can write a loop and solve the > problem. But I know that I'll be in a similar situation many more > times so > it would be useful to find out the answer > > Is there a fast way to perform linear fit to all the columns of a > matrix? > (or in the one dimension of a multi-dimensional array.) I'm talking > about > many single linear fits, not about a multiple fit. I thought that a > combination of apply and lm would do it but I can't make it work > > Thank you > Kostas > > > -- > Kostas Douvis > PhD Student > University of Athens - Department of Geography and Climatology > Academy of Athens - Research Centre for Atmospheric Physics and > Climatology > email: cdouvis at geol.uoa.gr > tel: +30-210-8832048 > > ______________________________________________ > 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. >Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
Thank you all very much for replying. Of course you are absolutely right but unfortunately I really deal with the case of a 4-d matrix so what you said does not apply. I should have specified but being a new R user I hadn't realized the difference between a matrix and an array. So please tell me if you know a fast way (not using a loop) to perform a linear fit on all the vectors of the 4-th dimension of a 4-d array. Thanks again Kostas> If you have the same design matrix then you can specify a matrix of > responses in lm(), e.g., > > Y <- matrix(rnorm(100*10), 100, 10) > x <- rnorm(100) > > fit <- lm(Y ~ x) > fit > summary(fit) > > > I hope it helps. > > Best, > Dimitris > > ---- > Dimitris Rizopoulos > Biostatistical Centre > School of Public Health > Catholic University of Leuven > > Address: Kapucijnenvoer 35, Leuven, Belgium > Tel: +32/(0)16/336899 > Fax: +32/(0)16/337015 > Web: http://med.kuleuven.be/biostat/ > http://www.student.kuleuven.be/~m0390867/dimitris.htm > > > ----- Original Message ----- > From: "Costas Douvis" <cdouvis at geol.uoa.gr> > To: <r-help at r-project.org> > Sent: Wednesday, April 09, 2008 12:55 PM > Subject: [R] apply lm() for all the columns of a matrix > > >> Hi all, >> >> My question is not really urgent. I can write a loop and solve the >> problem. But I know that I'll be in a similar situation many more >> times so >> it would be useful to find out the answer >> >> Is there a fast way to perform linear fit to all the columns of a >> matrix? >> (or in the one dimension of a multi-dimensional array.) I'm talking >> about >> many single linear fits, not about a multiple fit. I thought that a >> combination of apply and lm would do it but I can't make it work >> >> Thank you >> Kostas >> >> >> -- >> Kostas Douvis >> PhD Student >> University of Athens - Department of Geography and Climatology >> Academy of Athens - Research Centre for Atmospheric Physics and >> Climatology >> email: cdouvis at geol.uoa.gr >> tel: +30-210-8832048 >> >> ______________________________________________ >> 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. >> > > > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm > >
Here's a simplified example p<-1:80+rnorm(80) dim(p)<-c(2,2,2,10) We could say that the 4-d array p consists of 2*2*2 = 8 vectors of length 10. So what I'm asking for is a fast way to perform a linear fit to all those vectors. I'm sorry if I'm causing you to have a headache with all those dimensions :) Kostas> Well, could you provide a little bit more information regarding what > you are trying to do (e.g., reproducible example). > > Best, > Dimitris > > ---- > Dimitris Rizopoulos > Biostatistical Centre > School of Public Health > Catholic University of Leuven > > Address: Kapucijnenvoer 35, Leuven, Belgium > Tel: +32/(0)16/336899 > Fax: +32/(0)16/337015 > Web: http://med.kuleuven.be/biostat/ > http://www.student.kuleuven.be/~m0390867/dimitris.htm > > > ----- Original Message ----- > From: "Costas Douvis" <cdouvis at geol.uoa.gr> > To: <r-help at r-project.org>; "Mark Leeds" <markleeds at verizon.net>; > "Dimitris Rizopoulos" <dimitris.rizopoulos at med.kuleuven.be> > Cc: "Chuck Cleland" <ccleland at optonline.net> > Sent: Wednesday, April 09, 2008 3:44 PM > Subject: Re: [R] apply lm() for all the columns of a matrix > > >> Thank you all very much for replying. Of course you are absolutely >> right >> but unfortunately I really deal with the case of a 4-d matrix so >> what you >> said does not apply. I should have specified but being a new R user >> I >> hadn't realized the difference between a matrix and an array. >> >> So please tell me if you know a fast way (not using a loop) to >> perform a >> linear fit on all the vectors of the 4-th dimension of a 4-d array. >> >> Thanks again >> Kostas >> >>> If you have the same design matrix then you can specify a matrix of >>> responses in lm(), e.g., >>> >>> Y <- matrix(rnorm(100*10), 100, 10) >>> x <- rnorm(100) >>> >>> fit <- lm(Y ~ x) >>> fit >>> summary(fit) >>> >>> >>> I hope it helps. >>> >>> Best, >>> Dimitris >>> >>> ---- >>> Dimitris Rizopoulos >>> Biostatistical Centre >>> School of Public Health >>> Catholic University of Leuven >>> >>> Address: Kapucijnenvoer 35, Leuven, Belgium >>> Tel: +32/(0)16/336899 >>> Fax: +32/(0)16/337015 >>> Web: http://med.kuleuven.be/biostat/ >>> http://www.student.kuleuven.be/~m0390867/dimitris.htm >>> >>> >>> ----- Original Message ----- >>> From: "Costas Douvis" <cdouvis at geol.uoa.gr> >>> To: <r-help at r-project.org> >>> Sent: Wednesday, April 09, 2008 12:55 PM >>> Subject: [R] apply lm() for all the columns of a matrix >>> >>> >>>> Hi all, >>>> >>>> My question is not really urgent. I can write a loop and solve the >>>> problem. But I know that I'll be in a similar situation many more >>>> times so >>>> it would be useful to find out the answer >>>> >>>> Is there a fast way to perform linear fit to all the columns of a >>>> matrix? >>>> (or in the one dimension of a multi-dimensional array.) I'm >>>> talking >>>> about >>>> many single linear fits, not about a multiple fit. I thought that >>>> a >>>> combination of apply and lm would do it but I can't make it work >>>> >>>> Thank you >>>> Kostas >>>> >>>> >>>> -- >>>> Kostas Douvis >>>> PhD Student >>>> University of Athens - Department of Geography and Climatology >>>> Academy of Athens - Research Centre for Atmospheric Physics and >>>> Climatology >>>> email: cdouvis at geol.uoa.gr >>>> tel: +30-210-8832048 >>>> >>>> ______________________________________________ >>>> 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. >>>> >>> >>> >>> Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm >>> >>> >> >> > > > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm > >-- Kostas Douvis PhD Student University of Athens - Department of Geography and Climatology Academy of Athens - Research Centre for Atmospheric Physics and Climatology email: cdouvis at geol.uoa.gr tel: +30-210-8832048