forecast.lm 预测总是提前相同的时间段
forecast.lm predicts always the same time period ahead
我想预测一个线性模型,我用ols估计的。但是,它总是预测前面相同的时间段,与我的数据集长度相同。
这是我所做的。
data <- ts(matrix(rnorm(144, mean=0, sd=1), ncol=6), start=c(2007,1), frequency=12)
我计算了两个因素。
factors <- ts(t(t(eigen(cor(data))$vectors[,1:2] %*%
sqrt(diag(eigen(cor(data))$values[1:2]))) %*%
t(scale(data))), start=c(2007,1), frequency=12)
colnames(factors) <- c("f1", "f2")
我结合了数据集的因素。
favar <- ts.union(factors, data)
colnames(favar) <- c(colnames(factors), "a", "b", "c", "d", "e", "f")
然后,我估计了 "a" 的线性模型。
require(forecast)
model <- tslm(a ~ f1 + f2 + b + c + d + e + f + 0, data=ts(sapply(favar, function(x)
lag(x, h=1))[-1,], start=c(2007, 2), frequency=12))
如果我现在预测我的模型,那么未来时间段的长度与我的数据集相同。
forecast(model, newdata=favar, h=6, ts=T)
无论我为 h
设置什么值,结果始终是提前 24 个月的预测。我认为,出现问题是因为我必须提供 newdata
,为此我使用了我的原始数据集 favar
。但是,如果我尝试在没有它的情况下预测模型,我会收到以下错误:
Error in eval(expr, envir, enclos) : object 'f1' not found
我已经尝试使用 predict.lm
进行预测,并且仅使用 lm
而不是 tslm
来估计模型。无论如何,我面临同样的问题:预测周期总是与提供的 newdata
的长度相同。
更新:我刚刚注意到不仅我的预测长度与我的数据集相同,而且值也相同。基本上,我只有一份原始数据。
感谢您的帮助。
forecast(model, newdata=favar, h=6, ts=T)
呼叫 forecast.lm
。
来自 forecast.lm
的文档:
newdata
An optional data frame in which to look for variables with which to
predict. If omitted, it is assumed that the only variables are trend
and season, and h forecasts are produced.
h
Number of periods for forecasting. Ignored if newdata present.
因此是错误的原因
> forecast(model,h=6,ts=T)
Error in eval(expr, envir, enclos) : object 'f1' not found
>
是唯一已知的变量是trend
和season
,而不是f1
、f2
。等等
所以 newdata
不能丢失,因此 h
被忽略。
恐怕要从 forecast
方法得到长度为 6 的预测,您需要一些长度为 6 的 newdata
。然后由系数 coef(model)
确定的线性函数是从这6点评价。
当然可以问系数
> coef(model)
f1 f2 b c d e f
2.008211 1.344910 -0.532548 -1.375166 0.378199 2.169784 -1.971422
并在没有 forecast
方法的情况下使用它们。
> myData <- X[1:6,-3] + matrix(sample(-100:100,6*7,,replace=TRUE)/100,6,7)
> myData
f1 f2 b c d e f
[1,] 1.3901181 0.5794323 0.2638713 1.7911077 -1.9140976 -0.1632654 1.2130388
[2,] -0.5106604 1.0037957 -0.5357955 1.1981059 -0.3636334 -1.2746126 -0.1845794
[3,] 2.0191347 -0.8724608 -1.7707524 0.2779736 1.2814462 -0.4834006 0.1504435
[4,] 1.4574348 0.2173202 -1.1881501 0.7911197 -0.7332919 -1.0103667 -0.8201907
[5,] -1.8129340 0.2294362 0.7379416 -1.3893631 0.5011054 0.4321159 0.4026663
[6,] 1.9659584 1.8596798 0.7286796 1.9930237 0.6643413 -0.2609216 -0.2635644
> fcst <- myData %*% coef(model)
> fcst
[,1]
[1,] -2.502231
[2,] -3.577032
[3,] 2.581397
[4,] 1.911273
[5,] -1.481277
[6,] 3.525071
> forecast(model,myData,ts=T)
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
Jan 2009 -2.502231 -2.502231 -2.502231 -2.502231 -2.502231
Feb 2009 -3.577032 -3.577032 -3.577032 -3.577032 -3.577032
Mar 2009 2.581397 2.581397 2.581397 2.581397 2.581397
Apr 2009 1.911273 1.911273 1.911273 1.911273 1.911273
May 2009 -1.481277 -1.481277 -1.481277 -1.481277 -1.481277
Jun 2009 3.525071 3.525071 3.525071 3.525071 3.525071
>
函数名forecast
有点误导。 forecast
仅计算 a
的预测值,如果预测值为 f1
、f2
、b
、c
、d
, e
和 f
给出为 newdata
。
我想预测一个线性模型,我用ols估计的。但是,它总是预测前面相同的时间段,与我的数据集长度相同。
这是我所做的。
data <- ts(matrix(rnorm(144, mean=0, sd=1), ncol=6), start=c(2007,1), frequency=12)
我计算了两个因素。
factors <- ts(t(t(eigen(cor(data))$vectors[,1:2] %*%
sqrt(diag(eigen(cor(data))$values[1:2]))) %*%
t(scale(data))), start=c(2007,1), frequency=12)
colnames(factors) <- c("f1", "f2")
我结合了数据集的因素。
favar <- ts.union(factors, data)
colnames(favar) <- c(colnames(factors), "a", "b", "c", "d", "e", "f")
然后,我估计了 "a" 的线性模型。
require(forecast)
model <- tslm(a ~ f1 + f2 + b + c + d + e + f + 0, data=ts(sapply(favar, function(x)
lag(x, h=1))[-1,], start=c(2007, 2), frequency=12))
如果我现在预测我的模型,那么未来时间段的长度与我的数据集相同。
forecast(model, newdata=favar, h=6, ts=T)
无论我为 h
设置什么值,结果始终是提前 24 个月的预测。我认为,出现问题是因为我必须提供 newdata
,为此我使用了我的原始数据集 favar
。但是,如果我尝试在没有它的情况下预测模型,我会收到以下错误:
Error in eval(expr, envir, enclos) : object 'f1' not found
我已经尝试使用 predict.lm
进行预测,并且仅使用 lm
而不是 tslm
来估计模型。无论如何,我面临同样的问题:预测周期总是与提供的 newdata
的长度相同。
更新:我刚刚注意到不仅我的预测长度与我的数据集相同,而且值也相同。基本上,我只有一份原始数据。
感谢您的帮助。
forecast(model, newdata=favar, h=6, ts=T)
呼叫 forecast.lm
。
来自 forecast.lm
的文档:
newdata
An optional data frame in which to look for variables with which to predict. If omitted, it is assumed that the only variables are trend and season, and h forecasts are produced.
h
Number of periods for forecasting. Ignored if newdata present.
因此是错误的原因
> forecast(model,h=6,ts=T)
Error in eval(expr, envir, enclos) : object 'f1' not found
>
是唯一已知的变量是trend
和season
,而不是f1
、f2
。等等
所以 newdata
不能丢失,因此 h
被忽略。
恐怕要从 forecast
方法得到长度为 6 的预测,您需要一些长度为 6 的 newdata
。然后由系数 coef(model)
确定的线性函数是从这6点评价。
当然可以问系数
> coef(model)
f1 f2 b c d e f
2.008211 1.344910 -0.532548 -1.375166 0.378199 2.169784 -1.971422
并在没有 forecast
方法的情况下使用它们。
> myData <- X[1:6,-3] + matrix(sample(-100:100,6*7,,replace=TRUE)/100,6,7)
> myData
f1 f2 b c d e f
[1,] 1.3901181 0.5794323 0.2638713 1.7911077 -1.9140976 -0.1632654 1.2130388
[2,] -0.5106604 1.0037957 -0.5357955 1.1981059 -0.3636334 -1.2746126 -0.1845794
[3,] 2.0191347 -0.8724608 -1.7707524 0.2779736 1.2814462 -0.4834006 0.1504435
[4,] 1.4574348 0.2173202 -1.1881501 0.7911197 -0.7332919 -1.0103667 -0.8201907
[5,] -1.8129340 0.2294362 0.7379416 -1.3893631 0.5011054 0.4321159 0.4026663
[6,] 1.9659584 1.8596798 0.7286796 1.9930237 0.6643413 -0.2609216 -0.2635644
> fcst <- myData %*% coef(model)
> fcst
[,1]
[1,] -2.502231
[2,] -3.577032
[3,] 2.581397
[4,] 1.911273
[5,] -1.481277
[6,] 3.525071
> forecast(model,myData,ts=T)
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
Jan 2009 -2.502231 -2.502231 -2.502231 -2.502231 -2.502231
Feb 2009 -3.577032 -3.577032 -3.577032 -3.577032 -3.577032
Mar 2009 2.581397 2.581397 2.581397 2.581397 2.581397
Apr 2009 1.911273 1.911273 1.911273 1.911273 1.911273
May 2009 -1.481277 -1.481277 -1.481277 -1.481277 -1.481277
Jun 2009 3.525071 3.525071 3.525071 3.525071 3.525071
>
函数名forecast
有点误导。 forecast
仅计算 a
的预测值,如果预测值为 f1
、f2
、b
、c
、d
, e
和 f
给出为 newdata
。