午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

使用R語言進(jìn)行時(shí)間序列(arima,指數(shù)平滑)分析

 拓端數(shù)據(jù) 2020-04-05

讀時(shí)間序列數(shù)據(jù)

您要分析時(shí)間序列數(shù)據(jù)的第一件事就是將其讀入R,并繪制時(shí)間序列。您可以使用scan()函數(shù)將數(shù)據(jù)讀入R,該函數(shù)假定連續(xù)時(shí)間點(diǎn)的數(shù)據(jù)位于包含一列的簡單文本文件中。

數(shù)據(jù)集如下所示:

Age of Death of Successive Kings of England
#starting with William the Conqueror
#Source: McNeill, "Interactive Data Analysis"
60
43
67
50
56
42
50
65
68
43
65
34
...

僅顯示了文件的前幾行。前三行包含對(duì)數(shù)據(jù)的一些注釋,當(dāng)我們將數(shù)據(jù)讀入R時(shí)我們想要忽略它。我們可以通過使用scan()函數(shù)的“skip”參數(shù)來使用它,它指定了多少行。要忽略的文件頂部。要將文件讀入R,忽略前三行,我們鍵入:

 > kings
  [1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69 59 48
  [26] 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56

在這種情況下,英國42位連續(xù)國王的死亡年齡已被讀入變量“國王”。

一旦將時(shí)間序列數(shù)據(jù)讀入R,下一步就是將數(shù)據(jù)存儲(chǔ)在R中的時(shí)間序列對(duì)象中,這樣就可以使用R的許多函數(shù)來分析時(shí)間序列數(shù)據(jù)。要將數(shù)據(jù)存儲(chǔ)在時(shí)間序列對(duì)象中,我們使用R中的ts()函數(shù)。例如,要將數(shù)據(jù)存儲(chǔ)在變量'kings'中作為R中的時(shí)間序列對(duì)象,我們鍵入:

 
  Time Series:
  Start = 1
  End = 42
  Frequency = 1
  [1] 60 43 67 50 56 42 50 65 68 43 65 34 47 34 49 41 13 35 53 56 16 43 69 59 48
  [26] 59 86 55 68 51 33 49 67 77 81 67 71 81 68 70 77 56

有時(shí),您所擁有的時(shí)間序列數(shù)據(jù)集可能是以不到一年的固定間隔收集的,例如,每月或每季度。在這種情況下,您可以使用ts()函數(shù)中的'frequency'參數(shù)指定每年收集數(shù)據(jù)的次數(shù)。對(duì)于月度時(shí)間序列數(shù)據(jù),您設(shè)置頻率= 12,而對(duì)于季度時(shí)間序列數(shù)據(jù),您設(shè)置頻率= 4。

您還可以使用ts()函數(shù)中的“start”參數(shù)指定收集數(shù)據(jù)的第一年和該年度的第一個(gè)時(shí)間間隔。例如,如果第一個(gè)數(shù)據(jù)點(diǎn)對(duì)應(yīng)于1986年第二季度,則設(shè)置start = c(1986,2)。

 > birthstimeseries <- ts(births, frequency=12, start=c(1946,1))> birthstimeseries
    Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov    Dec
  1946 26.663 23.598 26.931 24.740 25.806 24.364 24.477 23.901 23.175 23.227 21.672 21.870
  1947 21.439 21.089 23.709 21.669 21.752 20.761 23.479 23.824 23.105 23.110 21.759 22.073
  1948 21.937 20.035 23.590 21.672 22.222 22.123 23.950 23.504 22.238 23.142 21.059 21.573
  1949 21.548 20.000 22.424 20.615 21.761 22.874 24.104 23.748 23.262 22.907 21.519 22.025
  1950 22.604 20.894 24.677 23.673 25.320 23.583 24.671 24.454 24.122 24.252 22.084 22.991
  1951 23.287 23.049 25.076 24.037 24.430 24.667 26.451 25.618 25.014 25.110 22.964 23.981
  1952 23.798 22.270 24.775 22.646 23.988 24.737 26.276 25.816 25.210 25.199 23.162 24.707
  1953 24.364 22.644 25.565 24.062 25.431 24.635 27.009 26.606 26.268 26.462 25.246 25.180
  1954 24.657 23.304 26.982 26.199 27.210 26.122 26.706 26.878 26.152 26.379 24.712 25.688
  1955 24.990 24.239 26.721 23.475 24.767 26.219 28.361 28.599 27.914 27.784 25.693 26.881
  1956 26.217 24.218 27.914 26.975 28.527 27.139 28.982 28.169 28.056 29.136 26.291 26.987
  1957 26.589 24.848 27.543 26.896 28.878 27.390 28.065 28.141 29.048 28.484 26.634 27.735
  1958 27.132 24.924 28.963 26.589 27.931 28.009 29.229 28.759 28.405 27.945 25.912 26.619
  1959 26.076 25.286 27.660 25.951 26.398 25.565 28.865 30.000 29.261 29.012 26.992 27.897

同樣,  1987年1月至1993年12月澳大利亞昆士蘭州海灘度假小鎮(zhèn)紀(jì)念品商店的月銷售額(來自Wheelwright和Hyndman的原始數(shù)據(jù), 1998)。我們可以通過輸入以下內(nèi)容將數(shù)據(jù)讀入R:

   Read 84 items
> souvenirtimeseries <- ts(souvenir, frequency=12, start=c(1987,1))> souvenirtimeseries
  Jan       Feb       Mar       Apr       May       Jun       Jul       Aug       Sep       Oct       Nov       Dec
  1987   1664.81   2397.53   2840.71   3547.29   3752.96   3714.74   4349.61   3566.34   5021.82   6423.48   7600.60  19756.21
  1988   2499.81   5198.24   7225.14   4806.03   5900.88   4951.34   6179.12   4752.15   5496.43   5835.10  12600.08  28541.72
  1989   4717.02   5702.63   9957.58   5304.78   6492.43   6630.80   7349.62   8176.62   8573.17   9690.50  15151.84  34061.01
  1990   5921.10   5814.58  12421.25   6369.77   7609.12   7224.75   8121.22   7979.25   8093.06   8476.70  17914.66  30114.41
  1991   4826.64   6470.23   9638.77   8821.17   8722.37  10209.48  11276.55  12552.22  11637.39  13606.89  21822.11  45060.69
  1992   7615.03   9849.69  14558.40  11587.33   9332.56  13082.09  16732.78  19888.61  23933.38  25391.35  36024.80  80721.71
  1993  10243.24  11266.88  21826.84  17357.33  15997.79  18601.53  26155.15  28586.52  30505.41  30821.33  46634.38 104660.67

繪制時(shí)間序列

一旦你將時(shí)間序列讀入R,下一步通常是制作時(shí)間序列數(shù)據(jù)的圖,你可以用R中的plot.ts()函數(shù)做。

例如,為了繪制英國42位連續(xù)國王的死亡時(shí)間序列,我們輸入:

> plot.ts(kingstimeseries)

此搜索

我們可以從時(shí)間圖中看出,可以使用加性模型來描述該時(shí)間序列,因?yàn)閿?shù)據(jù)中的隨機(jī)波動(dòng)在大小上隨時(shí)間大致恒定。

同樣,為了繪制紐約市每月出生人數(shù)的時(shí)間序列,我們輸入:

 

圖像2

從這個(gè)時(shí)間序列我們可以看出,每月出生人數(shù)似乎有季節(jié)性變化:每年夏天都有一個(gè)高峰,每個(gè)冬天都有一個(gè)低谷。同樣,似乎這個(gè)時(shí)間序列可能是用加性模型來描述的,因?yàn)榧竟?jié)性波動(dòng)的大小隨著時(shí)間的推移大致不變,似乎并不依賴于時(shí)間序列的水平,隨機(jī)波動(dòng)似乎也是隨著時(shí)間的推移大小不變。

同樣,為了繪制澳大利亞昆士蘭州海灘度假小鎮(zhèn)紀(jì)念品商店每月銷售的時(shí)間序列,我們輸入:

 

圖像4

在這種情況下,似乎加法模型不適合描述這個(gè)時(shí)間序列,因?yàn)榧竟?jié)性波動(dòng)和隨機(jī)波動(dòng)的大小似乎隨著時(shí)間序列的水平而增加。因此,我們可能需要轉(zhuǎn)換時(shí)間序列以獲得可以使用加法模型描述的變換時(shí)間序列。例如,我們可以通過計(jì)算原始數(shù)據(jù)的自然日志來轉(zhuǎn)換時(shí)間序列:

 > plot.ts(logsouvenirtimeseries)

圖像5

在這里我們可以看到,對(duì)數(shù)變換時(shí)間序列中的季節(jié)性波動(dòng)和隨機(jī)波動(dòng)的大小似乎隨著時(shí)間的推移大致不變,并且不依賴于時(shí)間序列的水平。因此,可以使用加法模型來描述對(duì)數(shù)變換的時(shí)間序列。

分解時(shí)間序列

分解時(shí)間序列意味著將其分成其組成部分,這些組成部分通常是趨勢(shì)分量和不規(guī)則分量,如果是季節(jié)性時(shí)間序列,則是季節(jié)性分量。

分解非季節(jié)性數(shù)據(jù)

非季節(jié)性時(shí)間序列由趨勢(shì)分量和不規(guī)則分量組成。分解時(shí)間序列涉及嘗試將時(shí)間序列分成這些分量,即估計(jì)趨勢(shì)分量和不規(guī)則分量。

為了估計(jì)可以使用加性模型描述的非季節(jié)性時(shí)間序列的趨勢(shì)分量,通常使用平滑方法,例如計(jì)算時(shí)間序列的簡單移動(dòng)平均值。

“TTR”R包中的SMA()函數(shù)可用于使用簡單的移動(dòng)平均值來平滑時(shí)間序列數(shù)據(jù)。要使用此功能,我們首先需要安裝“TTR”R軟件包 。一旦安裝了“TTR”R軟件包,就可以輸入以下命令加載“TTR”R軟件包:

 

然后,您可以使用“SMA()”功能來平滑時(shí)間序列數(shù)據(jù)。要使用SMA()函數(shù),需要使用參數(shù)“n”指定簡單移動(dòng)平均值的順序(跨度)。例如,要計(jì)算5階的簡單移動(dòng)平均值,我們?cè)赟MA()函數(shù)中設(shè)置n = 5。

例如,如上所述,英國42位連續(xù)國王的死亡年齡的時(shí)間序列出現(xiàn)是非季節(jié)性的,并且可能使用加性模型來描述,因?yàn)閿?shù)據(jù)中的隨機(jī)波動(dòng)大小基本上是恒定的。時(shí)間:

此搜索

因此,我們可以嘗試通過使用簡單移動(dòng)平均線進(jìn)行平滑來估計(jì)此時(shí)間序列的趨勢(shì)分量。要使用3階簡單移動(dòng)平均值平滑時(shí)間序列,并繪制平滑時(shí)間序列數(shù)據(jù),我們鍵入:

> kingstimeseriesSMA3 <- SMA(kingstimeseries,n=3)> plot.ts(kingstimeseriesSMA3)

image6

在使用3階簡單移動(dòng)平均值平滑的時(shí)間序列中,似乎存在相當(dāng)多的隨機(jī)波動(dòng)。因此,為了更準(zhǔn)確地估計(jì)趨勢(shì)分量,我們可能希望嘗試使用簡單的移動(dòng)平均值來平滑數(shù)據(jù)。更高階。這需要一些試錯(cuò),才能找到合適的平滑量。例如,我們可以嘗試使用8階的簡單移動(dòng)平均線:

> kingstimeseriesSMA8 <- SMA(kingstimeseries,n=8)> plot.ts(kingstimeseriesSMA8)

image7

使用8階簡單移動(dòng)平均值進(jìn)行平滑的數(shù)據(jù)可以更清晰地顯示趨勢(shì)分量,我們可以看到英國國王的死亡年齡似乎已經(jīng)從大約55歲降至大約38歲在最后的20位國王中,然后在第40位國王在時(shí)間序列的統(tǒng)治結(jié)束之后增加到大約73歲。

分解季節(jié)性數(shù)據(jù)

季節(jié)性時(shí)間序列由趨勢(shì)組件,季節(jié)性組件和不規(guī)則組件組成。分解時(shí)間序列意味著將時(shí)間序列分成這三個(gè)組成部分:即估計(jì)這三個(gè)組成部分。

為了估計(jì)可以使用加性模型描述的季節(jié)性時(shí)間序列的趨勢(shì)分量和季節(jié)性分量,我們可以使用R中的“decompose()”函數(shù)。該函數(shù)估計(jì)時(shí)間序列的趨勢(shì),季節(jié)和不規(guī)則分量??梢允褂眉有阅P蛠砻枋?。

函數(shù)“decompose()”返回一個(gè)列表對(duì)象作為結(jié)果,其中季節(jié)性組件,趨勢(shì)組件和不規(guī)則組件的估計(jì)值存儲(chǔ)在該列表對(duì)象的命名元素中,稱為“季節(jié)性”,“趨勢(shì)”和“隨機(jī)” “ 分別。

例如,如上所述,紐約市每月出生人數(shù)的時(shí)間序列是季節(jié)性的,每年夏季和每年冬季都會(huì)出現(xiàn)高峰,并且可能使用加性模型來描述,因?yàn)榧竟?jié)性和隨機(jī)波動(dòng)似乎是隨著時(shí)間的推移大小不變:

圖像2

為了估計(jì)這個(gè)時(shí)間序列的趨勢(shì),季節(jié)性和不規(guī)則成分,我們輸入:

> birthstimeseriescomponents <- decompose(birthstimeseries)

季節(jié)性,趨勢(shì)和不規(guī)則成分的估計(jì)值現(xiàn)在存儲(chǔ)在變量birthstimeseriescomponents $ seasonal,birthstimeseriescomponents $ trend和birthstimeseriescomponents $ random中。例如,我們可以通過鍵入以下內(nèi)容打印出季節(jié)性組件的估計(jì)值:

> birthstimeseriescomponents$seasonal # get the estimated values of the seasonal component
       Jan        Feb        Mar        Apr        May        Jun        Jul        Aug        Sep        Oct        Nov        Dec
 1946 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1947 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1948 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1949 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1950 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1951 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1952 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1953 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1954 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1955 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1956 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1957 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1958 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197
 1959 -0.6771947 -2.0829607  0.8625232 -0.8016787  0.2516514 -0.1532556  1.4560457  1.1645938  0.6916162  0.7752444 -1.1097652 -0.3768197

估計(jì)的季節(jié)性因素是在1月至12月期間給出的,并且每年都是相同的。最大的季節(jié)性因素是7月份(約1.46),最低的是2月份(約-2.08),表明7月出生率似乎達(dá)到高峰,2月出生低谷。

我們可以使用“plot()”函數(shù)繪制時(shí)間序列的估計(jì)趨勢(shì),季節(jié)和不規(guī)則分量,例如:

> plot(birthstimeseriescomponents)

image8

上圖顯示了原始時(shí)間序列(頂部),估計(jì)趨勢(shì)分量(從頂部開始的第二個(gè)),估計(jì)的季節(jié)性分量(從頂部開始的第三個(gè))和估計(jì)的不規(guī)則分量(底部)。我們看到估計(jì)的趨勢(shì)分量顯示從1947年的大約24小幅下降到1948年的大約22小幅下降,隨后從1959年開始穩(wěn)步增加到大約27。

季節(jié)性調(diào)整

如果您有可以使用附加模型描述的季節(jié)性時(shí)間序列,則可以通過估計(jì)季節(jié)性成分來季節(jié)性地調(diào)整時(shí)間序列,并從原始時(shí)間序列中減去估計(jì)的季節(jié)性成分。我們可以使用“decompose()”函數(shù)計(jì)算的季節(jié)性成分的估計(jì)來做到這一點(diǎn)。

例如,要季節(jié)性調(diào)整紐約市每月出生人數(shù)的時(shí)間序列,我們可以使用“decompose()”估算季節(jié)性成分,然后從原始時(shí)間序列中減去季節(jié)性成分:

> birthstimeseriescomponents <- decompose(birthstimeseries)
> birthstimeseriesseasonallyadjusted <- birthstimeseries - birthstimeseriescomponents$seasonal

然后我們可以使用“plot()”函數(shù)繪制經(jīng)季節(jié)性調(diào)整的時(shí)間序列,輸入:

> plot(birthstimeseriesseasonallyadjusted)

圖像9

您可以看到季節(jié)性變化已從經(jīng)季節(jié)性調(diào)整的時(shí)間序列中刪除。經(jīng)季節(jié)性調(diào)整的時(shí)間序列現(xiàn)在只包含趨勢(shì)分量和不規(guī)則分量。

使用指數(shù)平滑的預(yù)測(cè)

指數(shù)平滑可用于對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行短期預(yù)測(cè)。

簡單的指數(shù)平滑

如果您有一個(gè)時(shí)間序列可以使用具有恒定水平且沒有季節(jié)性的附加模型來描述,則可以使用簡單的指數(shù)平滑來進(jìn)行短期預(yù)測(cè)。

簡單指數(shù)平滑方法提供了一種估計(jì)當(dāng)前時(shí)間點(diǎn)的水平的方法。平滑由參數(shù)alpha控制; 用于估計(jì)當(dāng)前時(shí)間點(diǎn)的水平。alpha的值; α值接近于0意味著在對(duì)未來值進(jìn)行預(yù)測(cè)時(shí),最近的觀察值很小。

   Read 100 items
> rainseries <- ts(rain,start=c(1813))> plot.ts(rainseries)

image10

你可以從圖中看到大致恒定的水平(平均值保持恒定在25英寸左右)。隨著時(shí)間的推移,時(shí)間序列中的隨機(jī)波動(dòng)似乎大致不變,因此使用加性模型描述數(shù)據(jù)可能是合適的。因此,我們可以使用簡單的指數(shù)平滑進(jìn)行預(yù)測(cè)。

為了使用R中的簡單指數(shù)平滑進(jìn)行預(yù)測(cè),我們可以使用R中的“HoltWinters()”函數(shù)擬合一個(gè)簡單的指數(shù)平滑預(yù)測(cè)模型。要使用HoltWinters()進(jìn)行簡單的指數(shù)平滑,我們需要設(shè)置參數(shù)beta = FALSE和HoltWinters()函數(shù)中的gamma = FALSE(β和gamma參數(shù)用于Holt的指數(shù)平滑,或Holt-Winters指數(shù)平滑,如下所述)。

HoltWinters()函數(shù)返回一個(gè)列表變量,該變量包含多個(gè)命名元素。

例如,要使用簡單的指數(shù)平滑來預(yù)測(cè)倫敦年降雨量的時(shí)間序列,我們輸入:

> rainseriesforecasts <- HoltWinters(rainseries, beta=FALSE, gamma=FALSE)> rainseriesforecasts
  Smoothing parameters:
  alpha:  0.02412151
  beta :  FALSE
  gamma:  FALSE
  Coefficients:
    [,1]
  a 24.67819

HoltWinters()的輸出告訴我們alpha參數(shù)的估計(jì)值約為0.024。這非常接近零,告訴我們預(yù)測(cè)是基于最近和最近的觀察結(jié)果(雖然對(duì)最近的觀察更加重視)。

默認(rèn)情況下,HoltWinters()僅對(duì)我們?cè)紩r(shí)間序列所涵蓋的相同時(shí)間段進(jìn)行預(yù)測(cè)。在這種情況下,我們的原始時(shí)間序列包括1813年至1912年倫敦的降雨量,所以預(yù)測(cè)也是1813年至1912年。

在上面的例子中,我們將HoltWinters()函數(shù)的輸出存儲(chǔ)在列表變量“rainseriesforecasts”中。HoltWinters()的預(yù)測(cè)存儲(chǔ)在這個(gè)名為“fits”的列表變量的命名元素中,因此我們可以通過輸入以下內(nèi)容來獲取它們的值:

> rainseriesforecasts$fitted
  Time Series:
  Start = 1814
  End = 1912
  Frequency = 1
     xhat    level
  1814 23.56000 23.56000
  1815 23.62054 23.62054
  1816 23.57808 23.57808
  1817 23.76290 23.76290
  1818 23.76017 23.76017
  1819 23.76306 23.76306
  1820 23.82691 23.82691
  ...
  1905 24.62852 24.62852
  1906 24.58852 24.58852
  1907 24.58059 24.58059
  1908 24.54271 24.54271
  1909 24.52166 24.52166
  1910 24.57541 24.57541
  1911 24.59433 24.59433
  1912 24.59905 24.59905

我們可以通過鍵入以下內(nèi)容來繪制原始時(shí)間序列與預(yù)測(cè):

> plot(rainseriesforecasts)

圖像11

該圖顯示原始時(shí)間序列為黑色,預(yù)測(cè)顯示為紅線。預(yù)測(cè)的時(shí)間序列比原始數(shù)據(jù)的時(shí)間序列要平滑得多。

作為預(yù)測(cè)準(zhǔn)確性的度量,我們可以計(jì)算樣本內(nèi)預(yù)測(cè)誤差的平方誤差之和,即我們?cè)紩r(shí)間序列所涵蓋的時(shí)間段的預(yù)測(cè)誤差。平方誤差之和存儲(chǔ)在名為“SSE”的列表變量“rainseriesforecasts”的命名元素中,因此我們可以通過鍵入以下內(nèi)容來獲取其值:

> rainseriesforecasts$SSE
  [1] 1828.855

也就是說,這里的平方誤差之和為1828.855。

在簡單的指數(shù)平滑中,通常使用時(shí)間序列中的第一個(gè)值作為級(jí)別的初始值。例如,在倫敦的降雨時(shí)間序列中,1813年降雨量的第一個(gè)值為23.56(英寸)。您可以使用“l(fā).start”參數(shù)指定HoltWinters()函數(shù)中水平的初始值。例如,要將級(jí)別的初始值設(shè)置為23.56進(jìn)行預(yù)測(cè),我們鍵入:

> HoltWinters(rainseries, beta=FALSE, gamma=FALSE, l.start=23.56)

如上所述,默認(rèn)情況下,HoltWinters()僅對(duì)原始數(shù)據(jù)所涵蓋的時(shí)間段進(jìn)行預(yù)測(cè),即降雨時(shí)間序列為1813-1912。我們可以使用R“forecast”包中的“forecast.HoltWinters()”函數(shù)對(duì)更多時(shí)間點(diǎn)進(jìn)行預(yù)測(cè)。要使用forecast.HoltWinters()函數(shù),我們首先需要安裝“預(yù)測(cè)”R包(有關(guān)如何安裝R包的說明,請(qǐng)參閱如何安裝R包)。

安裝“預(yù)測(cè)”R軟件包后,您可以鍵入以下命令加載“預(yù)測(cè)”R軟件包:

> library("forecast")

當(dāng)使用forecast.HoltWinters()函數(shù)作為其第一個(gè)參數(shù)(輸入)時(shí),您將使用HoltWinters()函數(shù)傳遞給您已經(jīng)擬合的預(yù)測(cè)模型。例如,在降雨時(shí)間序列的情況下,我們將使用HoltWinters()的預(yù)測(cè)模型存儲(chǔ)在變量“rainseriesforecasts”中。您可以使用forecast.HoltWinters()中的“h”參數(shù)指定要進(jìn)行預(yù)測(cè)的其他時(shí)間點(diǎn)數(shù)。例如,要使用forecast.HoltWinters()預(yù)測(cè)1814-1820(8年以上)的降雨量,我們輸入:

> rainseriesforecasts2 <- forecast.HoltWinters(rainseriesforecasts, h=8)> rainseriesforecasts2
 Point     Forecast    Lo 80    Hi 80    Lo 95    Hi 95
 1913       24.67819 19.17493 30.18145 16.26169 33.09470
 1914       24.67819 19.17333 30.18305 16.25924 33.09715
 1915       24.67819 19.17173 30.18465 16.25679 33.09960
 1916       24.67819 19.17013 30.18625 16.25434 33.10204
 1917       24.67819 19.16853 30.18785 16.25190 33.10449
 1918       24.67819 19.16694 30.18945 16.24945 33.10694
 1919       24.67819 19.16534 30.19105 16.24701 33.10938
 1920       24.67819 19.16374 30.19265 16.24456 33.11182

forecast.HoltWinters()函數(shù)為您提供一年的預(yù)測(cè),預(yù)測(cè)的預(yù)測(cè)間隔為80%,預(yù)測(cè)的預(yù)測(cè)間隔為95%。例如,1920年的預(yù)測(cè)降雨量約為24.68英寸,95%的預(yù)測(cè)間隔為(16.24,33.11)。

要繪制forecast.HoltWinters()所做的預(yù)測(cè),我們可以使用“plot.forecast()”函數(shù):

> plot.forecast(rainseriesforecasts2)

image12

這里1913-1920的預(yù)測(cè)繪制為藍(lán)線,80%預(yù)測(cè)間隔繪制為橙色陰影區(qū)域,95%預(yù)測(cè)間隔繪制為黃色陰影區(qū)域。

對(duì)于每個(gè)時(shí)間點(diǎn),“預(yù)測(cè)誤差”被計(jì)算為觀測(cè)值減去預(yù)測(cè)值。我們只能計(jì)算原始時(shí)間序列所涵蓋的時(shí)間段的預(yù)測(cè)誤差,即降雨數(shù)據(jù)的1813-1912。如上所述,預(yù)測(cè)模型準(zhǔn)確性的一個(gè)度量是樣本內(nèi)預(yù)測(cè)誤差的平方誤差和(SSE)。

樣本內(nèi)預(yù)測(cè)錯(cuò)誤存儲(chǔ)在forecast.HoltWinters()返回的列表變量的命名元素“residuals”中。如果無法改進(jìn)預(yù)測(cè)模型,則連續(xù)預(yù)測(cè)的預(yù)測(cè)誤差之間不應(yīng)存在相關(guān)性。換句話說,如果連續(xù)預(yù)測(cè)的預(yù)測(cè)誤差之間存在相關(guān)性,則可能通過另一種預(yù)測(cè)技術(shù)可以改進(jìn)簡單的指數(shù)平滑預(yù)測(cè)。

為了弄清楚是否是這種情況,我們可以獲得滯后1-20的樣本內(nèi)預(yù)測(cè)誤差的相關(guān)圖。我們可以使用R中的“acf()”函數(shù)計(jì)算預(yù)測(cè)誤差的相關(guān)圖。要指定我們想要查看的最大滯后,我們?cè)赼cf()中使用“l(fā)ag.max”參數(shù)。

例如,為了計(jì)算倫敦降雨數(shù)據(jù)的樣本內(nèi)預(yù)測(cè)誤差的相關(guān)圖,我們輸入:

> acf(rainseriesforecasts2$residuals, lag.max=20)

image13

您可以從示例相關(guān)圖中看到滯后3處的自相關(guān)剛剛觸及顯著邊界。為了測(cè)試是否存在滯后1-20的非零相關(guān)性的重要證據(jù),我們可以進(jìn)行Ljung-Box測(cè)試。這可以使用“Box.test()”函數(shù)在R中完成。我們想要查看的最大延遲是使用Box.test()函數(shù)中的“l(fā)ag”參數(shù)指定的。例如,要測(cè)試是否存在滯后1-20的非零自相關(guān),對(duì)于倫敦降雨數(shù)據(jù)的樣本內(nèi)預(yù)測(cè)誤差,我們鍵入:

> Box.test(rainseriesforecasts2$residuals, lag=20, type="Ljung-Box")
    Box-Ljung test
  data:  rainseriesforecasts2$residuals
  X-squared = 17.4008, df = 20, p-value = 0.6268

這里的Ljung-Box檢驗(yàn)統(tǒng)計(jì)量為17.4,p值為0.6,因此幾乎沒有證據(jù)表明樣本預(yù)測(cè)誤差在1-20落后存在非零自相關(guān)。

為了確保預(yù)測(cè)模型無法改進(jìn),檢查預(yù)測(cè)誤差是否正態(tài)分布均值為零和恒定方差也是一個(gè)好主意。要檢查預(yù)測(cè)誤差是否具有恒定方差,我們可以制作樣本內(nèi)預(yù)測(cè)誤差的時(shí)間圖:

> plot.ts(rainseriesforecasts2$residuals)

image18

該圖顯示樣本內(nèi)預(yù)測(cè)誤差似乎隨時(shí)間變化大致不變,盡管時(shí)間序列(1820-1830)開始時(shí)波動(dòng)的大小可能略小于后期日期(例如1840年) -1850)。

為了檢查預(yù)測(cè)誤差是否正態(tài)分布為均值為零,我們可以繪制預(yù)測(cè)誤差的直方圖,其中覆蓋的正態(tài)曲線具有平均零和標(biāo)準(zhǔn)差與預(yù)測(cè)誤差的分布相同。為此,我們可以在下面定義一個(gè)R函數(shù)“plotForecastErrors()”:

 

您必須將上述功能復(fù)制到R中才能使用它。然后,您可以使用plotForecastErrors()繪制降雨預(yù)測(cè)的預(yù)測(cè)誤差的直方圖(具有重疊的正常曲線):

> plotForecastErrors(rainseriesforecasts2$residuals)

image19

該圖顯示預(yù)測(cè)誤差的分布大致以零為中心,并且或多或少地正態(tài)分布,盡管與正常曲線相比,它似乎略微偏向右側(cè)。然而,右傾斜相對(duì)較小,因此預(yù)測(cè)誤差通常以均值0分布是合理的。

Ljung-Box測(cè)試表明,樣本內(nèi)預(yù)測(cè)誤差中幾乎沒有非零自相關(guān)的證據(jù),預(yù)測(cè)誤差的分布似乎正常分布為均值為零。這表明簡單的指數(shù)平滑方法為倫敦降雨提供了一個(gè)充分的預(yù)測(cè)模型,這可能無法改進(jìn)。此外,80%和95%預(yù)測(cè)區(qū)間基于的假設(shè)(預(yù)測(cè)誤差中沒有自相關(guān),預(yù)測(cè)誤差通常以均值零和恒定方差分布)可能是有效的。

霍爾特的指數(shù)平滑

如果您的時(shí)間序列可以使用趨勢(shì)增加或減少且沒有季節(jié)性的加法模型來描述,則可以使用Holt的指數(shù)平滑來進(jìn)行短期預(yù)測(cè)。

霍爾特的指數(shù)平滑估計(jì)當(dāng)前時(shí)間點(diǎn)的水平和斜率。平滑由兩個(gè)參數(shù)α控制,用于估計(jì)當(dāng)前時(shí)間點(diǎn)的水平,β用于估計(jì)當(dāng)前時(shí)間點(diǎn)的趨勢(shì)分量的斜率b。與簡單的指數(shù)平滑一樣,參數(shù)alpha和beta的值介于0和1之間,接近0的值意味著在對(duì)未來值進(jìn)行預(yù)測(cè)時(shí),對(duì)最近的觀察值的重要性很小。

時(shí)間序列的一個(gè)例子可以使用具有趨勢(shì)和沒有季節(jié)性的加法模型來描述女性裙子在1866年到1911年的年度直徑的時(shí)間序列。 過輸入以下內(nèi)容讀入并繪制R中的數(shù)據(jù):

 > skirtsseries <- ts(skirts,start=c(1866))> plot.ts(skirtsseries)

image14

從圖中我們可以看出,下擺直徑從1866年的約600增加到1880年的約1050,之后在1911年,下擺直徑減少到約520。

為了進(jìn)行預(yù)測(cè),我們可以使用R中的HoltWinters()函數(shù)擬合預(yù)測(cè)模型。要使用HoltWinters()進(jìn)行Holt的指數(shù)平滑,我們需要設(shè)置參數(shù)gamma = FALSE(gamma參數(shù)用于Holt-Winters指數(shù)平滑,如下所述)。

例如,要使用Holt的指數(shù)平滑來擬合裙擺直徑的預(yù)測(cè)模型,我們鍵入:

> skirtsseriesforecasts <- HoltWinters(skirtsseries, gamma=FALSE)> skirtsseriesforecasts
  Smoothing parameters:
  alpha:  0.8383481
  beta :  1
  gamma:  FALSE
  Coefficients:
    [,1]
  a 529.308585
  b   5.690464
> skirtsseriesforecasts$SSE
  [1] 16954.18

α的估計(jì)值為0.84,β的估計(jì)值為1.00。這些都很高,告訴我們水平的當(dāng)前值和趨勢(shì)分量的斜率b的估計(jì)主要基于時(shí)間序列中的最近觀察。這具有良好的直觀感,因?yàn)闀r(shí)間序列的水平和斜率都會(huì)隨著時(shí)間的推移而發(fā)生很大變化。樣本內(nèi)預(yù)測(cè)誤差的平方和誤差的值是16954。

我們可以將原始時(shí)間序列繪制為黑色線條,其中預(yù)測(cè)值為紅線,通過鍵入:

> plot(skirtsseriesforecasts)

image15

我們從圖中可以看出,樣本內(nèi)預(yù)測(cè)與觀測(cè)值非常吻合,盡管它們往往略微落后于觀測(cè)值。

如果需要,可以使用HoltWinters()函數(shù)的“l(fā).start”和“b.start”參數(shù)指定趨勢(shì)分量的級(jí)別和斜率b的初始值。通常將水平的初始值設(shè)置為時(shí)間序列中的第一個(gè)值(裙邊數(shù)據(jù)為608),并將斜率的初始值設(shè)置為第二個(gè)值減去第一個(gè)值(裙邊數(shù)據(jù)為9)。例如,為了使用Holt的指數(shù)平滑擬合裙邊折邊數(shù)據(jù)的預(yù)測(cè)模型,水平的初始值為608,趨勢(shì)分量的斜率b為9,我們輸入:

> HoltWinters(skirtsseries, gamma=FALSE, l.start=608, b.start=9)

對(duì)于簡單的指數(shù)平滑,我們可以使用“forecast”包中的forecast.HoltWinters()函數(shù)對(duì)原始時(shí)間序列未涵蓋的未來時(shí)間進(jìn)行預(yù)測(cè)。例如,我們的裙擺下擺的時(shí)間序列數(shù)據(jù)是1866年至1911年,因此我們可以預(yù)測(cè)1912年至1930年(另外19個(gè)數(shù)據(jù)點(diǎn)),并通過輸入以下內(nèi)容繪制:

> skirtsseriesforecasts2 <- forecast.HoltWinters(skirtsseriesforecasts, h=19)> plot.forecast(skirtsseriesforecasts2)

image16

預(yù)測(cè)顯示為藍(lán)線,80%預(yù)測(cè)區(qū)間為橙色陰影區(qū)域,95%預(yù)測(cè)區(qū)間為黃色陰影區(qū)域。

對(duì)于簡單的指數(shù)平滑,我們可以通過檢查樣本內(nèi)預(yù)測(cè)誤差是否在滯后1-20處顯示非零自相關(guān)來檢查是否可以改進(jìn)預(yù)測(cè)模型。例如,對(duì)于裙邊折邊數(shù)據(jù),我們可以制作一個(gè)相關(guān)圖,并通過鍵入以下內(nèi)容來執(zhí)行Ljung-Box測(cè)試:

> acf(skirtsseriesforecasts2$residuals, lag.max=20)
> Box.test(skirtsseriesforecasts2$residuals, lag=20, type="Ljung-Box")
    Box-Ljung test
  data:  skirtsseriesforecasts2$residuals
  X-squared = 19.7312, df = 20, p-value = 0.4749

image17

此處相關(guān)圖顯示滯后5處的樣本內(nèi)預(yù)測(cè)誤差的樣本自相關(guān)超過了顯著性邊界。然而,我們預(yù)計(jì)前20個(gè)國家中20個(gè)自相關(guān)中有一個(gè)僅僅偶然地超過95%的顯著性界限。實(shí)際上,當(dāng)我們進(jìn)行Ljung-Box檢驗(yàn)時(shí),p值為0.47,表明在1-20落后的樣本內(nèi)預(yù)測(cè)誤差中幾乎沒有證據(jù)表明存在非零自相關(guān)。

對(duì)于簡單的指數(shù)平滑,我們還應(yīng)檢查預(yù)測(cè)誤差隨時(shí)間的變化是否恒定,并且通常以均值0分布。我們可以通過制作預(yù)測(cè)誤差的時(shí)間圖和預(yù)測(cè)誤差分布的直方圖以及覆蓋的正常曲線來做到這一點(diǎn):

> plot.ts(skirtsseriesforecasts2$residuals)            # make a time plot
> plotForecastErrors(skirtsseriesforecasts2$residuals) # make a histogram

image20

圖像21

預(yù)測(cè)誤差的時(shí)間圖表明預(yù)測(cè)誤差隨時(shí)間變化大致不變。預(yù)測(cè)誤差的直方圖表明,預(yù)測(cè)誤差通常以均值零和常數(shù)方差分布是合理的。

因此,Ljung-Box測(cè)試表明,預(yù)測(cè)誤差中幾乎沒有自相關(guān)的證據(jù),而預(yù)測(cè)誤差的時(shí)間圖和直方圖表明,預(yù)測(cè)誤差通常以均值零和常數(shù)方差分布是合理的。因此,我們可以得出結(jié)論,霍爾特的指數(shù)平滑為裙擺直徑提供了足夠的預(yù)測(cè)模型,這可能無法改進(jìn)。此外,這意味著80%和95%預(yù)測(cè)區(qū)間所基于的假設(shè)可能是有效的。

Holt-Winters指數(shù)平滑

如果您有一個(gè)時(shí)間序列可以使用增加或減少趨勢(shì)和季節(jié)性的加法模型來描述,您可以使用Holt-Winters指數(shù)平滑來進(jìn)行短期預(yù)測(cè)。

Holt-Winters指數(shù)平滑估計(jì)當(dāng)前時(shí)間點(diǎn)的水平,斜率和季節(jié)性分量。平滑由三個(gè)參數(shù)控制:α,β和γ,分別用于當(dāng)前時(shí)間點(diǎn)的水平估計(jì),趨勢(shì)分量的斜率b和季節(jié)分量。參數(shù)alpha,beta和gamma都具有介于0和1之間的值,并且接近0的值意味著在對(duì)未來值進(jìn)行預(yù)測(cè)時(shí)對(duì)最近的觀察值的權(quán)重相對(duì)較小。

可以使用具有趨勢(shì)和季節(jié)性的附加模型描述的時(shí)間序列的示例是澳大利亞昆士蘭州的海灘度假小鎮(zhèn)紀(jì)念品商店的月銷售日志的時(shí)間序列(如上所述):

圖像5

為了進(jìn)行預(yù)測(cè),我們可以使用HoltWinters()函數(shù)擬合預(yù)測(cè)模型。例如,為了適應(yīng)紀(jì)念品商店每月銷售日志的預(yù)測(cè)模型,我們輸入:

> logsouvenirtimeseries <- log(souvenirtimeseries)
> souvenirtimeseriesforecasts <- HoltWinters(logsouvenirtimeseries)
> souvenirtimeseriesforecasts
  Holt-Winters exponential smoothing with trend and additive seasonal component.
  Smoothing parameters:
  alpha:  0.413418
  beta :  0
  gamma:  0.9561275
  Coefficients:
       [,1]
   a   10.37661961
   b    0.02996319
   s1  -0.80952063
   s2  -0.60576477
   s3   0.01103238
   s4  -0.24160551
   s5  -0.35933517
   s6  -0.18076683
   s7   0.07788605
   s8   0.10147055
   s9   0.09649353
   s10  0.05197826
   s11  0.41793637
   s12  1.18088423
> souvenirtimeseriesforecasts$SSE
  2.011491

α,β和γ的估計(jì)值分別為0.41,0.00和0.96。α(0.41)的值相對(duì)較低,表明當(dāng)前時(shí)間點(diǎn)的水平估計(jì)是基于最近的觀察和更遠(yuǎn)的過去的一些觀察。β的值為0.00,表示趨勢(shì)分量的斜率b的估計(jì)值不在時(shí)間序列上更新,而是設(shè)置為等于其初始值。這具有良好的直觀感,因?yàn)樗皆跁r(shí)間序列上發(fā)生了相當(dāng)大的變化,但趨勢(shì)分量的斜率b保持大致相同。相反,伽馬值(0.96)很高,表明當(dāng)前時(shí)間點(diǎn)的季節(jié)性成分估計(jì)僅基于最近的觀察。

對(duì)于簡單的指數(shù)平滑和Holt的指數(shù)平滑,我們可以將原始時(shí)間序列繪制為黑色線條,預(yù)測(cè)值為紅線,頂部為:

> plot(souvenirtimeseriesforecasts)

圖像22

我們從圖中看到,Holt-Winters指數(shù)法非常成功地預(yù)測(cè)了季節(jié)性峰值,這種峰值大致發(fā)生在每年的11月。

為了對(duì)未包含在原始時(shí)間序列中的未來時(shí)間進(jìn)行預(yù)測(cè),我們?cè)凇邦A(yù)測(cè)”包中使用“forecast.HoltWinters()”函數(shù)。例如,紀(jì)念品銷售的原始數(shù)據(jù)是從1987年1月到1993年12月。如果我們想要預(yù)測(cè)1994年1月至1998年12月(48個(gè)月以上),并繪制預(yù)測(cè)圖,我們將輸入:

> souvenirtimeseriesforecasts2 <- forecast.HoltWinters(souvenirtimeseriesforecasts, h=48)> plot.forecast(souvenirtimeseriesforecasts2)

image23

預(yù)測(cè)顯示為藍(lán)線,橙色和黃色陰影區(qū)域分別顯示80%和95%的預(yù)測(cè)間隔。

我們可以通過檢查樣本內(nèi)預(yù)測(cè)誤差是否在滯后1-20處顯示非零自相關(guān),通過制作相關(guān)圖并執(zhí)行Ljung-Box測(cè)試來研究是否可以改進(jìn)預(yù)測(cè)模型:

> acf(souvenirtimeseriesforecasts2$residuals, lag.max=20)
> Box.test(souvenirtimeseriesforecasts2$residuals, lag=20, type="Ljung-Box")
  Box-Ljung test
  data:  souvenirtimeseriesforecasts2$residuals
  X-squared = 17.5304, df = 20, p-value = 0.6183

image24

相關(guān)圖表明,樣本內(nèi)預(yù)測(cè)誤差的自相關(guān)不超過滯后1-20的顯著性界限。此外,Ljung-Box檢驗(yàn)的p值為0.6,表明在滯后1-20處幾乎沒有證據(jù)表明存在非零自相關(guān)。

我們可以通過制作預(yù)測(cè)誤差和直方圖(具有重疊的正常曲線)的時(shí)間圖來檢查預(yù)測(cè)誤差是否隨時(shí)間具有恒定的方差,并且通常以均值0分布:

> plot.ts(souvenirtimeseriesforecasts2$residuals)            # make a time plot
> plotForecastErrors(souvenirtimeseriesforecasts2$residuals) # make a histogram

image25 image26

從時(shí)間圖中可以看出,預(yù)測(cè)誤差隨時(shí)間變化具有恒定的變化。根據(jù)預(yù)測(cè)誤差的直方圖,預(yù)測(cè)誤差通常以均值零分布似乎是合理的。

因此,對(duì)于預(yù)測(cè)誤差,幾乎沒有證據(jù)表明在滯后1-20處存在自相關(guān),并且預(yù)測(cè)誤差似乎正態(tài)分布,均值為零,且隨時(shí)間變化恒定。這表明Holt-Winters指數(shù)平滑提供了紀(jì)念品商店銷售記錄的充分預(yù)測(cè)模型,這可能無法改進(jìn)。此外,預(yù)測(cè)區(qū)間所基于的假設(shè)可能是有效的。

ARIMA模型

指數(shù)平滑方法對(duì)于進(jìn)行預(yù)測(cè)是有用的,并且不對(duì)時(shí)間序列的連續(xù)值之間的相關(guān)性做出假設(shè)。但是,如果要對(duì)使用指數(shù)平滑方法進(jìn)行的預(yù)測(cè)進(jìn)行預(yù)測(cè)間隔,則預(yù)測(cè)間隔要求預(yù)測(cè)誤差不相關(guān),并且通常以均值零和常數(shù)方差分布。

雖然指數(shù)平滑方法不對(duì)時(shí)間序列的連續(xù)值之間的相關(guān)性做出任何假設(shè),但在某些情況下,您可以通過考慮數(shù)據(jù)中的相關(guān)性來建立更好的預(yù)測(cè)模型。自回歸整合移動(dòng)平均(ARIMA)模型包括時(shí)間序列的不規(guī)則分量的顯式統(tǒng)計(jì)模型,其允許不規(guī)則分量中的非零自相關(guān)。

區(qū)分時(shí)間序列

ARIMA模型定義為固定時(shí)間序列。因此,如果您從一個(gè)非平穩(wěn)的時(shí)間序列開始,您將首先需要“區(qū)分”時(shí)間序列,直到您獲得一個(gè)固定的時(shí)間序列。如果你必須將時(shí)間序列d次除以獲得一個(gè)固定序列,那么你有一個(gè)ARIMA(p,d,q)模型,其中d是差分的使用順序。

你可以使用R中的“diff()”函數(shù)來區(qū)分時(shí)間序列。例如,從1866年到1911年,女性裙子在1866年到1911年的年直徑的時(shí)間序列并不是平穩(wěn)的,因?yàn)樗阶兓艽箅S著時(shí)間的推移:

image14

我們可以將時(shí)間序列(我們存儲(chǔ)在“裙子系列”中,見上文)區(qū)分一次,并通過輸入以下內(nèi)容繪制差異系列:

> skirtsseriesdiff1 <- diff(skirtsseries, differences=1)> plot.ts(skirtsseriesdiff1)

image27

由此產(chǎn)生的第一個(gè)差異的時(shí)間序列(上圖)似乎并不是平穩(wěn)的。因此,我們可以將時(shí)間序列區(qū)分兩次,看看是否為我們提供了一個(gè)固定的時(shí)間序列:

> skirtsseriesdiff2 <- diff(skirtsseries, differences=2)> plot.ts(skirtsseriesdiff2)

image28

平穩(wěn)性的正式測(cè)試

fUnitRoots包中提供了稱為“單位根測(cè)試”的平穩(wěn)性的正式測(cè)試,可在CRAN上獲得,但這里不再討論。

第二個(gè)差異的時(shí)間序列(上圖)在均值和方差中似乎是平穩(wěn)的,因?yàn)樾蛄械乃诫S時(shí)間保持大致恒定,并且序列的方差隨時(shí)間顯得大致恒定。因此,似乎我們需要將裙子直徑的時(shí)間序列區(qū)分兩次以實(shí)現(xiàn)固定系列。

如果您需要將原始時(shí)間序列數(shù)據(jù)區(qū)分d次以獲得固定時(shí)間序列,這意味著您可以為時(shí)間序列使用ARIMA(p,d,q)模型,其中d是使用差分的順序。例如,對(duì)于女性裙子直徑的時(shí)間序列,我們必須將時(shí)間序列區(qū)分兩次,因此差異(d)的順序?yàn)?.這意味著您可以使用ARIMA(p,2,q)你的時(shí)間序列的模型。下一步是計(jì)算ARIMA模型的p和q值。

另一個(gè)例子是英格蘭歷代國王的死亡時(shí)間序列(見上文):

此搜索

從時(shí)間圖(上圖),我們可以看出時(shí)間序列不是平均值。要計(jì)算第一個(gè)差異的時(shí)間序列并繪制它,我們鍵入:

> kingtimeseriesdiff1 <- diff(kingstimeseries, differences=1)> plot.ts(kingtimeseriesdiff1)

image29

第一個(gè)差異的時(shí)間序列在均值和方差上似乎是固定的,因此ARIMA(p,1,q)模型可能適合于英格蘭國王的死亡年齡的時(shí)間序列。通過采用第一個(gè)差異的時(shí)間序列,我們刪除了國王死亡時(shí)代的時(shí)間序列的趨勢(shì)分量,并留下不規(guī)則的成分。我們現(xiàn)在可以檢查這個(gè)不規(guī)則分量的連續(xù)項(xiàng)之間是否存在相關(guān)性; 如果是這樣,這可以幫助我們?yōu)閲跛劳龅哪挲g做出預(yù)測(cè)模型。

選擇候選ARIMA模型

如果您的時(shí)間序列是靜止的,或者您通過差分d次將其轉(zhuǎn)換為靜止時(shí)間序列,則下一步是選擇適當(dāng)?shù)腁RIMA模型,這意味著為ARIMA找到最合適的p和q值的值(p,d,q)模型。為此,您通常需要檢查靜止時(shí)間序列的相關(guān)圖和部分相關(guān)圖。

要繪制相關(guān)圖和部分相關(guān)圖,我們可以分別使用R中的“acf()”和“pacf()”函數(shù)。為了獲得自相關(guān)和部分自相關(guān)的實(shí)際值,我們?cè)凇癮cf()”和“pacf()”函數(shù)中設(shè)置“plot = FALSE”。

英國國王死亡時(shí)代的例子

例如,為了繪制英格蘭國王死亡時(shí)間的一次差異時(shí)間序列的滯后1-20的相關(guān)圖,并獲得自相關(guān)的值,我們輸入:

> acf(kingtimeseriesdiff1, lag.max=20)             # plot a correlogram
> acf(kingtimeseriesdiff1, lag.max=20, plot=FALSE) # get the autocorrelation values
  Autocorrelations of series 'kingtimeseriesdiff1', by lag
     0      1      2      3      4      5      6      7      8      9     10
  1.000 -0.360 -0.162 -0.050  0.227 -0.042 -0.181  0.095  0.064 -0.116 -0.071
     11     12     13     14     15     16     17     18     19     20
  0.206 -0.017 -0.212  0.130  0.114 -0.009 -0.192  0.072  0.113 -0.093

image30

我們從相關(guān)圖中看到,滯后1(-0.360)處的自相關(guān)超過了顯著邊界,但是滯后1-20之間的所有其他自相關(guān)都沒有超過顯著邊界。

為了繪制英語國王死亡時(shí)間的一次差異時(shí)間序列的滯后1-20的部分相關(guān)圖,并獲得部分自相關(guān)的值,我們使用“pacf()”函數(shù),鍵入:

> pacf(kingtimeseriesdiff1, lag.max=20)             # plot a partial correlogram
> pacf(kingtimeseriesdiff1, lag.max=20, plot=FALSE) # get the partial autocorrelation values
  Partial autocorrelations of series 'kingtimeseriesdiff1', by lag
    1      2      3      4      5      6      7      8      9     10     11
  -0.360 -0.335 -0.321  0.005  0.025 -0.144 -0.022 -0.007 -0.143 -0.167  0.065
    12     13     14     15     16     17     18     19     20
   0.034 -0.161  0.036  0.066  0.081 -0.005 -0.027 -0.006 -0.037

image31

部分相關(guān)圖顯示滯后1,2和3的部分自相關(guān)超過顯著邊界,為負(fù),并且隨著滯后的增加而在幅度上緩慢下降(滯后1:-0.360,滯后2:-0.335,滯后3:-0.321 )。在滯后3之后,部分自相關(guān)變?yōu)榱恪?/span>

由于在滯后1之后相關(guān)圖為零,并且在滯后3之后部分相關(guān)圖變?yōu)榱?,這意味著對(duì)于第一差異的時(shí)間序列,以下ARMA(自回歸移動(dòng)平均)模型是可能的:

  • ARMA(3,0)模型,即階數(shù)為p = 3的自回歸模型,因?yàn)椴糠肿韵嚓P(guān)圖在滯后3之后為零,并且自相關(guān)圖結(jié)束為零(盡管可能過于突然,因?yàn)樵撃P褪呛线m的)

  • 一個(gè)ARMA(0,1)模型,即q = 1的移動(dòng)平均模型,因?yàn)樽韵嚓P(guān)圖在滯后1之后為零,而部分自相關(guān)圖結(jié)束為零

  • 一個(gè)ARMA(p,q)模型,即p和q大于0的混合模型,因?yàn)樽韵嚓P(guān)圖和部分相關(guān)圖尾部為零(盡管相關(guān)圖可能會(huì)突然變?yōu)榱悖驗(yàn)樵撃P褪呛线m的)

我們使用簡約原理來確定哪個(gè)模型最好:也就是說,我們假設(shè)參數(shù)最少的模型是最好的。ARMA(3,0)模型具有3個(gè)參數(shù),ARMA(0,1)模型具有1個(gè)參數(shù),ARMA(p,q)模型具有至少2個(gè)參數(shù)。因此,ARMA(0,1)模型被認(rèn)為是最佳模型。

ARMA(0,1)模型是階數(shù)1或MA(1)模型的移動(dòng)平均模型。這個(gè)模型可以寫成:X_t - mu = Z_t - (theta * Z_t-1),其中X_t是我們正在研究的平穩(wěn)時(shí)間序列(英國國王死亡時(shí)的第一個(gè)不同年齡系列),mu是平均值時(shí)間序列X_t,Z_t是具有平均零和恒定方差的白噪聲,并且theta是可以估計(jì)的參數(shù)。

MA(移動(dòng)平均)模型通常用于模擬時(shí)間序列,該時(shí)間序列顯示連續(xù)觀察之間的短期依賴性。直覺上,很有意義的是,MA模型可以用來描述英國國王死亡時(shí)間序列中的不規(guī)則成分,因?yàn)槲覀兛梢灶A(yù)期特定英國國王的死亡年齡對(duì)年齡有一定影響。在接下來的一兩個(gè)國王的死亡,但對(duì)國王死亡的年齡影響不大,在那之后更長的統(tǒng)治時(shí)間。

 auto.arima()函數(shù)

auto.arima()函數(shù)可用于查找適當(dāng)?shù)腁RIMA模型,例如,鍵入“l(fā)ibrary(forecast)”,然后鍵入“auto.arima(kings)”。輸出說適當(dāng)?shù)哪P褪茿RIMA(0,1,1)。

由于ARMA(0,1)模型(p = 0,q = 1)被認(rèn)為是英國國王死亡年齡的第一個(gè)差異的時(shí)間序列的最佳候選模型,那么原始的時(shí)間序列死亡年齡可以使用ARIMA(0,1,1)模型建模(p = 0,d = 1,q = 1,其中d是所需差分的順序)。

使用ARIMA模型進(jìn)行預(yù)測(cè)

為時(shí)間序列數(shù)據(jù)選擇最佳候選ARIMA(p,d,q)模型后,您可以估計(jì)該ARIMA模型的參數(shù),并將其用作預(yù)測(cè)模型,以便對(duì)時(shí)間序列的未來值進(jìn)行預(yù)測(cè)。

您可以使用R中的“arima()”函數(shù)估計(jì)ARIMA(p,d,q)模型的參數(shù)。

英國國王死亡時(shí)代的例子

例如,我們?cè)谏厦嬗懻撨^,ARIMA(0,1,1)模型似乎是英格蘭國王死亡年齡的合理模型。您可以使用R中“arima()”函數(shù)的“order”參數(shù)在ARIMA模型中指定p,d和q的值。使ARIMA(p,d,q)模型適合此時(shí)間序列(我們存儲(chǔ)在變量“kingstimeseries”中,見上文),我們輸入:

> kingstimeseriesarima <- arima(kingstimeseries, order=c(0,1,1)) # fit an ARIMA(0,1,1) model> kingstimeseriesarima
  ARIMA(0,1,1)
  Coefficients:
          ma1
        -0.7218
  s.e.   0.1208
  sigma^2 estimated as 230.4:  log likelihood = -170.06
  AIC = 344.13   AICc = 344.44   BIC = 347.56

如上所述,如果我們將ARIMA(0,1,1)模型擬合到我們的時(shí)間序列,則意味著我們將ARMA(0,1)模型擬合到第一個(gè)差異的時(shí)間序列??梢詫懭階RMA(0,1)模型X_t-mu = Z_t - (theta * Z_t-1),其中theta是要估計(jì)的參數(shù)。根據(jù)“arima()”R函數(shù)(上圖)的輸出,在擬合ARIMA(0,1,1)模型的情況下,theta的估計(jì)值(在R輸出中給定為'ma1')為-0.7218到國王死亡的時(shí)間序列。

指定預(yù)測(cè)間隔的置信度

您可以使用“l(fā)evel”參數(shù)在forecast.Arima()中指定預(yù)測(cè)間隔的置信度。例如,要獲得99.5%的預(yù)測(cè)間隔,我們將鍵入“forecast.Arima(kingstimeseriesarima,h = 5,level = c(99.5))”。

然后,我們可以使用ARIMA模型使用“預(yù)測(cè)”R包中的“forecast.Arima()”函數(shù)對(duì)時(shí)間序列的未來值進(jìn)行預(yù)測(cè)。例如,為了預(yù)測(cè)接下來的五位英國國王的死亡年齡,我們輸入:

> library("forecast") # load the "forecast" R library
> kingstimeseriesforecasts <- forecast.Arima(kingstimeseriesarima, h=5)> kingstimeseriesforecasts
     Point Forecast    Lo 80    Hi 80    Lo 95     Hi 95
  43       67.75063 48.29647 87.20479 37.99806  97.50319
  44       67.75063 47.55748 87.94377 36.86788  98.63338
  45       67.75063 46.84460 88.65665 35.77762  99.72363
  46       67.75063 46.15524 89.34601 34.72333 100.77792
  47       67.75063 45.48722 90.01404 33.70168 101.79958

英國國王的原始時(shí)間序列包括42位英國國王的死亡年齡。forecast.Arima()函數(shù)給出了對(duì)接下來的五位英國國王(國王43-47)的死亡年齡的預(yù)測(cè),以及這些預(yù)測(cè)的80%和95%預(yù)測(cè)區(qū)間。第42位英國國王的死亡年齡為56歲(我們的時(shí)間序列中最后一次觀察到的值),ARIMA模型給出了接下來五位國王死亡的預(yù)測(cè)年齡為67.8歲。

我們可以使用我們的ARIMA(0,1,1)模型繪制前42個(gè)國王的死亡年齡,以及預(yù)測(cè)這42個(gè)國王和接下來的5個(gè)國王的年齡:

> plot.forecast(kingstimeseriesforecasts)

image35

與指數(shù)平滑模型的情況一樣,最好研究ARIMA模型的預(yù)測(cè)誤差是否正態(tài)分布為均值為零和常數(shù)方差,以及是否為連續(xù)預(yù)測(cè)誤差之間的相關(guān)性。

例如,我們可以為國王死亡時(shí)的ARIMA(0,1,1)模型制作預(yù)測(cè)誤差的相關(guān)圖,并通過鍵入以下內(nèi)容執(zhí)行Ljung-Box測(cè)試,即滯后1-20。

> acf(kingstimeseriesforecasts$residuals, lag.max=20)
> Box.test(kingstimeseriesforecasts$residuals, lag=20, type="Ljung-Box")
  Box-Ljung test
  data:  kingstimeseriesforecasts$residuals
  X-squared = 13.5844, df = 20, p-value = 0.851

image36

由于相關(guān)圖顯示滯后1-20的樣本自相關(guān)都不超過顯著性邊界,并且Ljung-Box檢驗(yàn)的p值為0.9,我們可以得出結(jié)論,很少有證據(jù)證明非零自相關(guān)預(yù)測(cè)錯(cuò)誤在滯后1-20。

為了研究預(yù)測(cè)誤差是否正態(tài)分布為均值為零和常數(shù)方差,我們可以制作預(yù)測(cè)誤差的時(shí)間圖和直方圖(帶有重疊的正態(tài)曲線):

> plot.ts(kingstimeseriesforecasts$residuals)            # make time plot of forecast errors
> plotForecastErrors(kingstimeseriesforecasts$residuals) # make a histogram

image37

image38

樣本內(nèi)預(yù)測(cè)誤差的時(shí)間圖表明,預(yù)測(cè)誤差的方差似乎隨著時(shí)間的推移大致不變(盡管時(shí)間序列的后半部分的方差可能略高)。時(shí)間序列的直方圖顯示預(yù)測(cè)誤差大致正態(tài)分布,均值似乎接近于零。因此,預(yù)測(cè)誤差通常以均值零和常數(shù)方差分布是合理的。

由于連續(xù)的預(yù)測(cè)誤差似乎沒有相關(guān)性,并且預(yù)測(cè)誤差似乎正常分布為均值為零且方差不變,因此ARIMA(0,1,1)似乎確實(shí)為死亡年齡提供了充分的預(yù)測(cè)模型。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多