Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 单期预测的滚动回归_R - Fatal编程技术网

R 单期预测的滚动回归

R 单期预测的滚动回归,r,R,我试图创建一系列的单周期预测。我在一组滚动原点上训练我的模型,即宏[1:13]预测宏[14:14]宏[1:12]预测宏[13:13],一直到宏[1:8]为止 下面的代码让我找到了我的解决方案,但我想知道是否有一个更优雅的解决方案和其他考虑事项。谢谢 Macro <- read.csv("C:/Macro.csv") View(Macro) Y <-Macro[1:13,2] X <-Macro[1:13,3] S1 <-Macro[1:13,4] S2 <-Mac

我试图创建一系列的单周期预测。我在一组滚动原点上训练我的模型,即宏[1:13]预测宏[14:14]宏[1:12]预测宏[13:13],一直到宏[1:8]为止

下面的代码让我找到了我的解决方案,但我想知道是否有一个更优雅的解决方案和其他考虑事项。谢谢

Macro <- read.csv("C:/Macro.csv")
View(Macro)

Y <-Macro[1:13,2]
X <-Macro[1:13,3]
S1 <-Macro[1:13,4]
S2 <-Macro[1:13,5]
S3 <-Macro[1:13,6]

fit <- lm(Y ~ X + S1 + S2 + S3)

predict(fit, Macro[14:14,3:6])



Y <-Macro[1:12,2]
X <-Macro[1:12,3]
S1 <-Macro[1:12,4]
S2 <-Macro[1:12,5]
S3 <-Macro[1:12,6]

fit <- lm(Y ~ X + S1 + S2 + S3)

predict(fit, Macro[13:13,3:6])



Y <-Macro[1:11,2]
X <-Macro[1:11,3]
S1 <-Macro[1:11,4]
S2 <-Macro[1:11,5]
S3 <-Macro[1:11,6]

fit <- lm(Y ~ X + S1 + S2 + S3)

predict(fit, Macro[12:12,3:6])




Y <-Macro[1:10,2]
X <-Macro[1:10,3]
S1 <-Macro[1:10,4]
S2 <-Macro[1:10,5]
S3 <-Macro[1:10,6]

fit <- lm(Y ~ X + S1 + S2 + S3)

predict(fit, Macro[11:11,3:6])




Y <-Macro[1:9,2]
X <-Macro[1:9,3]
S1 <-Macro[1:9,4]
S2 <-Macro[1:9,5]
S3 <-Macro[1:9,6]

fit <- lm(Y ~ X + S1 + S2 + S3)

predict(fit, Macro[10:10,3:6])



Y <-Macro[1:8,2]
X <-Macro[1:8,3]
S1 <-Macro[1:8,4]
S2 <-Macro[1:8,5]
S3 <-Macro[1:8,6]

fit <- lm(Y ~ X + S1 + S2 + S3)

predict(fit, Macro[9:9,3:6])
宏是一种更紧凑的方式(编辑以修复语法错误)。

myfun您可以使用库
caret
,该库能够使用滚动窗口(使用选项
timeslice
)训练多个时间序列模型。据我所知,您希望有一个在每次+1时扩展的训练窗口,并仅预测下一次观察(请参阅控制参数,有关其他选项的说明,请参阅)。因此,您只需将此处替换为data.Frame的名称和公式中的变量:

library(caret)
library(ggplot2)
mycontrol <- trainControl(method = "timeslice",
                              initialWindow = 8,
                              horizon = 1,
                              fixedWindow = FALSE, 
                          savePredictions = TRUE)
myfit <- train(unemploy ~ pce + pop + psavert,
                    data = head(economics, 15),
                    method = "lm",
                    trControl = mycontrol)
print(myfit$pred)
####       pred  obs rowIndex parameter  Resample
#### 1 2783.092 2877        9      none Training1
#### 2 2943.586 2709       10      none Training2
#### 3 2771.019 2740       11      none Training3
#### 4 2722.083 2938       12      none Training4
#### 5 2820.074 2883       13      none Training5
#### ...
库(插入符号)
图书馆(GG2)

mycontrol这是时间序列数据。你建议用什么来代替?谢谢。请参阅上面@agenis的答案,并在这里查看可供选择的型号。谢谢-我使用了下面的代码,并在上面编辑了一个“错误的维数错误”宏。至于哪种模式可能更合适:这实际上取决于正确性的重要性。时间序列是一个大课题;太大了,我无法在这个空间发表评论,尤其是没有数据。嗨@ZJAY,我能问你为什么要做这样一个预测过程吗?因为我处理的数据量非常小,预测一个时期的未来是我验证模型的方法。你能预见到什么问题吗?谢谢。好的,我只是想知道它是否真的用于交叉验证。在这种情况下,
caret
是正确的工具。同意:@agenis应该在这里打绿色勾。
library(caret)
library(ggplot2)
mycontrol <- trainControl(method = "timeslice",
                              initialWindow = 8,
                              horizon = 1,
                              fixedWindow = FALSE, 
                          savePredictions = TRUE)
myfit <- train(unemploy ~ pce + pop + psavert,
                    data = head(economics, 15),
                    method = "lm",
                    trControl = mycontrol)
print(myfit$pred)
####       pred  obs rowIndex parameter  Resample
#### 1 2783.092 2877        9      none Training1
#### 2 2943.586 2709       10      none Training2
#### 3 2771.019 2740       11      none Training3
#### 4 2722.083 2938       12      none Training4
#### 5 2820.074 2883       13      none Training5
#### ...