在R中,我有一个(x,y)点的数据集,不断通过模拟更新(值附加到数据集的末尾)。
我想计算仅使用最后10个列出的数据点的数据创建的线的斜率(通过线性模型)。
这里的混淆源于数据正在发生变化的事实,因此我怀疑可能需要一个循环来迭代数据点的索引。
在R中,人们通常会做类似的事情
linreg <- lm(y ~ x, data = d) # set up linear model
summary.linreg <- summary(linreg) # output summary of model
beta1 <- coef(summary.linreg)[2] # extract slope
我的案例中需要的更改是linreg,具体而言
linreg <- lm(y[?] ~ x[?], data = d) # subset response and predictor
对于10 x-y点的非变化数据集,只需要[?] = [1:10],问题就解决了。在我的情况下,我处于停滞状态,以便有效地进行。
有什么想法吗?
不,不要在公式内部进行子集化。子集data.frame。在循环内部,每次数据库更新后,执行以下操作:
linreg <- lm(y ~ x, data = tail(d, 10))
如果要循环遍历data.frame行,请执行以下操作:
linreg <- lm(y ~ x, data = d[i:(i+9),])
如果您的data.frame很大并且您只需要斜率,则应使用更低级别的函数lm.fit
以获得更好的性能。可能还有包提供滚动回归功能的包。