我开始进行时间序列数据分析,并被告知要在R中使用ts()数据函数。但是,我的时间序列数据并不遵循直接趋势。
例如,在线教程说明了如果您具有月度,季度或年度趋势,则如何创建时间序列。但是,我记录的时间是0、5、11、15、20、30和50。
我想知道是否有人对如何解决此问题有任何建议?非常感谢 :)
关键问题是ts
系列是规则排列的,而您的不是,但是有很多方法可以获取规则排列的ts
类系列:
使用zoo包(可以直接表示这样的序列)或在转换为zoo使用后,将其原始表示保持为不规则间隔的时间序列as.ts
,以转换为具有许多NA的规则间隔的序列。
忽略时间,仅使用1、2、3,...的时间。在这种情况下,序列是有规律地隔开的,因此我们可以使用ts。
使用间隔中的最后一个值或平均值将数据离散化为规则间隔。在这种情况下,序列是有规律地隔开的,因此我们可以使用ts。
将样条曲线拟合到数据,并从数据中选取规则间隔的点,以给出可以用ts表示的规则间隔的序列。
如果序列具有自然的周期性,则可能需要修改序列以ts表示的方式,以在频率上反映该序列,但是由于问题没有给出任何相关信息,因此在此将其忽略。
另外,取决于精确的应用程序,可能会有具有特定于应用程序的方法的软件包可以使用。参见https://cran.r-project.org/web/views/
例如,
# create some test data
set.seed(123)
m <- matrix(rnorm(35), 7)
tt <- c(0, 5, 11, 15, 20, 30, 50)
# 1. zoo series
library(zoo)
z <- zoo(m, tt)
ts1 <- as.ts(z) # make regularly spaced ts series but with many NAs
# 2. ignore times
ts2 <- ts(m)
# 3. discretize to regularly spaced grid - z is from #1
zd <- aggregate(z, 20 * ceiling(tt/20), tail, 1)
ts3 <- as.ts(zd)
# 4. spline
Ls <- apply(m, 2, spline, x = tt) # list of splines, one per column
zs <- zoo(sapply(Ls, "[[", "y"), Ls[[1]]$x) # as single zoo object
ts4 <- unname(as.ts(zs))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句