R語言時間序列分析


時間序列是一系列資料點,其每個資料點與時間戳相關聯。 一個簡單的例子就是股票在某一天不同時間點的股票價格。另一個例子是一年中不同月份某個地區的降雨量。R語言使用許多功能來建立,操縱和繪製時間序列資料。時間序列的資料儲存在稱為時間序列物件的R物件中。 它也是一個R資料物件,如向量或資料影格。

時間序列物件是通過使用ts()函式建立的。

語法

時間序列分析所使用的ts()函式的基本語法是 -

timeseries.object.name <-  ts(data, start, end, frequency)

以下是使用的引數的描述 -

  • data - 是包含時間序列中使用的值的向量或矩陣。
  • start - 以時間序列指定第一次觀察的開始時間。
  • end - 指定時間序列中最後觀察的結束時間。
  • frequency - 指定每單位時間的觀測次數。

除引數「data」外,所有其他引數均為可選項。

範例

假設從2012年1月開始,要表述某地的年降雨統計資訊。我們建立一個R時間序列物件,為期12個月,並繪製。

setwd("F:/worksp/R")

# Get the data points in form of a R vector.
rainfall <- c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2,985,882.8,1071)

# Convert it to a time series object.
rainfall.timeseries <- ts(rainfall,start = c(2012,1),frequency = 12)

# Print the timeseries data.
print(rainfall.timeseries)

# Give the chart file a name.
png(file = "rainfall.png")

# Plot a graph of the time series.
plot(rainfall.timeseries)

# Save the file.
dev.off()

當我們執行上面的程式碼,它產生以下結果和圖表 -

Jan    Feb    Mar    Apr    May     Jun    Jul    Aug    Sep
2012  799.0  1174.8  865.1  1334.6  635.4  918.5  685.5  998.6  784.2
        Oct    Nov    Dec
2012  985.0  882.8 1071.0

降雨量的時間序列圖 -

不同的時間間隔

ts()函式中的頻率(frequency)引數的值決定了測量資料點的時間間隔。 值為12表示時間序列為12個月。其他值及其含義如下 -

  • frequency= 12 - 每一個月的資料點。
  • frequency= 4 - 每年四分之一的資料點。
  • frequency= 6 - 每一小時10分鐘的資料點。
  • frequency= 24 6* - 每天10分鐘的資料點。

多時間系列

我們可以在一個圖表中繪製多個時間序列,將這兩個系列組合成一個矩陣。

setwd("F:/worksp/R")
# Get the data points in form of a R vector.
rainfall1 <- c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2,985,882.8,1071)
rainfall2 <- 
           c(655,1306.9,1323.4,1172.2,562.2,824,822.4,1265.5,799.6,1105.6,1106.7,1337.8)

# Convert them to a matrix.
combined.rainfall <-  matrix(c(rainfall1,rainfall2),nrow = 12)

# Convert it to a time series object.
rainfall.timeseries <- ts(combined.rainfall,start = c(2012,1),frequency = 12)

# Print the timeseries data.
print(rainfall.timeseries)

# Give the chart file a name.
png(file = "rainfall_combined.png")

# Plot a graph of the time series.
plot(rainfall.timeseries, main = "多時間系列圖")

# Save the file.
dev.off()

當我們執行上面的程式碼,它產生以下結果和圖表 -

           Series 1  Series 2
Jan 2012    799.0    655.0
Feb 2012   1174.8   1306.9
Mar 2012    865.1   1323.4
Apr 2012   1334.6   1172.2
May 2012    635.4    562.2
Jun 2012    918.5    824.0
Jul 2012    685.5    822.4
Aug 2012    998.6   1265.5
Sep 2012    784.2    799.6
Oct 2012    985.0   1105.6
Nov 2012    882.8   1106.7
Dec 2012   1071.0   1337.8

多時間系列圖 -