【发布时间】:2016-02-22 04:05:06
【问题描述】:
我有一个类似于以下的数据框,共有 500 列:
Probes <- data.frame(Days=seq(0.01, 4.91, 0.01), B1=5:495,B2=-100:390, B3=10:500,B4=-200:290)
我想计算一个滚动窗口线性回归,其中我的窗口大小为 12 个数据点,每个顺序回归由 6 个数据点分隔。对于每个回归,“天数”始终是模型的 x 分量,y 将是其他每一列(B1,然后是 B2、B3 等)。然后,我想将系数保存为具有现有列标题(B1、B2 等)的数据框。
我认为我的代码很接近,但不能正常工作。我使用了动物园图书馆的 rollapply。
slopedata<-rollapply(zoo(Probes), width=12, function(Probes) {
coef(lm(formula=y~Probes$Days, data = Probes))[2]
}, by = 6, by.column=TRUE, align="right")
如果可能,我还希望将“xmins”保存到向量中以添加到数据框中。这意味着每个回归中使用的最小 x 值(基本上它是“天”列中的每 6 个数字。) 感谢您的帮助。
【问题讨论】:
-
如果我正确理解了您的问题,您将需要在两个方向上“循环”。
zoo中的rollapply将为您提供窗口方向(向下移动行)。但是,如果您要进行多个y回归,您还需要遍历每一种可能性(每一列都是另一个回归) -
好的,谢谢。你是说除了 rollapply 函数之外我还需要循环它吗?我不太确定放在一起会是什么样子。
-
你也认为 plyr 的 colwise 函数可以解决这个问题吗?
-
这取决于你到底想要什么。你想要回归 y1 vs x, y2 vs x, y3 vs x,...等。通过他们自己。或者除了滚动窗口 y1 与 x(仅前 12 即 1-12)、y1 与 x(仅 18-30)、...等
-
我想要第二个....除了滚动窗口之外的列回归。几乎你写的除了滚动窗口每 6 个单元格移动一次,像这样:Y1[1:12]~x、Y1[6:18]~x、Y1[12:24] 等等。所以我会基本上最终得到一个矩阵,其值是我最初拥有的值的 1/6。将为此制作一个示例矩阵,以便清楚。