how to create many linear models at once and put the coefficients into a new matrix?

188 views Asked by At

I have 365 columns. In each column I have 60 values. I need to know the rate of change over time for each column (slope or linear coefficient). I created a generic column as a series of numbers from 1:60 to represent the 60 corresponding time intervals. I want to create 356 linear regression models using the generic time stamp column with each of the 365 columns of data.

In other words, I have many columns and I would like to create many linear regression models at once, extract the coefficients and put those coefficients into a new matrix.

2

There are 2 answers

1
LeoRJorge On BEST ANSWER

First of all, statistically this might not be the best possible approach to analyse temporal data. Although, regarding the approach you propose, it is very simple to build a loop to obtain this:

Coefs <- matrix(,ncol(Data),2)#Assuming your generic 1:60 column is not in the same object
for(i in 1:ncol(Data)){
Coefs[i,] <- lm(Data[,i]~GenericColumn)$coefficients
} 
0
eipi10 On

Here's a way to do it:

# Fake data
dat = data.frame(x=1:60, y1=rnorm(60), y2=rnorm(60), 
                 y3=rnorm(60))

t(sapply(names(dat)[-1], function(var){
   coef(lm(dat[,var] ~ x, data=dat))
}))

   (Intercept)            x
y1  0.10858554 -0.004235449
y2 -0.02766542  0.005364577
y3  0.20283168 -0.008160786

Now, where's that turpentine soap?