R語言 時間序列分析

2021-03-06 11:36 更新

時間序列是將統(tǒng)一統(tǒng)計值按照時間發(fā)生的先后順序來進行排列,時間序列分析的主要目的是根據(jù)已有數(shù)據(jù)對未來進行預(yù)測。

一個穩(wěn)定的時間序列中常常包含兩個部分,那么就是:有規(guī)律的時間序列+噪聲。所以,在以下的方法中,主要的目的就是去過濾噪聲值,讓我們的時間序列更加的有分析意義。

語法

時間序列分析中ts()函數(shù)的基本語法是 -

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

以下是所使用的參數(shù)的描述 - 

  • data是包含在時間序列中使用的值的向量或矩陣。

  • start以時間序列指定第一次觀察的開始時間。

  • end指定時間序列中最后一次觀測的結(jié)束時間。

  • frequency指定每單位時間的觀測數(shù)。

除了參數(shù)“data”,所有其他參數(shù)是可選的。

時間序列的預(yù)處理:

  1. 平穩(wěn)性檢驗:

    拿到一個時間序列之后,我們首先要對其穩(wěn)定性進行判斷,只有非白噪聲的穩(wěn)定性時間序列才有分析的意義以及預(yù)測未來數(shù)據(jù)的價值。

    所謂平穩(wěn),是指統(tǒng)計值在一個常數(shù)上下波動并且波動范圍是有界限的。如果有明顯的趨勢或者周期性,那么就是不穩(wěn)定的。一般判斷有三種方法:

    • 畫出時間序列的趨勢圖,看趨勢判斷
    • 畫自相關(guān)圖和偏相關(guān)圖,平穩(wěn)時間序列的自相關(guān)圖和偏相關(guān)圖,要么拖尾,要么截尾。
    • 檢驗序列中是否存在單位根,如果存在單位根,就是非平穩(wěn)時間序列。

    在R語言中,DF檢測是一種檢測穩(wěn)定性的方法,如果得出的P值小于臨界值,則認為是序列是穩(wěn)定的。

  2. 白噪聲檢驗

    白噪聲序列,又稱為純隨機性序列,序列的各個值之間沒有任何的相關(guān)關(guān)系,序列在進行無序的隨機波動,可以終止對該序列的分析,因為從白噪聲序列中是提取不到任何有價值的信息的。

  3. 平穩(wěn)時間序列的參數(shù)特點

    均值和方差為常數(shù),并且具有與時間無關(guān)的自協(xié)方差。

時間序列建模步驟:

  • 拿到被分析的時間序列數(shù)據(jù)集。
  • 對數(shù)據(jù)繪圖,觀測其平穩(wěn)性。若為非平穩(wěn)時間序列要先進行 d 階差分運算后化為平穩(wěn)時間序列,此處的 d 即為 ARIMA(p,d,q) 模型中的 d ;若為平穩(wěn)序列,則用 ARMA(p,q) 模型。所以 ARIMA(p,d,q) 模型區(qū)別于 ARMA(p,q) 之處就在于前者的自回歸部分的特征多項式含有d個單位根。 
  • 對得到的平穩(wěn)時間序列分別求得其自相關(guān)系數(shù) ACF 和偏自相關(guān)系數(shù) PACF ,通過對自相關(guān)圖和偏自相關(guān)圖的分析,得到最佳的階層 p 和階數(shù) q。由以上得到的 d、q、p ,得到 ARIMA 模型。 
  • 模型診斷。進行診斷分析,以證實所得模型確實與所觀察到的數(shù)據(jù)特征相符。若不相符,重新回到第(3)步。

考慮從2012年1月開始的一個地方的年降雨量細節(jié)。我們創(chuàng)建一個R時間序列對象為期12個月并繪制它。

# 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()

當我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果及圖表 -

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

時間序列圖 -

時間序列,使用R

不同的時間間隔

ts()函數(shù)中的頻率參數(shù)值決定了測量數(shù)據(jù)點的時間間隔。 值為12表示時間序列為12個月。 其他值及其含義如下 - 

  • 頻率= 12指定一年中每個月的數(shù)據(jù)點。

  • 頻率= 4每年的每個季度的數(shù)據(jù)點。

  • 頻率= 6每小時的10分鐘的數(shù)據(jù)點。

  • 頻率= 24 * 6將一天的每10分鐘的數(shù)據(jù)點固定。

多時間序列

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

# 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 = "Multiple Time Series")

# Save the file.
dev.off()

當我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果及圖表 -

           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

多時間序列圖 -

結(jié)合時間序列,使用R



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號