在 R 中執行時間序列分析和預測

Jesse John 2024年2月15日
  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 進行時間序列建模進行了廣泛的概述。

作者: 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