R語言做時間序列(未完)

2021-07-03 03:36:25 字數 3178 閱讀 5815

我學的時間序列課程,實驗課都是在sas做的,一直想用r把大概的思路捋順一下,所以這篇東西並沒有給出很多的程式結果,

更多地設計做時間序列的思路

#產生時間序列資料

#產生規則的時間序列,frequency=1,4,12分別對應年度,季度,月度

timeseries = ts(x,start=c(1940,01),frequency=1)

#產生不規則的時間序列

library(zoo)

#以天為單位的時間序列

date = seq(as.date("2012-01-01"),length=500,by="day")

timeseries = zoo(1:500,date)

#讀入資料

kings = scan("",skip=3)

#轉化成ts格式,frequency=1,4,12分別對應年度季度,月度

#要生成以天為單位的資料,只好生成一列時間序列數

kingsts = ts(kings,start=c(1940),frequency=1)

#有了資料,下一步就是用box.test()檢驗純隨機性,根據p值可以輕易判斷

box.test(kingsts,lag=1,type="box-pierce") #缺點是只可以做某一階的判斷

#可以生成各階檢驗的結果彙總表,一般是檢驗1到12階,一般短期延遲之內不存在相關關係,長期之內更不會有

#通過type = c("box-pierce", "ljung-box")控制方法,分別是q統計量(大樣本)、lb統計量(小樣本)

lag = c()

q.value = c()

p.value = c()

for(i in 1:12)

data.frame(lag=lag,q.value=q.value,p.value=p.value)

#觀察隨機性檢驗的結果,如果是純隨機序列,沒有再分析的必要了

#上述的結果表明該序列不是純隨機序列,可認為是非隨機的

#1、時序圖檢驗,就是簡單的觀察是否平穩,直接plot()即可

#2、自相關圖檢驗,平穩序列會快速趨向0

acf(kingsts) #自相關圖

pacf(kingsts) #偏自相關圖

#3、單位根檢驗

#平穩性檢驗之後,如果是不平穩就有確定性分析和隨機性分析,下面先是隨機性分析

#可以知道kingsts是非平穩的

#這裡不講平穩序列,因為這會在後面被不平穩序列分析覆蓋到

#隨機性分析,先做差分使其平穩

kingstsdiff1 = diff(kingsts,differences=1)

plot.ts(kingstsdiff1) #觀察影象

#進一步通過單位根檢驗是否平穩,這裡影象觀察已經平穩了

#平穩後就是確定arima模型的階數了

#可以觀察自相關圖、偏自相關圖來確定,acf(),pacf()操作即可

#也可以用forecast包的auto.arima()自動識別最優的姐階數,識別標準的引數ic=c("aicc", "aic", "bic")

library(forecast)

auto.arima(kingsts)#這裡可以分別試下aic和bic準則下給出來的模型階數是否一樣,不一樣的話可以再分析選擇

#知道模型的階數之後,擬合模型,得出模型引數,引數估計方法method = c("css-ml", "ml", "css")

fit = arima(kingsts,order=c(0,1,1))

#擬合模型後,並不能馬上用於**,還要觀察模型的性質怎樣,引數顯著性,殘差序列是否純隨機、是否同方差

#首先檢驗模型的引數是否顯著,通過t檢驗就可

#再檢驗殘差的純隨機性,如果殘差序列是隨即的話,表明有用資訊被提取的很乾淨,

#否則表明相關資訊還沒提取乾淨,需要重新選擇模型(不建議),一般是對殘差序列做自回歸(殘差自回歸模型)

tsdiag(fit) #影象觀察法

box.test(fit$residuals,type="ljung-box",lag=6, fitdf=1) #更嚴密的檢驗方法

#檢驗1到12階的函式

lag = c()

q.value = c()

p.value = c()

for(i in 1:12)

data.frame(lag=lag,q.value=q.value,p.value=p.value)

#還有乙個是dw檢驗(不好用,有誤差),所以由dw檢驗衍生durbin h和duebin t統計量,這也是常用的自變數相關檢驗方法,不過在r中不知道怎麼做

#上述結果表明殘差序列時隨機的。如果是非隨機的,就要做殘差自回歸了

#檢驗是否異方差

#殘差平方圖,觀察法

plot(fit$residuals*fit$residuals)

#更嚴謹的檢驗方法有g-q檢驗(各種不好,勿用),還有white檢驗(回歸模型中可以用,時間序列不太適合),

#arch檢驗,包括portmanteau q檢驗、lm檢驗,其實arch檢驗跟white檢驗並沒有本質上的區別,只不過更適合於時間序列資料

library("fints") #arch檢驗的包,archtest(),不過只能arch_lm檢驗(檢驗殘差平方序列是否隨機的)

autocortest(fit$residuals) #該包用autocortest()還可以檢驗殘差序列的序列相關性(等同於box.test()檢驗隨機性的作用)

archtest(fit$residuals,lags=12)

#寫成乙個函式檢驗1到12階的

lag = c()

lm.value = c()

p.value = c()

for(i in 1:12)

data.frame(lag=lag,lm.value=lm.value,p.value=p.value)

#觀察上述的結果,在0.02水平下,殘差平方序列是純隨機的,在0.05下,是非隨機的

#當殘差平方序列是非隨機的,然後擬合garch(arch是garch當p=0時的特例)

library("fgarch")

#如果是沒什麼毛病的模型的**,forecast包的forecast()函式

x = forecast(fit,h=5,level=99.5)

plot.forecast(x)

#還可以畫出置信區間

R語言 時間序列分析

時間序列分析 1.對時間序列的描述 2.利用前面的結果進行 ts是時間序列的英文簡稱 可以使用sys.date 函式檢視當前系統的時間 用seq函式創造連續的時間點 ts函式生成時間序列,可以很方便的將向量轉化成時間序列 egsales round runif 50,min 50,max 100 s...

R語言 時間序列arima模型

t c a1 yt 1 a2y t 2 apyt p t b1 t 1 b2 t 2 bq t qyt c a1yt 1 a2yt 2 apyt p t b1 t 1 b2 t 2 bq t qtyt t t l yt c l t l yt c l t l 1 a1l a2l2 apl p l 1 ...

R語言 ARIMA時間序列模型

本實驗使用r的fecofin包中的cpi.dat資料集。cpi是乙個經季節調整的美國消費 指數,此資料是月度的。資料載入方法 首先安裝該資料所在包 install.packages fecofin repos 載入資料 originaldata cpi.dat 應用arima p,i,q 對1977...