使用 for 循环和滞后函数的数据格式化时间序列与神经网络

问题描述

我希望构建一个用于预测的神经网络模型。我试图让我的数据采用图像中显示的格式。我正在使用滞后函数来滞后时间序列的数据,并使用 2 个 for 循环来尝试以这种格式设置数据,但我很困惑并为此苦苦挣扎了一段时间。我如何使用 2 个 for 循环和滞后函数来为神经网络预测设置这样的数据?

格式:

enter image description here

当前代码

data <-
  structure(
    list(
      `USD/EUR` = c(
        1.373,1.386,1.3768,1.3718,1.3774,1.3672,1.3872,1.3932,1.3911,1.3838,1.4171,1.4164,1.3947,1.3675,1.3801,1.3744,1.3759,1.3743,1.3787,1.3595,1.3599,1.3624,1.3523,1.3506,1.3521
      )
    ),row.names = c(NA,-25L),class = c("tbl_df","tbl","data.frame")
  )

#Lag the data using lag function
lagData <- c(lag(data$`USD/EUR`,k = 0))
lagData

Store <- numeric(4)
for(i in data){
  for(j in 1:4){
    Store[j] = i[j]
  }
}

Store

解决方法

您实际上并不需要使用 for 循环。

在基础 R 中:

    matrix(lag(data$`USD/EUR`),nrow = 6,byrow = TRUE)
       [,1]   [,2]   [,3]   [,4]
[1,]     NA 1.3730 1.3860 1.3768
[2,] 1.3718 1.3774 1.3672 1.3872
[3,] 1.3932 1.3911 1.3838 1.4171
[4,] 1.4164 1.3947 1.3675 1.3801
[5,] 1.3744 1.3759 1.3743 1.3787
[6,] 1.3595 1.3599 1.3624 1.3523

然后重命名列等...

或者你,如果你想用 tidyverse 的方式来做。

library(dplyr)
library(tidyr)

data %>% 
  mutate(id = sort(rep(seq(1:6),4))) %>%  # Add ID column
  mutate(time = rep(c("2d","1d","today","pred"),6)) %>% 
  pivot_wider(names_from = time,values_from = `USD/EUR`)

# A tibble: 6 x 5
     id  `2d`  `1d` today  pred
  <int> <dbl> <dbl> <dbl> <dbl>
1     1  1.37  1.39  1.38  1.37
2     2  1.38  1.37  1.39  1.39
3     3  1.39  1.38  1.42  1.42
4     4  1.39  1.37  1.38  1.37
5     5  1.38  1.37  1.38  1.36
6     6  1.36  1.36  1.35  1.35

还有一个 tidy lag function。仅供参考,您提供的数据不是 4 的倍数,因此我删除了一个观察结果。

,

您可以使用 dplyr::lead

library(dplyr)

df <- data %>% 
  mutate(
    `2 days ago` = `USD/EUR`,`1 day ago` = lead(`USD/EUR`,n=1L),today = lead(`USD/EUR`,n=2L),predict = lead(`USD/EUR`,n=3L)
  ) %>% 
  drop_na()

df
# A tibble: 22 x 5
#    `USD/EUR` `2 days ago` `1 day ago` today predict
#        <dbl>        <dbl>       <dbl> <dbl>   <dbl>
#  1      1.37         1.37        1.39  1.38    1.37
#  2      1.39         1.39        1.38  1.37    1.38
#  3      1.38         1.38        1.37  1.38    1.37
#  4      1.37         1.37        1.38  1.37    1.39
#  5      1.38         1.38        1.37  1.39    1.39
#  6      1.37         1.37        1.39  1.39    1.39
#  7      1.39         1.39        1.39  1.39    1.38
#  8      1.39         1.39        1.39  1.38    1.42
#  9      1.39         1.39        1.38  1.42    1.42
# 10      1.38         1.38        1.42  1.42    1.39
# ... with 12 more rows

数字实际上并没有四舍五入,只是那样打印。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...