我有 365 列。在每一列中,我有 60 个值。我需要知道每列随时间的变化率(斜率或线性系数)。我创建了一个通用列作为从 1:60 开始的一系列数字来表示 60 个相应的时间间隔。我想使用通用时间戳列和 365 列数据中的每一列创建 356 个线性回归模型。
换句话说,我有很多列,我想一次创建多个线性回归模型,提取系数并将这些系数放入一个新矩阵中。
我有 365 列。在每一列中,我有 60 个值。我需要知道每列随时间的变化率(斜率或线性系数)。我创建了一个通用列作为从 1:60 开始的一系列数字来表示 60 个相应的时间间隔。我想使用通用时间戳列和 365 列数据中的每一列创建 356 个线性回归模型。
换句话说,我有很多列,我想一次创建多个线性回归模型,提取系数并将这些系数放入一个新矩阵中。
这是一种方法:
# 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
现在,松节油肥皂在哪里?
首先,从统计学上讲,这可能不是分析时间数据的最佳方法。虽然,关于您提出的方法,构建一个循环来获得这个非常简单:
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
}