【发布时间】:2021-01-21 07:36:51
【问题描述】:
我目前正在处理分组/嵌套数据框中的多个时间序列,但我不知道如何继续。我希望这里有人可以帮助我解决这个问题。
我的数据集由 5 个分组变量 (Category) 组成,每个变量包含 10 个重复 (ID)。每个重复都包含以固定时间间隔进行的 60 次连续观察 (Time)。然后,每个观察结果都包含多个变量:Amount、Walk_1、Walk_2 和 Walk_1+2。但是,我还有其他三个变量(Amount1、Amount2、Amount3),它们包含在按区域分割的 Number 变量中。
因此,以图形方式显示它:
A { (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) { 1(1, 2, 3, 4, ... , 60); 2(1, 2, 3, 4, ... , 60); ..等等。
B { (11, 12, 13, 14, 15, 16, 17, 18, 19, 20) { 11(1, 2, 3, 4, ... , 60); 12(1, 2, 3, 4, ... , 60); ..等等。
.
.
E { (41, 42, 43, 44, 45, 46, 47, 48, 49, 50) { 41(1, 2, 3, 4, ... , 60); 42(1, 2, 3, 4, ... , 60); ..等等。
我想知道的是变量walk_1、walk_2和walk_1+2:
- 在分组变量
Category或ID内部和之间有所不同 - 显示 60 次观测的振荡/周期性趋势。
我尝试将数据集嵌套到 ID 类别中,然后使用 mutate + map 函数按组应用 acf 函数。这样,我获得了一系列 acf 值。但是,我不知道如何进行数据集的可视化和分析。
这个方法对我的目的有用吗,还是我应该使用不同的功能?
编辑:因为我被要求提供一个可重现的示例,所以这里有一些类似的数据结构和一个简化的假数据集。
dat1 = data.frame(
category = rep(x = 1:5, each=600),
ID = rep(rep(1:50,each=60)),
walk_1 = rnorm(n = 3000,mean = 10,sd = 4),
walk_2 = rnorm(n = 3000, mean = 5, sd = 5),
amount = sample.int(50, 3000, replace = TRUE))
dat1 <- dat1 %>%
group_by(ID) %>%
mutate(walk_12 = walk_1 + walk_2) %>%
nest()
dat1 <- dat1 %>%
mutate(data = map(data,
~ mutate(., Time = seq(1, 60, by = 1)))) %>%
unnest()
dat1 <- dat1 %>%
mutate(walk_1 = ifelse(Time == 1, NA, walk_1)) %>%
mutate(walk_2 = ifelse(Time == 1, NA, walk_2)) %>%
mutate(walk_12 = ifelse(Time == 1, NA, walk_12))
这是 dput(head(dat1)) 的输出:
structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L), category = c(1L,
1L, 1L, 1L, 1L, 1L), walk_1 = c(NA, 7.93428744179875, 11.6326574689602,
10.3687325793843, 6.2631358473095, 14.0134490135895), walk_2 = c(NA,
-4.03741066457775, 2.91290193315445, 8.04203547142631, 9.42608080771425,
16.2253066800552), amount = c(34L, 37L, 31L, 26L, 29L, 33L),
walk_12 = c(NA, 3.896876777221, 14.5455594021146, 18.4107680508106,
15.6892166550237, 30.2387556936447), Time = c(1, 2, 3, 4,
5, 6)), row.names = c(NA, -6L), groups = structure(list(ID = 1L,
.rows = structure(list(1:6), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = 1L, class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
@Marco 在这里,amount 是个人计数,因此同一ID 内的先前测量不应独立。在Amount1 + Amount2 + Amount3 = amount 的意义上,Amount1、Amount2 和 Amount3 是相关的。
我需要做的是了解walk_1、walk_2 和(因此)walk_1+2 是否具有周期性,如果是这种情况,这种周期性在不同ID 内部或之间是否相等不同的Category。另外,我没有每个ID 中任何第一个时间点的数据,所以要分析的时间序列是 59 个点。
我希望这能澄清我的问题。感谢您的帮助!
【问题讨论】:
-
请遵循here 的指导方针,了解如何提出一个好的问题并给出一个可重复的例子——尤其是在你的答案中给出
dput( head(dat))的输出。 -
你在说什么周期?每周,每月...?因为你说,你有时间数据。或者只是一些任意的周期性?比如 25.8 分钟?
-
@marco 我的时间序列从 00:00:00 开始,一直到 09:50:00。它是一个 POSIXct 对象,每隔 10 分钟增加一次。我需要探索这个时间序列,看看是否有周期性,我不知道峰值之间的时间间隔(如果有的话)
标签: r time-series tidyverse