我需要让我的预测函数在 R 中输出一个向量

I need to make my forecast function to output a vector in R

我写了下面的 r 代码来预测未来的时间。我最初将数据集分为 traintest 集,以便我可以交叉验证所使用的模型。然后我写到 forecasttrain 设置为 test 设置的长度。

# construct a time series data
n <- 50
phi <- 0.5
set.seed(1)
wn <- rnorm(n, mean=0, sd=1)
ar1 <- sqrt((wn[1])^2/(1-phi^2))
for(i in 2:n){
  ar1[i] <- ar1[i - 1] * phi + wn[i]
}
library(forecast) # load `forecast` package

train <- head(ar1, round(length(ar1) * 0.6)) # Divide the time series into `train` set
h <- length(ar1) - length(train)
test <- tail(ar1, h) # Divide the time series into `test` set
model <- auto.arima(train) # obtain optimual model
future <- forecast(test, model=model,h=h) # forecast the `test` set into 20 times ahead
future

我有什么

对象future被打印为:

#     Point Forecast   Lo 80    Hi 80     Lo 95    Hi 95
#21   4.431517e-01 -0.7445769 1.630880 -1.373322 2.259626
#22   1.942684e-01 -1.1025747 1.491112 -1.789082 2.177619
#23   8.516321e-02 -1.2316138 1.401940 -1.928673 2.099000
#24   3.733377e-02 -1.2832396 1.357907 -1.982309 2.056976
#25   1.636634e-02 -1.3049353 1.337668 -2.004390 2.037123
#26   7.174662e-03 -1.3142669 1.328616 -2.013796 2.028145
#27   3.145222e-03 -1.3183232 1.324614 -2.017866 2.024157
#28   1.378799e-03 -1.3200948 1.322852 -2.019641 2.022398
#29   6.044368e-04 -1.3208702 1.322079 -2.020417 2.021625
#30   2.649724e-04 -1.3212098 1.321740 -2.020756 2.021286
#31   1.161584e-04 -1.3213587 1.321591 -2.020905 2.021138
#32   5.092140e-05 -1.3214239 1.321526 -2.020970 2.021072
#33   2.232288e-05 -1.3214525 1.321497 -2.020999 2.021044
#34   9.785882e-06 -1.3214651 1.321485 -2.021012 2.021031
#35   4.289926e-06 -1.3214706 1.321479 -2.021017 2.021026
#36   1.880614e-06 -1.3214730 1.321477 -2.021020 2.021023
#37   8.244217e-07 -1.3214740 1.321476 -2.021021 2.021022
#38   3.614092e-07 -1.3214745 1.321475 -2.021021 2.021022
#39   1.584342e-07 -1.3214747 1.321475 -2.021021 2.021022
#40   6.945425e-08 -1.3214748 1.321475 -2.021021 2.021021

我想要的

我希望对象 future 单独作为点估计向量打印出来,没有任何间隔。

#4.431517,  1.942684, ...,6.945425

并且应该是向量

的class

这些数字存在于 future$mean 中,这是一个时间序列对象

future$mean

#Time Series:
#Start = 21 
#End = 40 
#Frequency = 1 
# [1] 0.443151689534 0.194268425844 0.085163211991 0.037333769732
# [5] 0.016366343281 0.007174662359 0.003145221817 0.001378799418
# [9] 0.000604436807 0.000264972446 0.000116158375 0.000050921400
#[13] 0.000022322876 0.000009785882 0.000004289926 0.000001880614
#[17] 0.000000824422 0.000000361409 0.000000158434 0.000000069454

要将其转换为向量,请使用 as.numeric/as.vector

as.numeric(future$mean)

如果我们检查 'future' 的结构,它是 list 个元素,mean 是一个时间序列,即

str(future)
#List of 10
#$ method   : chr "ARIMA(1,0,0) with zero mean"
#$ model    :List of 18
# ..
# $ mean     : Time-Series [1:20] from 21 to 40: 0.4432 0.1943 0.0852 0.0373 0.0164 ...

list元素可以通过常用的提取方法提取,即$[[,然后将时间序列的元素转换为vector . ts 也是一个具有某些属性的向量

我们可以转换为数字,只需串联

c(future$mean)
#[1] 0.44315168953402 0.19426842584397 0.08516321199086 0.03733376973171 0.01636634328130 0.00717466235867
#[7] 0.00314522181749 0.00137879941755 0.00060443680737 0.00026497244592 0.00011615837461 0.00005092140032
#[13] 0.00002232287615 0.00000978588170 0.00000428992573 0.00000188061365 0.00000082442167 0.00000036140920
#[19] 0.00000015843423 0.00000006945425

或者通过更改 class

class(future$mean) <- 'numeric'