時間序列
時間序列,是我們周邊時常出現的數據型態,例如:每天的最高溫變化、遊樂園各小時來客數、機台的每日不良率、股價…等。
基本邏輯來說,當數據有隨著時間變化的趨勢,就是時間序列,甚至不一定是跟著時間,基本上只要資料有前後相關性、週期變化現象,就可以用時序的方式處理,適合只有一個維度的簡單型資料。
時間序列ts()介紹
這裡先介紹R中內建時間序列的物件格式 Time series。
我們來自己建立一組時間序列的資料,ts()建立,使用格式如下:
ts(data,frequency=12,start=c(year,month))
其中gm表示時間數據,frequency表示時間的單位(進位法),例如季:4進位、月:12進位、小時:24、日:365…
這邊看一下官方文件
frequency: the number of observations per unit of time.
The value of argument frequency is used when the series is sampled an integral number of times in each unit time interval. For example, one could use a value of 7 for frequency when the data are sampled daily, and the natural time period is a week, or 12 when the data are sampled monthly and the natural time period is a year. Values of 4 and 12 are assumed in (e.g.) print methods to imply a quarterly and monthly series respectively.
start則表示時間序列開始的時間
例如:我們自訂一個模擬一個辦公室7月份一周的室溫資料,儀器紀錄時間是小時,並且來計算看看acf偏相關分析
temp_office <- ts(rnorm(24*7,mean=30,sd=3),frequency=1,start=c(1,1)) ;head(temp_office,20)## Time Series:
## Start = 1
## End = 20
## Frequency = 1
## [1] 28.90558 28.41619 29.01357 30.80248 28.94694 25.43002 25.81873 34.62282
## [9] 25.36138 24.15885 29.81578 30.61072 36.20670 27.06386 27.14283 27.53260
## [17] 31.88450 34.73242 32.01088 32.33917
acf(temp_office, plot=T) acf()稍後就會介紹,這邊為了方便觀察資料隨著小時的自相關性,我直接將frequency設定為1,這樣acf的lag值較直覺(lag=1對應frquency一個週期)。
因為溫度是隨機產生的,因此看不到相關係數高的遲滯係數(lag)。
時間序列觀察
接下來正是進入本次練習,我們採用forecast套件包require(forecast)裡面的內建資料集wineind,該資料是從1980年01月到1994年08月,是葡萄酒商紀錄紅酒銷售的總量。另外在未來的文章也會用forecast套件包中的函式進行建模。
首先透過 str() 可以了解到這組資料是時間序列的資料。
str(wineind);wineind;summary(wineind)## Time-Series [1:176] from 1980 to 1995: 15136 16733 20016 17708 18019 ...
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1980 15136 16733 20016 17708 18019 19227 22893 23739 21133 22591 26786 29740
## 1981 15028 17977 20008 21354 19498 22125 25817 28779 20960 22254 27392 29945
## 1982 16933 17892 20533 23569 22417 22084 26580 27454 24081 23451 28991 31386
## 1983 16896 20045 23471 21747 25621 23859 25500 30998 24475 23145 29701 34365
## 1984 17556 22077 25702 22214 26886 23191 27831 35406 23195 25110 30009 36242
## 1985 18450 21845 26488 22394 28057 25451 24872 33424 24052 28449 33533 37351
## 1986 19969 21701 26249 24493 24603 26485 30723 34569 26689 26157 32064 38870
## 1987 21337 19419 23166 28286 24570 24001 33151 24878 26804 28967 33311 40226
## 1988 20504 23060 23562 27562 23940 24584 34303 25517 23494 29095 32903 34379
## 1989 16991 21109 23740 25552 21752 20294 29009 25500 24166 26960 31222 38641
## 1990 14672 17543 25453 32683 22449 22316 27595 25451 25421 25288 32568 35110
## 1991 16052 22146 21198 19543 22084 23816 29961 26773 26635 26972 30207 38687
## 1992 16974 21697 24179 23757 25013 24019 30345 24488 25156 25650 30923 37240
## 1993 17466 19463 24352 26805 25236 24735 29356 31234 22724 28496 32857 37198
## 1994 13652 22784 23565 26323 23779 27549 29660 23356
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 13652 22115 24669 25392 28461 40226
我們可以用start()及end()取出時間序列的開始和結束。
start(wineind);end(wineind);## [1] 1980 1
## [1] 1994 8
end(wineind)[1] #年分## [1] 1994
end(wineind)[2] #月份## [1] 8
另外可以用window()來取出某一區間的資料。
window(wineind,1990,end(wineind)) #抓1990之後的資料## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1990 14672 17543 25453 32683 22449 22316 27595 25451 25421 25288 32568 35110
## 1991 16052 22146 21198 19543 22084 23816 29961 26773 26635 26972 30207 38687
## 1992 16974 21697 24179 23757 25013 24019 30345 24488 25156 25650 30923 37240
## 1993 17466 19463 24352 26805 25236 24735 29356 31234 22724 28496 32857 37198
## 1994 13652 22784 23565 26323 23779 27549 29660 23356
用time()取出時間欄位,這裡借用zoo函式庫幫我們轉換時間;另外可以用cycle()取出月份(精準地說應該是看你的時間序列週期單位)。
time(wineind) %>% zoo::as.yearmon() %>% head()## [1] "一月 1980" "二月 1980" "三月 1980" "四月 1980" "五月 1980" "六月 1980"
#單單取出年分
x <- zoo::as.yearmon(time(wineind)) %>% format.Date("%Y") ;head(x)## [1] "1980" "1980" "1980" "1980" "1980" "1980"
#取出月份
m <- cycle(wineind) ; head(m)## Jan Feb Mar Apr May Jun
## 1980 1 2 3 4 5 6
折線圖
接下來我們來觀察時序圖。
plot.ts(wineind) #用折線圖看銷售量時間序列 觀察可發現,我們的數據具有週期性變化,且隱約有長期增長的趨勢,並非一直維持在某一個常數上下波動,初步先判斷該序列爲非定態時間序列。
舉例來說,像股票大盤指數的價格會上下震盪,但是長期來看逐漸上升,這也是一種非定態時間序列。
而定態又可分為弱定態與嚴格定態等。
定態或非定態會影響我們對於一組數據的判斷,衡量到底這時間序列是否是可預測的。
ADF檢定
這時候我們可以先用一個常見的ADF檢定(Augmented Dickey-Fuller test)來驗證是否為定態。
引入tseries包中的adf.test()函數進行單位根檢驗
adf.test(wineind,k=0)## Warning in adf.test(wineind, k = 0): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: wineind
## Dickey-Fuller = -11.325, Lag order = 0, p-value = 0.01
## alternative hypothesis: stationary
但結果顯示P值爲0.01<0.05,接受H1假設,檢測認爲該序列為定態(stationary)。
不過我們從觀察中認為數據有長期趨勢,故稍後還是可以嘗試當作為非定態數據進行差分處理。
這樣對我們之後要使用自相關與偏相關分析圖來判斷該用甚麼預測模型(AR,MA,ARIMA)時,可能會有所幫助。
自相關分析與偏相關分析
同一個時間序列在任意兩個不同時刻的取值之間的相關程度,自相關函式是描述隨機訊號x(t)在任意兩個不同時刻t1,t2的取值之間的相關程度。
自己本身的相關係數一定最高為1,因此lag=0時,固定會是1。
plot(wineind) #用折線圖看銷售量時間序列acf(wineind,lag.max = 100, plot=T) #lag.max最大遲滯階數,設定前後自相關計算的最大間隔
#plot預設為T
#除了相關係數外,還可以計算共變異數及偏自相關係數PCAF
#透過設定 type = c("correlation", "covariance", "partial")在此使用acf()查看wineind的自相關性(Autocorrelation)
從圖上來看,往後移動一個距離,相關係數約為0.2
直到lag=1時(因為我們時序是12進位的,因此lag=1代表12個月),可看到cor約等於0.8,可預期紅酒的銷售量有12個月的年度循環週期。
在此記錄下自相關顯著處,即Pearson相關係數約接近1(高度正相關)或-1(高度負相關)部分。
而偏自相關分析PCAF,可以直接使用pcaf()直接計算。
自相關分析會受到區間的取值影響,而偏相關的計算可以移除這一點,通常偏相關係數會小於對應的自相關係數。
在此若想知道相關分析原理,推薦參考:
知乎:自相關與偏相關係數
AI Tech yuan:自相關與偏相關係數
我們一開始提到過,若判斷為非定態序列,可先進行差分處理,變成定態序列,這使用ndiffs()函數判斷差分次數。
ndiffs(wineind)## [1] 1
建議出結果為一階差分,因此我們來試著對函式進行一階差分,並且來畫畫看做完差分後的acf和pacf圖。
winediff<-diff(wineind)
par(mfrow=c(1,2))
plot.ts(wineind,main="原始Wineind資料")
plot.ts(winediff,main="一階差分後的Wineind資料")par(mfrow=c(1,2))
acf(wineind);acf(winediff) #繪製自相關圖par(mfrow=c(1,2))
pacf(wineind);pacf(winediff) #繪製偏自相關圖以上我們看了單一時間序列的自相關分析與偏相關分析。
從分析中我們預期wineind資料有年週期性的變化,之後可以納入預測模型的考量。 接下來的文章再繼續介紹時間序列建模預測的相關處理。
周期製圖比較
我們在自相關分析中看到以12個月的相關係數蠻高的,另外當1、4、6、8亦有蠻高的相關係數。 這跟直覺蠻符合的,銷售的淡旺季會有年度變化,如同業界常見年度同期比較;又或者跟前後個月有近似表現(環比), 也可以是以季、半年的尺度做討論。
這裡先用完整的一個週期(12個月)將同期比較的圖繪出。
#按月份畫折線圖
y <- zoo::as.yearmon(time(wineind)) %>% format.Date("%Y") %>% as.numeric() #年分
m <- zoo::as.yearmon(time(wineind)) %>% format.Date("%m") %>% as.numeric() #月份
wine_df <- data.frame(sales=as.numeric(wineind),year=y,month=m) #轉換成dataframe
duration=max(y)-min(y)+1 #計算有多少年,方便用迴圈分年份繪圖
wine_df %>%
ggplot( aes(x=month, y=sales, group=year, color=year)) +
geom_line()+
geom_point()+
scale_x_continuous(breaks=wine_df$month, labels = wine_df$month)#另外提供另外的繪圖方法,如果不想換成dataframe來畫的話,這裡參考"實戰R語言預測分析"書中的內容。
plot(1:12,ylim=range(wineind)+c(-100,100),col='white', xlab="月份", ylab="銷量")
for(i in 1:duration) {
points(1:12,wineind[(12*(i-1)+1):(12*i)])
lines(1:12,wineind[(12*(i-1)+1):(12*i)], lty=2 ,col=hcl.colors(duration)[i]) #用hcl.colors自動生成顏色
} 從圖上很明顯可以看出來,銷售數據有隨著月份的年週期性變化,而且隨著年份似乎有漸增的趨勢(非定態資料)
關於趨勢,我們之後再探討用移動平均Moving Average法來分析。
我們也好奇,是不是有跟著季產生的銷售變化,在自相關中4的相關係數蠻高,因此我們修改一下數據框,畫出來比較。
#按月份畫折線圖
q <- zoo::as.yearqtr(time(wineind)) %>% as.character() #年與季
qm <- zoo::as.yearmon(time(wineind)) %>% format.Date("%m") %>% as.numeric()%%4+1 #算出該月是在各季第幾個月
wine_df <- data.frame(sales=as.numeric(wineind),year=y,month=m,quarter=q,qutermonth=qm) #轉換成dataframe
wine_df %>%
ggplot( aes(x=qutermonth, y=sales, group=quarter, color=quarter)) +
geom_line()+
geom_point()+
scale_x_continuous(breaks=wine_df$qutermonth, labels = wine_df$qutermonth)感覺每季的第一個月都是銷售峰值,圖說明資料也有季變化。
一維線性回歸
其他回歸方法在後續的文章介紹,這裡先一氣呵成的用簡單的線性回歸建模一下吧!
我們想用過去的資料來預測未來的銷量,在這裡的例子,就是1981年01月的銷量可以從1980的歷史銷量推算出。 來整理一下資料
target_ind <- wineind[13:length(wineind)] #要被預測的銷量,從第二年開始預測
#用過去1,4,6,8,12個月的值來預測當月份
dataset <- data.frame(target_ind,month=m[13:length(wineind)])
column_name <- c()
for (i in c(1,4,6,8,12)){
dataset <- cbind(dataset,col=wineind[(13-i):(length(wineind)-i)])
column_name <- c(column_name,paste0('R',i))
}
dataset <- setNames(dataset,c('target_ind','month',column_name))dataset資料如下:
| target_ind | month | R1 | R4 | R6 | R8 | R12 |
|---|---|---|---|---|---|---|
| 15028 | 1 | 29740 | 21133 | 22893 | 18019 | 15136 |
| 17977 | 2 | 15028 | 22591 | 23739 | 19227 | 16733 |
| 20008 | 3 | 17977 | 26786 | 21133 | 22893 | 20016 |
| 21354 | 4 | 20008 | 29740 | 22591 | 23739 | 17708 |
| 19498 | 5 | 21354 | 15028 | 26786 | 21133 | 18019 |
| 22125 | 6 | 19498 | 17977 | 29740 | 22591 | 19227 |
| 25817 | 7 | 22125 | 20008 | 15028 | 26786 | 22893 |
| 28779 | 8 | 25817 | 21354 | 17977 | 29740 | 23739 |
| 20960 | 9 | 28779 | 19498 | 20008 | 15028 | 21133 |
| 22254 | 10 | 20960 | 22125 | 21354 | 17977 | 22591 |
| 27392 | 11 | 22254 | 25817 | 19498 | 20008 | 26786 |
| 29945 | 12 | 27392 | 28779 | 22125 | 21354 | 29740 |
| 16933 | 1 | 29945 | 20960 | 25817 | 19498 | 15028 |
| 17892 | 2 | 16933 | 22254 | 28779 | 22125 | 17977 |
| 20533 | 3 | 17892 | 27392 | 20960 | 25817 | 20008 |
| 23569 | 4 | 20533 | 29945 | 22254 | 28779 | 21354 |
| 22417 | 5 | 23569 | 16933 | 27392 | 20960 | 19498 |
| 22084 | 6 | 22417 | 17892 | 29945 | 22254 | 22125 |
| 26580 | 7 | 22084 | 20533 | 16933 | 27392 | 25817 |
| 27454 | 8 | 26580 | 23569 | 17892 | 29945 | 28779 |
| 24081 | 9 | 27454 | 22417 | 20533 | 16933 | 20960 |
| 23451 | 10 | 24081 | 22084 | 23569 | 17892 | 22254 |
| 28991 | 11 | 23451 | 26580 | 22417 | 20533 | 27392 |
| 31386 | 12 | 28991 | 27454 | 22084 | 23569 | 29945 |
| 16896 | 1 | 31386 | 24081 | 26580 | 22417 | 16933 |
| 20045 | 2 | 16896 | 23451 | 27454 | 22084 | 17892 |
| 23471 | 3 | 20045 | 28991 | 24081 | 26580 | 20533 |
| 21747 | 4 | 23471 | 31386 | 23451 | 27454 | 23569 |
| 25621 | 5 | 21747 | 16896 | 28991 | 24081 | 22417 |
| 23859 | 6 | 25621 | 20045 | 31386 | 23451 | 22084 |
| 25500 | 7 | 23859 | 23471 | 16896 | 28991 | 26580 |
| 30998 | 8 | 25500 | 21747 | 20045 | 31386 | 27454 |
| 24475 | 9 | 30998 | 25621 | 23471 | 16896 | 24081 |
| 23145 | 10 | 24475 | 23859 | 21747 | 20045 | 23451 |
| 29701 | 11 | 23145 | 25500 | 25621 | 23471 | 28991 |
| 34365 | 12 | 29701 | 30998 | 23859 | 21747 | 31386 |
| 17556 | 1 | 34365 | 24475 | 25500 | 25621 | 16896 |
| 22077 | 2 | 17556 | 23145 | 30998 | 23859 | 20045 |
| 25702 | 3 | 22077 | 29701 | 24475 | 25500 | 23471 |
| 22214 | 4 | 25702 | 34365 | 23145 | 30998 | 21747 |
| 26886 | 5 | 22214 | 17556 | 29701 | 24475 | 25621 |
| 23191 | 6 | 26886 | 22077 | 34365 | 23145 | 23859 |
| 27831 | 7 | 23191 | 25702 | 17556 | 29701 | 25500 |
| 35406 | 8 | 27831 | 22214 | 22077 | 34365 | 30998 |
| 23195 | 9 | 35406 | 26886 | 25702 | 17556 | 24475 |
| 25110 | 10 | 23195 | 23191 | 22214 | 22077 | 23145 |
| 30009 | 11 | 25110 | 27831 | 26886 | 25702 | 29701 |
| 36242 | 12 | 30009 | 35406 | 23191 | 22214 | 34365 |
| 18450 | 1 | 36242 | 23195 | 27831 | 26886 | 17556 |
| 21845 | 2 | 18450 | 25110 | 35406 | 23191 | 22077 |
| 26488 | 3 | 21845 | 30009 | 23195 | 27831 | 25702 |
| 22394 | 4 | 26488 | 36242 | 25110 | 35406 | 22214 |
| 28057 | 5 | 22394 | 18450 | 30009 | 23195 | 26886 |
| 25451 | 6 | 28057 | 21845 | 36242 | 25110 | 23191 |
| 24872 | 7 | 25451 | 26488 | 18450 | 30009 | 27831 |
| 33424 | 8 | 24872 | 22394 | 21845 | 36242 | 35406 |
| 24052 | 9 | 33424 | 28057 | 26488 | 18450 | 23195 |
| 28449 | 10 | 24052 | 25451 | 22394 | 21845 | 25110 |
| 33533 | 11 | 28449 | 24872 | 28057 | 26488 | 30009 |
| 37351 | 12 | 33533 | 33424 | 25451 | 22394 | 36242 |
| 19969 | 1 | 37351 | 24052 | 24872 | 28057 | 18450 |
| 21701 | 2 | 19969 | 28449 | 33424 | 25451 | 21845 |
| 26249 | 3 | 21701 | 33533 | 24052 | 24872 | 26488 |
| 24493 | 4 | 26249 | 37351 | 28449 | 33424 | 22394 |
| 24603 | 5 | 24493 | 19969 | 33533 | 24052 | 28057 |
| 26485 | 6 | 24603 | 21701 | 37351 | 28449 | 25451 |
| 30723 | 7 | 26485 | 26249 | 19969 | 33533 | 24872 |
| 34569 | 8 | 30723 | 24493 | 21701 | 37351 | 33424 |
| 26689 | 9 | 34569 | 24603 | 26249 | 19969 | 24052 |
| 26157 | 10 | 26689 | 26485 | 24493 | 21701 | 28449 |
| 32064 | 11 | 26157 | 30723 | 24603 | 26249 | 33533 |
| 38870 | 12 | 32064 | 34569 | 26485 | 24493 | 37351 |
| 21337 | 1 | 38870 | 26689 | 30723 | 24603 | 19969 |
| 19419 | 2 | 21337 | 26157 | 34569 | 26485 | 21701 |
| 23166 | 3 | 19419 | 32064 | 26689 | 30723 | 26249 |
| 28286 | 4 | 23166 | 38870 | 26157 | 34569 | 24493 |
| 24570 | 5 | 28286 | 21337 | 32064 | 26689 | 24603 |
| 24001 | 6 | 24570 | 19419 | 38870 | 26157 | 26485 |
| 33151 | 7 | 24001 | 23166 | 21337 | 32064 | 30723 |
| 24878 | 8 | 33151 | 28286 | 19419 | 38870 | 34569 |
| 26804 | 9 | 24878 | 24570 | 23166 | 21337 | 26689 |
| 28967 | 10 | 26804 | 24001 | 28286 | 19419 | 26157 |
| 33311 | 11 | 28967 | 33151 | 24570 | 23166 | 32064 |
| 40226 | 12 | 33311 | 24878 | 24001 | 28286 | 38870 |
| 20504 | 1 | 40226 | 26804 | 33151 | 24570 | 21337 |
| 23060 | 2 | 20504 | 28967 | 24878 | 24001 | 19419 |
| 23562 | 3 | 23060 | 33311 | 26804 | 33151 | 23166 |
| 27562 | 4 | 23562 | 40226 | 28967 | 24878 | 28286 |
| 23940 | 5 | 27562 | 20504 | 33311 | 26804 | 24570 |
| 24584 | 6 | 23940 | 23060 | 40226 | 28967 | 24001 |
| 34303 | 7 | 24584 | 23562 | 20504 | 33311 | 33151 |
| 25517 | 8 | 34303 | 27562 | 23060 | 40226 | 24878 |
| 23494 | 9 | 25517 | 23940 | 23562 | 20504 | 26804 |
| 29095 | 10 | 23494 | 24584 | 27562 | 23060 | 28967 |
| 32903 | 11 | 29095 | 34303 | 23940 | 23562 | 33311 |
| 34379 | 12 | 32903 | 25517 | 24584 | 27562 | 40226 |
| 16991 | 1 | 34379 | 23494 | 34303 | 23940 | 20504 |
| 21109 | 2 | 16991 | 29095 | 25517 | 24584 | 23060 |
| 23740 | 3 | 21109 | 32903 | 23494 | 34303 | 23562 |
| 25552 | 4 | 23740 | 34379 | 29095 | 25517 | 27562 |
| 21752 | 5 | 25552 | 16991 | 32903 | 23494 | 23940 |
| 20294 | 6 | 21752 | 21109 | 34379 | 29095 | 24584 |
| 29009 | 7 | 20294 | 23740 | 16991 | 32903 | 34303 |
| 25500 | 8 | 29009 | 25552 | 21109 | 34379 | 25517 |
| 24166 | 9 | 25500 | 21752 | 23740 | 16991 | 23494 |
| 26960 | 10 | 24166 | 20294 | 25552 | 21109 | 29095 |
| 31222 | 11 | 26960 | 29009 | 21752 | 23740 | 32903 |
| 38641 | 12 | 31222 | 25500 | 20294 | 25552 | 34379 |
| 14672 | 1 | 38641 | 24166 | 29009 | 21752 | 16991 |
| 17543 | 2 | 14672 | 26960 | 25500 | 20294 | 21109 |
| 25453 | 3 | 17543 | 31222 | 24166 | 29009 | 23740 |
| 32683 | 4 | 25453 | 38641 | 26960 | 25500 | 25552 |
| 22449 | 5 | 32683 | 14672 | 31222 | 24166 | 21752 |
| 22316 | 6 | 22449 | 17543 | 38641 | 26960 | 20294 |
| 27595 | 7 | 22316 | 25453 | 14672 | 31222 | 29009 |
| 25451 | 8 | 27595 | 32683 | 17543 | 38641 | 25500 |
| 25421 | 9 | 25451 | 22449 | 25453 | 14672 | 24166 |
| 25288 | 10 | 25421 | 22316 | 32683 | 17543 | 26960 |
| 32568 | 11 | 25288 | 27595 | 22449 | 25453 | 31222 |
| 35110 | 12 | 32568 | 25451 | 22316 | 32683 | 38641 |
| 16052 | 1 | 35110 | 25421 | 27595 | 22449 | 14672 |
| 22146 | 2 | 16052 | 25288 | 25451 | 22316 | 17543 |
| 21198 | 3 | 22146 | 32568 | 25421 | 27595 | 25453 |
| 19543 | 4 | 21198 | 35110 | 25288 | 25451 | 32683 |
| 22084 | 5 | 19543 | 16052 | 32568 | 25421 | 22449 |
| 23816 | 6 | 22084 | 22146 | 35110 | 25288 | 22316 |
| 29961 | 7 | 23816 | 21198 | 16052 | 32568 | 27595 |
| 26773 | 8 | 29961 | 19543 | 22146 | 35110 | 25451 |
| 26635 | 9 | 26773 | 22084 | 21198 | 16052 | 25421 |
| 26972 | 10 | 26635 | 23816 | 19543 | 22146 | 25288 |
| 30207 | 11 | 26972 | 29961 | 22084 | 21198 | 32568 |
| 38687 | 12 | 30207 | 26773 | 23816 | 19543 | 35110 |
| 16974 | 1 | 38687 | 26635 | 29961 | 22084 | 16052 |
| 21697 | 2 | 16974 | 26972 | 26773 | 23816 | 22146 |
| 24179 | 3 | 21697 | 30207 | 26635 | 29961 | 21198 |
| 23757 | 4 | 24179 | 38687 | 26972 | 26773 | 19543 |
| 25013 | 5 | 23757 | 16974 | 30207 | 26635 | 22084 |
| 24019 | 6 | 25013 | 21697 | 38687 | 26972 | 23816 |
| 30345 | 7 | 24019 | 24179 | 16974 | 30207 | 29961 |
| 24488 | 8 | 30345 | 23757 | 21697 | 38687 | 26773 |
| 25156 | 9 | 24488 | 25013 | 24179 | 16974 | 26635 |
| 25650 | 10 | 25156 | 24019 | 23757 | 21697 | 26972 |
| 30923 | 11 | 25650 | 30345 | 25013 | 24179 | 30207 |
| 37240 | 12 | 30923 | 24488 | 24019 | 23757 | 38687 |
| 17466 | 1 | 37240 | 25156 | 30345 | 25013 | 16974 |
| 19463 | 2 | 17466 | 25650 | 24488 | 24019 | 21697 |
| 24352 | 3 | 19463 | 30923 | 25156 | 30345 | 24179 |
| 26805 | 4 | 24352 | 37240 | 25650 | 24488 | 23757 |
| 25236 | 5 | 26805 | 17466 | 30923 | 25156 | 25013 |
| 24735 | 6 | 25236 | 19463 | 37240 | 25650 | 24019 |
| 29356 | 7 | 24735 | 24352 | 17466 | 30923 | 30345 |
| 31234 | 8 | 29356 | 26805 | 19463 | 37240 | 24488 |
| 22724 | 9 | 31234 | 25236 | 24352 | 17466 | 25156 |
| 28496 | 10 | 22724 | 24735 | 26805 | 19463 | 25650 |
| 32857 | 11 | 28496 | 29356 | 25236 | 24352 | 30923 |
| 37198 | 12 | 32857 | 31234 | 24735 | 26805 | 37240 |
| 13652 | 1 | 37198 | 22724 | 29356 | 25236 | 17466 |
| 22784 | 2 | 13652 | 28496 | 31234 | 24735 | 19463 |
| 23565 | 3 | 22784 | 32857 | 22724 | 29356 | 24352 |
| 26323 | 4 | 23565 | 37198 | 28496 | 31234 | 26805 |
| 23779 | 5 | 26323 | 13652 | 32857 | 22724 | 25236 |
| 27549 | 6 | 23779 | 22784 | 37198 | 28496 | 24735 |
| 29660 | 7 | 27549 | 23565 | 13652 | 32857 | 29356 |
| 23356 | 8 | 29660 | 26323 | 22784 | 37198 | 31234 |
畫出散佈圖矩陣:
plot(dataset) 進階版本的散布矩陣,使用到car套件,自帶線性回歸線
scatterplotMatrix(dataset,regLine = list(method=lm, lty=1, lwd=2, col='red') )當我們仔細看target_ind與R12的散佈圖時,發現有些明顯的離群值。 這些離群值會影響建模的效果。
plot(dataset[,c('R12','target_ind')])
# 畫出回歸趨勢線
lm.model <- lm(target_ind~R12, dataset) # 建立一個線性回歸
abline(lm.model,lwd=2,col='red') 庫克距離,去除異常值
我們在簡單線性回歸後看到有離群值,恐影響模型擬合,如果某個觀測值對應的期望值是異常值的話,這樣的值被認爲槓桿值很大。
這邊採用庫克距離來衡量異常值。
庫克距離:
當通過計算觀測值的槓桿值之後,發現具有較大槓桿值的那些觀測點,對模型穩定性有“潛在威脅”。
此時就可以計算庫克距離衡量一個觀測值對模型的影響大小,白話來說就是比較每個觀測值被移除前後,模型變化。
推薦閱讀:
庫克距離
lm.model <- lm(target_ind~R12, dataset)
cook <- cooks.distance(lm.model) #計算庫克距離
head(cook) #看一下cook計算的結果## 1 2 3 4 5 6
## 7.400274e-03 1.037410e-04 1.060328e-03 7.571059e-03 3.470601e-05 3.286490e-03
plot(cook)
abline(h=0.10,lty=2,col='red')dataset <- dataset[which(cook<0.10),] # remove 高槓桿的異常值建立模型
我們將dataset分成訓練組與測試組,這裡就按照比例,前7成是訓練組,後3成是測試組。
#分離訓練與測試組
train_size = round(nrow(dataset)*0.7)
test_size = nrow(dataset)-train_size
train <- head(dataset,train_size)
test <- tail(dataset,test_size)
#建立模型
lm.fit <- lm(target_ind~.,data=train)
summary(lm.fit)##
## Call:
## lm(formula = target_ind ~ ., data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4825.9 -1542.3 -126.4 1495.8 6797.8
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.917e+03 2.123e+03 0.903 0.368605
## month 4.170e+02 1.085e+02 3.844 0.000207 ***
## R1 -3.040e-04 3.814e-02 -0.008 0.993655
## R4 6.858e-02 4.080e-02 1.681 0.095752 .
## R6 -2.909e-02 4.303e-02 -0.676 0.500429
## R8 1.298e-01 4.971e-02 2.612 0.010320 *
## R12 6.705e-01 7.118e-02 9.419 1.14e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2074 on 106 degrees of freedom
## Multiple R-squared: 0.8576, Adjusted R-squared: 0.8495
## F-statistic: 106.4 on 6 and 106 DF, p-value: < 2.2e-16
- 模型結果可以看出R12與目標變數呈現明顯線性關係,這也是我們一開始自相關時知道的。
- month呈現顯著,推測原因同上,month及R12此二變數的相依性高。
- 調整後R平方達到0.85,可以接受。
- 誤差項(Intercept)P值不顯著。
- R1及R6的P值都很大,可以考慮剃除。
#試著剃除R1及R6在一次擬合
lm.fit <- lm(target_ind~.,data=train[,!(colnames(train) %in% c('R1','R6'))])
summary(lm.fit)##
## Call:
## lm(formula = target_ind ~ ., data = train[, !(colnames(train) %in%
## c("R1", "R6"))])
##
## Residuals:
## Min 1Q Median 3Q Max
## -5071.5 -1409.8 -208.1 1497.1 6751.9
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.990e+02 1.360e+03 0.661 0.50991
## month 4.441e+02 9.906e+01 4.483 1.84e-05 ***
## R4 7.455e-02 3.953e-02 1.886 0.06204 .
## R8 1.371e-01 4.822e-02 2.842 0.00536 **
## R12 6.606e-01 6.922e-02 9.545 5.07e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2059 on 108 degrees of freedom
## Multiple R-squared: 0.8569, Adjusted R-squared: 0.8516
## F-statistic: 161.7 on 4 and 108 DF, p-value: < 2.2e-16
剔除後差異不大。 ***
多項式迴歸
接著我們嘗試使用非線性的方法改善模型,這裡採用多項式方法。 因為R1和R6明顯不顯著,R12明顯顯著,這裡使用R4、R8兩變數做多項式,嘗試最高為5次。
lm.fit <- lm(target_ind~ month + R1 + R4 + I(R4^2) + I(R4^3) + I(R4^4) + I(R4^5)
+ R6 + R8 + I(R8^2) + I(R8^3) + I(R8^4) + I(R8^5) + R12 ,data=train)
summary(lm.fit)##
## Call:
## lm(formula = target_ind ~ month + R1 + R4 + I(R4^2) + I(R4^3) +
## I(R4^4) + I(R4^5) + R6 + R8 + I(R8^2) + I(R8^3) + I(R8^4) +
## I(R8^5) + R12, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4408.1 -1240.3 -205.8 1498.0 5071.6
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.643e+05 3.639e+05 0.726 0.469
## month 5.232e+02 1.146e+02 4.566 1.44e-05 ***
## R1 2.623e-02 4.058e-02 0.646 0.520
## R4 5.429e+00 4.550e+01 0.119 0.905
## I(R4^2) -3.601e-04 3.583e-03 -0.100 0.920
## I(R4^3) 1.122e-08 1.377e-07 0.081 0.935
## I(R4^4) -1.685e-13 2.588e-12 -0.065 0.948
## I(R4^5) 1.035e-18 1.902e-17 0.054 0.957
## R6 -9.190e-02 4.691e-02 -1.959 0.053 .
## R8 -6.113e+01 5.192e+01 -1.177 0.242
## I(R8^2) 4.969e-03 4.019e-03 1.236 0.219
## I(R8^3) -1.942e-07 1.522e-07 -1.276 0.205
## I(R8^4) 3.679e-12 2.821e-12 1.304 0.195
## I(R8^5) -2.715e-17 2.050e-17 -1.324 0.188
## R12 5.895e-01 7.686e-02 7.670 1.28e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2022 on 98 degrees of freedom
## Multiple R-squared: 0.8747, Adjusted R-squared: 0.8569
## F-statistic: 48.89 on 14 and 98 DF, p-value: < 2.2e-16
逐步回歸
由於涉及到的變數較多且彼此有相依性,我們用逐步回歸刪除影響較小的變數。
lm.fit <- step(lm.fit)## Start: AIC=1734.22
## target_ind ~ month + R1 + R4 + I(R4^2) + I(R4^3) + I(R4^4) +
## I(R4^5) + R6 + R8 + I(R8^2) + I(R8^3) + I(R8^4) + I(R8^5) +
## R12
##
## Df Sum of Sq RSS AIC
## - I(R4^5) 1 12101 400825065 1732.2
## - I(R4^4) 1 17340 400830305 1732.2
## - I(R4^3) 1 27148 400840113 1732.2
## - I(R4^2) 1 41308 400854272 1732.2
## - R4 1 58226 400871191 1732.2
## - R1 1 1708723 402521687 1732.7
## - R8 1 5669346 406482311 1733.8
## - I(R8^2) 1 6250455 407063419 1734.0
## - I(R8^3) 1 6659230 407472194 1734.1
## - I(R8^4) 1 6954305 407767269 1734.2
## <none> 400812965 1734.2
## - I(R8^5) 1 7173149 407986114 1734.2
## - R6 1 15695998 416508963 1736.6
## - month 1 85278959 486091924 1754.0
## - R12 1 240586985 641399949 1785.3
##
## Step: AIC=1732.23
## target_ind ~ month + R1 + R4 + I(R4^2) + I(R4^3) + I(R4^4) +
## R6 + R8 + I(R8^2) + I(R8^3) + I(R8^4) + I(R8^5) + R12
##
## Df Sum of Sq RSS AIC
## - I(R4^4) 1 248012 401073077 1730.3
## - I(R4^3) 1 376496 401201561 1730.3
## - I(R4^2) 1 463875 401288941 1730.4
## - R4 1 498457 401323522 1730.4
## - R1 1 1786333 402611399 1730.7
## - R8 1 5766624 406591689 1731.8
## - I(R8^2) 1 6332455 407157521 1732.0
## - I(R8^3) 1 6722715 407547781 1732.1
## - I(R8^4) 1 6998947 407824013 1732.2
## <none> 400825065 1732.2
## - I(R8^5) 1 7200642 408025708 1732.2
## - R6 1 15697552 416522617 1734.6
## - month 1 85566496 486391562 1752.1
## - R12 1 242716686 643541751 1783.7
##
## Step: AIC=1730.3
## target_ind ~ month + R1 + R4 + I(R4^2) + I(R4^3) + R6 + R8 +
## I(R8^2) + I(R8^3) + I(R8^4) + I(R8^5) + R12
##
## Df Sum of Sq RSS AIC
## - R4 1 1309323 402382400 1728.7
## - R1 1 1673950 402747027 1728.8
## - I(R4^2) 1 2255530 403328607 1728.9
## - I(R4^3) 1 3618906 404691983 1729.3
## - R8 1 5874109 406947186 1729.9
## - I(R8^2) 1 6432792 407505869 1730.1
## - I(R8^3) 1 6818164 407891240 1730.2
## - I(R8^4) 1 7092670 408165747 1730.3
## <none> 401073077 1730.3
## - I(R8^5) 1 7295763 408368840 1730.3
## - R6 1 15458105 416531182 1732.6
## - month 1 85847576 486920653 1750.2
## - R12 1 243622053 644695129 1781.9
##
## Step: AIC=1728.66
## target_ind ~ month + R1 + I(R4^2) + I(R4^3) + R6 + R8 + I(R8^2) +
## I(R8^3) + I(R8^4) + I(R8^5) + R12
##
## Df Sum of Sq RSS AIC
## - R1 1 1843309 404225709 1727.2
## - R8 1 5426971 407809371 1728.2
## - I(R8^2) 1 5957139 408339539 1728.3
## - I(R8^3) 1 6328208 408710608 1728.4
## - I(R8^4) 1 6598847 408981247 1728.5
## - I(R8^5) 1 6805494 409187893 1728.6
## <none> 402382400 1728.7
## - I(R4^2) 1 13555515 415937915 1730.4
## - R6 1 15189855 417572254 1730.8
## - I(R4^3) 1 17549001 419931400 1731.5
## - month 1 84792914 487175313 1748.3
## - R12 1 247577347 649959747 1780.8
##
## Step: AIC=1727.18
## target_ind ~ month + I(R4^2) + I(R4^3) + R6 + R8 + I(R8^2) +
## I(R8^3) + I(R8^4) + I(R8^5) + R12
##
## Df Sum of Sq RSS AIC
## - R8 1 5669333 409895041 1726.8
## - I(R8^2) 1 6159443 410385152 1726.9
## - I(R8^3) 1 6488205 410713913 1727.0
## - I(R8^4) 1 6715544 410941252 1727.0
## - I(R8^5) 1 6877913 411103621 1727.1
## <none> 404225709 1727.2
## - I(R4^2) 1 12687002 416912711 1728.7
## - R6 1 13843149 418068858 1729.0
## - I(R4^3) 1 16600997 420826706 1729.7
## - month 1 86993437 491219146 1747.2
## - R12 1 251079708 655305416 1779.8
##
## Step: AIC=1726.75
## target_ind ~ month + I(R4^2) + I(R4^3) + R6 + I(R8^2) + I(R8^3) +
## I(R8^4) + I(R8^5) + R12
##
## Df Sum of Sq RSS AIC
## - I(R8^5) 1 2320810 412215851 1725.4
## - I(R8^4) 1 2679576 412574617 1725.5
## - I(R8^3) 1 3245144 413140186 1725.7
## - I(R8^2) 1 4167790 414062832 1725.9
## <none> 409895041 1726.8
## - R6 1 12618388 422513429 1728.2
## - I(R4^2) 1 16344932 426239973 1729.2
## - I(R4^3) 1 20910198 430805240 1730.4
## - month 1 81705493 491600535 1745.3
## - R12 1 283965502 693860543 1784.2
##
## Step: AIC=1725.39
## target_ind ~ month + I(R4^2) + I(R4^3) + R6 + I(R8^2) + I(R8^3) +
## I(R8^4) + R12
##
## Df Sum of Sq RSS AIC
## - I(R8^4) 1 3559952 415775803 1724.4
## - I(R8^3) 1 5294134 417509985 1724.8
## <none> 412215851 1725.4
## - I(R8^2) 1 7979387 420195238 1725.6
## - R6 1 13097591 425313442 1726.9
## - I(R4^2) 1 17607510 429823361 1728.1
## - I(R4^3) 1 22512166 434728017 1729.4
## - month 1 80326290 492542141 1743.5
## - R12 1 290296291 702512142 1783.6
##
## Step: AIC=1724.36
## target_ind ~ month + I(R4^2) + I(R4^3) + R6 + I(R8^2) + I(R8^3) +
## R12
##
## Df Sum of Sq RSS AIC
## <none> 415775803 1724.4
## - R6 1 10308992 426084795 1725.1
## - I(R4^2) 1 16039899 431815702 1726.6
## - I(R4^3) 1 20793153 436568957 1727.9
## - I(R8^3) 1 21664667 437440470 1728.1
## - I(R8^2) 1 26622098 442397901 1729.4
## - month 1 79411931 495187734 1742.1
## - R12 1 296353662 712129465 1783.2
summary(lm.fit)##
## Call:
## lm(formula = target_ind ~ month + I(R4^2) + I(R4^3) + R6 + I(R8^2) +
## I(R8^3) + R12, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4984.6 -1318.5 -72.3 1510.7 5191.8
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.302e+03 2.531e+03 2.095 0.0386 *
## month 4.907e+02 1.096e+02 4.478 1.92e-05 ***
## I(R4^2) -1.169e-05 5.806e-06 -2.013 0.0467 *
## I(R4^3) 3.077e-10 1.343e-10 2.292 0.0239 *
## R6 -6.919e-02 4.288e-02 -1.614 0.1096
## I(R8^2) 1.887e-05 7.276e-06 2.593 0.0109 *
## I(R8^3) -3.923e-10 1.677e-10 -2.339 0.0212 *
## R12 6.271e-01 7.249e-02 8.651 6.40e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1990 on 105 degrees of freedom
## Multiple R-squared: 0.8701, Adjusted R-squared: 0.8614
## F-statistic: 100.4 on 7 and 105 DF, p-value: < 2.2e-16
我們估且接受這樣的結果。 lm.fit就是我們建立用於時間序列預測的線性迴歸模型。
test$pred <- predict(lm.fit,test)
#計算百分誤差率
test$diff <- abs(test$target_ind-test$pred)/test$target_ind觀察預測結果
kable(test) %>% kable_styling() %>% scroll_box(height = "200px")| target_ind | month | R1 | R4 | R6 | R8 | R12 | pred | diff | |
|---|---|---|---|---|---|---|---|---|---|
| 115 | 27595 | 7 | 22316 | 25453 | 14672 | 31222 | 29009 | 29866.35 | 0.0823102 |
| 116 | 25451 | 8 | 27595 | 32683 | 17543 | 38641 | 25500 | 27798.10 | 0.0922204 |
| 117 | 25421 | 9 | 25451 | 22449 | 25453 | 14672 | 24166 | 23526.15 | 0.0745390 |
| 118 | 25288 | 10 | 25421 | 22316 | 32683 | 17543 | 26960 | 26142.57 | 0.0337935 |
| 119 | 32568 | 11 | 25288 | 27595 | 22449 | 25453 | 31222 | 32046.22 | 0.0160212 |
| 120 | 35110 | 12 | 32568 | 25451 | 22316 | 32683 | 38641 | 37836.65 | 0.0776601 |
| 121 | 16052 | 1 | 35110 | 25421 | 27595 | 22449 | 14672 | 15656.60 | 0.0246323 |
| 122 | 22146 | 2 | 16052 | 25288 | 25451 | 22316 | 17543 | 18062.03 | 0.1844114 |
| 123 | 21198 | 3 | 22146 | 32568 | 25421 | 27595 | 25453 | 25333.64 | 0.1950956 |
| 125 | 22084 | 5 | 19543 | 16052 | 32568 | 25421 | 22449 | 23587.93 | 0.0681006 |
| 126 | 23816 | 6 | 22084 | 22146 | 35110 | 25288 | 22316 | 23142.11 | 0.0282955 |
| 127 | 29961 | 7 | 23816 | 21198 | 16052 | 32568 | 27595 | 29068.61 | 0.0297850 |
| 128 | 26773 | 8 | 29961 | 19543 | 22146 | 35110 | 25451 | 27764.79 | 0.0370443 |
| 129 | 26635 | 9 | 26773 | 22084 | 21198 | 16052 | 25421 | 25046.73 | 0.0596311 |
| 130 | 26972 | 10 | 26635 | 23816 | 19543 | 22146 | 25288 | 27235.01 | 0.0097512 |
| 131 | 30207 | 11 | 26972 | 29961 | 22084 | 21198 | 32568 | 32121.74 | 0.0633874 |
| 132 | 38687 | 12 | 30207 | 26773 | 23816 | 19543 | 35110 | 33366.23 | 0.1375338 |
| 133 | 16974 | 1 | 38687 | 26635 | 29961 | 22084 | 16052 | 16285.53 | 0.0405605 |
| 134 | 21697 | 2 | 16974 | 26972 | 26773 | 23816 | 22146 | 21256.25 | 0.0203140 |
| 135 | 24179 | 3 | 21697 | 30207 | 26635 | 29961 | 21198 | 22426.49 | 0.0724808 |
| 136 | 23757 | 4 | 24179 | 38687 | 26972 | 26773 | 19543 | 23975.80 | 0.0092099 |
| 137 | 25013 | 5 | 23757 | 16974 | 30207 | 26635 | 22084 | 23622.76 | 0.0555806 |
| 138 | 24019 | 6 | 25013 | 21697 | 38687 | 26972 | 23816 | 24172.58 | 0.0063942 |
| 139 | 30345 | 7 | 24019 | 24179 | 16974 | 30207 | 29961 | 30269.35 | 0.0024928 |
| 140 | 24488 | 8 | 30345 | 23757 | 21697 | 38687 | 26773 | 27565.18 | 0.1256609 |
| 141 | 25156 | 9 | 24488 | 25013 | 24179 | 16974 | 26635 | 25769.57 | 0.0243906 |
| 142 | 25650 | 10 | 25156 | 24019 | 23757 | 21697 | 26972 | 27875.78 | 0.0867750 |
| 143 | 30923 | 11 | 25650 | 30345 | 25013 | 24179 | 30207 | 31233.41 | 0.0100383 |
| 144 | 37240 | 12 | 30923 | 24488 | 24019 | 23757 | 38687 | 36687.52 | 0.0148357 |
| 145 | 17466 | 1 | 37240 | 25156 | 30345 | 25013 | 16974 | 17504.66 | 0.0022133 |
| 146 | 19463 | 2 | 17466 | 25650 | 24488 | 24019 | 21697 | 21147.18 | 0.0865324 |
| 147 | 24352 | 3 | 19463 | 30923 | 25156 | 30345 | 24179 | 24530.17 | 0.0073165 |
| 148 | 26805 | 4 | 24352 | 37240 | 25650 | 24488 | 23757 | 25626.36 | 0.0439710 |
| 149 | 25236 | 5 | 26805 | 17466 | 30923 | 25156 | 25013 | 25069.21 | 0.0066092 |
| 150 | 24735 | 6 | 25236 | 19463 | 37240 | 25650 | 24019 | 24365.18 | 0.0149515 |
| 151 | 29356 | 7 | 24735 | 24352 | 17466 | 30923 | 30345 | 30510.43 | 0.0393253 |
| 152 | 31234 | 8 | 29356 | 26805 | 19463 | 37240 | 24488 | 26668.72 | 0.1461639 |
| 153 | 22724 | 9 | 31234 | 25236 | 24352 | 17466 | 25156 | 24977.09 | 0.0991502 |
| 154 | 28496 | 10 | 22724 | 24735 | 26805 | 19463 | 25650 | 26200.82 | 0.0805439 |
| 155 | 32857 | 11 | 28496 | 29356 | 25236 | 24352 | 30923 | 31581.82 | 0.0388100 |
| 156 | 37198 | 12 | 32857 | 31234 | 24735 | 26805 | 37240 | 36807.50 | 0.0104978 |
| 157 | 13652 | 1 | 37198 | 22724 | 29356 | 25236 | 17466 | 18000.20 | 0.3185030 |
| 158 | 22784 | 2 | 13652 | 28496 | 31234 | 24735 | 19463 | 19563.98 | 0.1413282 |
| 159 | 23565 | 3 | 22784 | 32857 | 22724 | 29356 | 24352 | 25105.21 | 0.0653603 |
| 160 | 26323 | 4 | 23565 | 37198 | 28496 | 31234 | 26805 | 28221.70 | 0.0721308 |
| 161 | 23779 | 5 | 26323 | 13652 | 32857 | 22724 | 25236 | 25050.73 | 0.0534812 |
| 162 | 27549 | 6 | 23779 | 22784 | 37198 | 28496 | 24735 | 24998.05 | 0.0925970 |
| 163 | 29660 | 7 | 27549 | 23565 | 13652 | 32857 | 29356 | 30189.14 | 0.0178402 |
| 164 | 23356 | 8 | 29660 | 26323 | 22784 | 37198 | 31234 | 30663.99 | 0.3128958 |
summary(test)## target_ind month R1 R4
## Min. :13652 Min. : 1.000 Min. :13652 Min. :13652
## 1st Qu.:23565 1st Qu.: 4.000 1st Qu.:23565 1st Qu.:22724
## Median :25288 Median : 7.000 Median :25288 Median :25236
## Mean :26041 Mean : 6.592 Mean :25986 Mean :25694
## 3rd Qu.:29356 3rd Qu.: 9.000 3rd Qu.:29356 3rd Qu.:28496
## Max. :38687 Max. :12.000 Max. :38687 Max. :38687
## R6 R8 R12 pred
## Min. :13652 Min. :14672 Min. :14672 Min. :15657
## 1st Qu.:22316 1st Qu.:22449 1st Qu.:22449 1st Qu.:23623
## Median :25156 Median :25288 Median :25288 Median :25626
## Mean :25533 Mean :26212 Mean :25745 Mean :26235
## 3rd Qu.:29356 3rd Qu.:30207 3rd Qu.:29009 3rd Qu.:29866
## Max. :38687 Max. :38687 Max. :38687 Max. :37837
## diff
## Min. :0.002213
## 1st Qu.:0.017840
## Median :0.053481
## Mean :0.068024
## 3rd Qu.:0.086532
## Max. :0.318503
從結果可以看到最大百分誤差率為31.9%,平均誤差為7%,整體預測結果不錯。
推薦閱讀:
Edward - 迴歸模型介紹
本篇文章按照游皓麟老師的實戰R語言預測分析介紹進行實作,含金量相當高的好書。
時序思考題:內建資料集Airmiles
各位有興趣可以再用R內建的資料集 airmiles 思考看看,跟本文的範例有哪些特性相同或相異之處?
這個資料集是美國某航空公司的全年飛機里程資料。
airmiles;summary(airmiles)## Time Series:
## Start = 1937
## End = 1960
## Frequency = 1
## [1] 412 480 683 1052 1385 1418 1634 2178 3362 5948 6109 5981
## [13] 6753 8003 10566 12528 14760 16769 19819 22362 25340 25343 29269 30514
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 412 1580 6431 10528 17532 30514
plot(airmiles) #先看一下折線圖acf(airmiles) #自相關pacf(airmiles) #偏相關