在 R 中执行时间序列分析和预测

Jesse John 2023年1月30日 2022年5月18日
  1. 在 R 中使用 ts() 函数执行时间序列分析
  2. 在 R 中使用 aggregate() 函数执行时间序列分析
  3. 在 R 中使用 decompose()stl() 函数执行时间序列分析
  4. 在 R 中执行时间序列分析的其他函数
  5. 在 R 中使用 predict() 函数执行时间序列预测
  6. 结论
在 R 中执行时间序列分析和预测

本文介绍了 base R 中可用的函数来分析时间序列并根据该数据进行预测。

在 R 中使用 ts() 函数执行时间序列分析

第一步是创建一个时间序列对象以在 R 中进行时间序列分析。

假设我们有向量、矩阵或数据框中的数据。我们需要使用 ts() 函数来创建时间序列对象。只需要数据,而不是与之关联的日期或时间。

日期/时间信息通常使用 startfrequency 参数提供。

frequency 指定单位期间有多少个观测值。这个参数确定了那个时期的周期性变化。

示例代码:

# CREATE DATA FOR A TIME SERIES.
# A vector of a sequence of integers for the TREND.
set.seed(9797)
s_1 = seq(221:256)

# A cyclic vector for SEASONAL variations.
s_2 = cos(seq(from=1/12*pi, to=6*pi, by=(6*pi/36)))*5

# Random numbers for errors (white noise).
set.seed(65)
s_3 = rnorm(36)

# The data vector.
s = s_1 + s_2 + s_3

# The time series object is created.
my_t = ts(s, start = c(2019,1), frequency = 12)

# Plot the time series.
plot(my_t, ylab = "Values")

输出:

时间序列

plot.ts() 函数提供了更多特定于时间序列的选项。这对于多个时间序列特别有用。

ts() 函数创建的时间序列对象具有便于进一步分析的属性。

例子:

str(my_t)

输出:

Time-Series [1:36] from 2019 to 2022: 4.63 4.58 4.57 1.26 2.29 ...

在 R 中使用 aggregate() 函数执行时间序列分析

如果我们有多个时间单位的数据,我们可以使用 aggregate() 函数聚合每个单位的数据以消除季节性变化。我们将在每个单位时间内得到一个观察结果。

例子:

plot(aggregate(my_t), type="p", pch=20, cex=3, ylab="Aggregate per time unit")

输出:

聚合图

为了分离和研究季节性变化,我们可以使用 cycle() 函数在所有时间单位(例如年)中组合相应的子单位(例如月)。例如,我们可以将时间序列箱线图区分为其季节性分量。

在 R 中使用 decompose()stl() 函数执行时间序列分析

通常,时间序列具有趋势、季节变化和随机变化。我们可以使用 decompose() 函数将数据统计分解为这三个组成部分。

此函数使用移动平均线。根据数据和我们的理论,我们可以指定加法或乘法分解。

例子:

plot(decompose(my_t))

输出:

时间序列的分解

如果我们认为数据是可乘的,我们可以在 decompose() 中使用 type="multiplicative" 参数。

另一个函数 stl() 使用不同的平滑技术 loess 来隔离组件。

代码 plot(stl(ts_object_name, s.window="periodic")) 将输出由这种分解产生的图。

在 R 中执行时间序列分析的其他函数

以下是我们可以用来在 R 中进行时间序列分析的其他函数。

acf()pacf()ccf() 函数

我们可以使用 acf() 函数来估计二阶平稳时间序列模型的观测值之间的自相关或自协方差。

在许多情况下,这种自相关存在于时间序列的随机分量中,该分量在去除趋势和季节性分量后仍然存在。

我们可以从向量 acf(函数返回的列表元素)中获得特定滞后的自相关。默认情况下,此函数会创建一个相关图。

pacf()ccf() 函数是类似的。他们分别估计偏自相关和互相关。

nls() 函数

非线性最小二乘函数 nls() 可以与适当的公式一起使用来构建时间序列模型,例如用于预测的 Bass 模型。

HoltWinters() 函数

HoltWinters() 函数计算指定 ts() 对象的 Holt-Winters 过滤。它估计模型的平滑参数。

ar() 函数

ar() 函数帮助我们拟合自回归模型。它使用 AIC 来选择复杂度。它支持多种优化方法,如 burgolsmleyw

arima() 函数

arima() 函数有助于使用自回归和移动平均方法对静止和非静止时间序列数据进行建模。它还可以集成使用差分创建的系列。

我们使用提供给 order 参数的列表来指定模型的非季节性细节。季节性规格使用 seasonal 参数给出。

在 R 中使用 predict() 函数执行时间序列预测

建立模型后,我们可以使用 predict() 函数进行预测。

还可以使用专门用于时间序列预测的函数,例如 predict.Arima()predict.ar()predict.HoltWinters()

结论

如需上述功能的帮助,请访问 R 中的内置文档。P.S.P 的 Introductory Time Series with R 一书。Cowpertwait 和 A.V. Metcalfe 对使用 R 进行时间序列建模进行了广泛的概述。

Author: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

相关文章 - R Function