R 谐波预测失败 - 新数据结构
R Harmonic Prediction Failing - newdata structure
我正在使用这样创建的调和回归来预测时间序列:
(使用的软件包:tseries、forecast、TSA、plyr)
airp <- AirPassengers
TIME <- 1:length(airp)
SIN <- COS <- matrix(nrow = length(TIME), ncol = 6,0)
for (i in 1:6){
SIN[,i] <- sin(2*pi*i*TIME/12)
COS[,i] <- cos(2*pi*i*TIME/12)
}
SIN <- SIN[,-6]
decomp.seasonal <- decompose(airp)$seasonal
seasonalfit <- lm(airp ~ SIN + COS)
配件效果很好。预测的时候出现问题
TIME.NEW <- seq(length(TIME)+1, length(TIME)+12, by=1)
SINNEW <- COSNEW <- matrix(nrow=length(TIME.NEW), ncol = 6, 0)
for (i in 1:6) {
SINNEW[,i] <- sin(2*pi*i*TIME.NEW/12)
COSNEW[,i] <- cos(2*pi*i*TIME.NEW/12)
}
SINNEW <- SINNEW[,-6]
prediction.harmonic.dataframe <- data.frame(TIME = TIME.NEW, SIN = SINNEW, COS = COSNEW)
seasonal.predictions <- predict(seasonalfit, newdata = prediction.harmonic.dataframe)
这会导致警告:
Warning message:
'newdata' had 12 rows but variables found have 144 rows
我翻了一下,发现名字是SIN.1
、SIN.2
等,而不是SIN1
和SIN2
...所以我手动更改了那些它仍然没有用。我还手动删除了 SIN.6
,因为出于某种原因,它仍然存在。
帮忙?
编辑:我也看过类似的帖子,但这些问题的答案并没有解决我的问题。
在用不在 data.frame 内的变量(尤其是矩阵)拟合 lm
模型后,尝试用 data.frame 进行预测并不好玩。如果您始终根据 data.frame.
中的数据拟合模型会更好
例如,如果你这样做了
seasonalfit <- lm(airp ~ ., data.frame(airp=airp,SIN=SIN,COS=COS))
那么你的预测就可以了。
或者您可以尝试将矩阵塞入 data.frame 中,但这通常不是一个好主意。你会做
prediction.harmonic.dataframe <- data.frame(TIME = TIME.NEW,
SIN = I(SINNEW), COS = I(COSNEW))
I()
(或 AsIs 函数)会将它们保留为矩阵。
我正在使用这样创建的调和回归来预测时间序列:
(使用的软件包:tseries、forecast、TSA、plyr)
airp <- AirPassengers
TIME <- 1:length(airp)
SIN <- COS <- matrix(nrow = length(TIME), ncol = 6,0)
for (i in 1:6){
SIN[,i] <- sin(2*pi*i*TIME/12)
COS[,i] <- cos(2*pi*i*TIME/12)
}
SIN <- SIN[,-6]
decomp.seasonal <- decompose(airp)$seasonal
seasonalfit <- lm(airp ~ SIN + COS)
配件效果很好。预测的时候出现问题
TIME.NEW <- seq(length(TIME)+1, length(TIME)+12, by=1)
SINNEW <- COSNEW <- matrix(nrow=length(TIME.NEW), ncol = 6, 0)
for (i in 1:6) {
SINNEW[,i] <- sin(2*pi*i*TIME.NEW/12)
COSNEW[,i] <- cos(2*pi*i*TIME.NEW/12)
}
SINNEW <- SINNEW[,-6]
prediction.harmonic.dataframe <- data.frame(TIME = TIME.NEW, SIN = SINNEW, COS = COSNEW)
seasonal.predictions <- predict(seasonalfit, newdata = prediction.harmonic.dataframe)
这会导致警告:
Warning message:
'newdata' had 12 rows but variables found have 144 rows
我翻了一下,发现名字是SIN.1
、SIN.2
等,而不是SIN1
和SIN2
...所以我手动更改了那些它仍然没有用。我还手动删除了 SIN.6
,因为出于某种原因,它仍然存在。
帮忙?
编辑:我也看过类似的帖子,但这些问题的答案并没有解决我的问题。
在用不在 data.frame 内的变量(尤其是矩阵)拟合 lm
模型后,尝试用 data.frame 进行预测并不好玩。如果您始终根据 data.frame.
例如,如果你这样做了
seasonalfit <- lm(airp ~ ., data.frame(airp=airp,SIN=SIN,COS=COS))
那么你的预测就可以了。
或者您可以尝试将矩阵塞入 data.frame 中,但这通常不是一个好主意。你会做
prediction.harmonic.dataframe <- data.frame(TIME = TIME.NEW,
SIN = I(SINNEW), COS = I(COSNEW))
I()
(或 AsIs 函数)会将它们保留为矩阵。