创建 OLS Beta 参数估计值的滚动平均值
Creating a Rolling Average of OLS Beta parameter estimates
我正在尝试根据单个数据集创建 OLS Beta 参数估计值的滚动平均值的时间序列图。我需要使用 OLS 对数据的第 1-36 行进行回归,找到 Beta 参数估计值,然后对第 2-37 行再次执行此操作,依此类推。完成后,我需要在图表中绘制这些点。我找不到一种方法来自动执行为每个数据部分查找 OLS Beta 估计值的过程。有人有什么想法吗?
谢谢!
这是一个简单的示例,但如果我看到了您的数据示例,我或许可以澄清一下?
假设您有一个 1000 行的框架 df
,结果 y
和预测变量 x
,并且您希望每 36 行进行一次回归的截距和斜率滑动 window(第 1-36、2-37、3-38 行等)。首先,运行 964个回归模型并保存系数。
coefs = do.call(rbind, lapply(36:nrow(df),\(i) lm(y~x,data=df[(i-36):i])$coef))
将它们添加到 data.table
df[36:nrow(df),c("intercept","beta"):=list(coefs[,1], coefs[,2])]
输出:
x y intercept beta
1: -0.56047565 -0.99579872 NA NA
2: -0.23017749 -1.03995504 NA NA
3: 1.55870831 -0.01798024 NA NA
4: 0.07050839 -0.13217513 NA NA
5: 0.12928774 -2.54934277 NA NA
---
996: -0.08997520 0.07664366 0.06368493 0.16388413
997: 1.07051604 0.25516476 0.11283476 0.20039460
998: -1.35110039 0.27744682 0.06146300 0.08411488
999: -0.52261670 0.53685602 0.08775808 0.08424470
1000: -0.24919068 -0.46048557 0.03574618 0.07458988
输入:
library(data.table)
set.seed(123)
df = data.table(x=rnorm(1000), y=rnorm(1000))
我正在尝试根据单个数据集创建 OLS Beta 参数估计值的滚动平均值的时间序列图。我需要使用 OLS 对数据的第 1-36 行进行回归,找到 Beta 参数估计值,然后对第 2-37 行再次执行此操作,依此类推。完成后,我需要在图表中绘制这些点。我找不到一种方法来自动执行为每个数据部分查找 OLS Beta 估计值的过程。有人有什么想法吗?
谢谢!
这是一个简单的示例,但如果我看到了您的数据示例,我或许可以澄清一下?
假设您有一个 1000 行的框架 df
,结果 y
和预测变量 x
,并且您希望每 36 行进行一次回归的截距和斜率滑动 window(第 1-36、2-37、3-38 行等)。首先,运行 964个回归模型并保存系数。
coefs = do.call(rbind, lapply(36:nrow(df),\(i) lm(y~x,data=df[(i-36):i])$coef))
将它们添加到 data.table
df[36:nrow(df),c("intercept","beta"):=list(coefs[,1], coefs[,2])]
输出:
x y intercept beta
1: -0.56047565 -0.99579872 NA NA
2: -0.23017749 -1.03995504 NA NA
3: 1.55870831 -0.01798024 NA NA
4: 0.07050839 -0.13217513 NA NA
5: 0.12928774 -2.54934277 NA NA
---
996: -0.08997520 0.07664366 0.06368493 0.16388413
997: 1.07051604 0.25516476 0.11283476 0.20039460
998: -1.35110039 0.27744682 0.06146300 0.08411488
999: -0.52261670 0.53685602 0.08775808 0.08424470
1000: -0.24919068 -0.46048557 0.03574618 0.07458988
输入:
library(data.table)
set.seed(123)
df = data.table(x=rnorm(1000), y=rnorm(1000))