【发布时间】:2020-08-25 04:07:41
【问题描述】:
这里有一个 R 编程问题。
所以我尝试运行多个滚动窗口回归并保存每个回归的 beta。在我给定的示例中,我想对前 5 个 obs 在 X1 上回归 Y。然后保存 beta(斜率系数)。然后运行下一个 5(所以第 2 行到第 6 行)并保存下一个测试版。对于不同的 X 值,我想这样做三遍。 我的数据如下所示:
Row Y X1 X2 X3
1 1 2 3 NA
2 1 3 5 NA
3 1 4 6 NA
4 2 4 6 4
5 3 3 4 8
6 4 4 6 7
7 3 5 5 3
8 5 4 6 7
我试图运行的代码是一个循环,如下:
#Rows equals the number of rows in my obs matrix.
for (j in 1:3) {
for (i in 1:(Rows-4)) {
Model<- lm(data[((i+0):(4+i)),1] ~ data[((i+0):(4+i)),j])
betas[i,j] <- coefficients(Model)[2]
}
}
问题是我的 beta 矩阵只给了我 X3 的第三列的 NA。所以我得到的是:
Row X1 X2 X3
1 coef coef NA
2 coef coef NA
3 coef coef NA
4 coef coef NA
但是,我想得到的是以下几点:
#my beta matrix looks like this
Row X1 X2 X3
1 coef coef NA
2 coef coef NA
3 coef coef NA
4 coef coef coef
换句话说,因为最后一列 (X3) 有一些初始 NA,所以即使它正在回归的窗口没有 NA,它也会为所有未来的系数值提供 NA。我尝试过使用 na.omit 命令无济于事。
有没有人可以解决如何进行这种循环回归? 已经很感激了。万事如意
【问题讨论】:
-
你是如何初始化
betas的?作为一个空的数字矩阵?另外,i+0是多余的。 -
请原谅,我不太清楚你的意思。我只是将斜率系数保存到一个新矩阵中。
-
您的代码省略了行。截至目前
betas(甚至Rows)不存在。在循环之前显示其创建线。也许betas <- matrix(...). -
beta = matrix( NA , nrow = 4 , ncol = 3) Rows = nrow(data) 这有帮助吗?
-
一个问题可能是你的内部
for循环只使用了一行,检查for (i in 1:(Rows-4)) {print(i)}。
标签: r loops regression linear-regression