如何解决使用 for 循环和滞后函数的数据格式化时间序列与神经网络
我希望构建一个用于预测的神经网络模型。我试图让我的数据采用图像中显示的格式。我正在使用滞后函数来滞后时间序列的数据,并使用 2 个 for 循环来尝试以这种格式设置数据,但我很困惑并为此苦苦挣扎了一段时间。我如何使用 2 个 for 循环和滞后函数来为神经网络预测设置这样的数据?
当前代码:
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
数字实际上并没有四舍五入,只是那样打印。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。