r语言:时间序列ARMA基础学习26二月,2013,oldlee11,R语言与数据挖掘,时间序列分析,?010203040506070809101112131415161718192021#########################################术语##################################白噪音:其均值=0,并且独立分布的(同时间无关)#稳定时间序列:任意j--i时间段的序列:其均值相等#自相关系数acf图:研究y[t]同y[t-l]序列之间的相关性#在纯的ma(q)序列下,acf图形表现为q+1以后的自相关系数约为0(虚线内)#偏相关系数pacf图:在y[t]同y[t-l]之间的序列固定的情况下,研究研究y[t]同y[t-l]序列之间的相关性#在纯的ar(p)序列下,pacf图形表现为p+1以后的偏相关系数约为0(虚线内)#扩展相关系数图eacf:如果y[t]不是纯的ar或ma,而是arma(混合体),无法通过acf确定q,也不能通过pacf确认p,需要通过eacf确认p和q###################################################################################################################################模拟产生maararma序列########################################################MA时间序列的模拟试验:产生一个ma时间序列y.ma-function(a1,a2,a3=0,a4=0,num=200,pic=TRUE){#MA滑动平均时间序列的模拟(也可以使用filter函数)e-rnorm(num,0,1)#模拟白噪声,均值=0result-0result[1]-e[1]result[2]-e[2]-a1*e[1]222324252627282930313233343536result[3]-e[3]-a1*e[2]-a2*e[1]result[4]-e[4]-a1*e[3]-a2*e[2]-a3*e[1]for(tin5:num){result[t]-e[t]-a1*e[t-1]-a2*e[t-2]-a3*e[t-3]-a4*e[t-4]}#构造一个ma型时间序列if(pic==TRUE){#画图形dev.new()ts.plot(result,main=paste(y.ma[t]=e[t]-,a1,*e[t-1]-,a2,*e[t-2]-,a3,*e[t-3]-,a4,*e[t-4]的时间序列散点图))dev.new()lag.plot(result,9,do.lines=FALSE)dev.new()par(mfrow=c(2,1))acf(result,30,main=paste(y.ma自相关图,y.ma[t]=e[t]-,a1,*e[t-1]-,a2,*e[t-2]-,a3,*e[t-3]-,a4,*e[t-4]))pacf(result,30,main=paste(y.ma偏自相关图,y.ma[t]=e[t]-,a1,*e[t-1]-,a2,*e[t-2]-,a3,*e[t-3]-,a4,*e[t-4]))}result}y.ma-y.ma(0.92,0.65)结果一:绘制散点图结果二:绘制出y[t]同y[t-1](延迟1)、y[t-2](延迟2)……..y[t-9](延迟9)的2维散点图,用以观察y[t]同y[t-i]的相关性(i=1–9)结果三:绘制自相关和偏自相关图(在虚线外的表示有相关性)可以看到:1)在纯的ma(q)序列下,acf图形表现为q+1以后的自相关系数约为0(虚线内)2)在纯的ma(q)序列下,pacf则不规则的会大于1/-1可以通过acf图确定q的数值?01020304050607080910111213141516171819202122#####AR时间序列的模拟试验:产生一个ar时间序列y.ar-function(b1,b2,b3=0,b4=0,num=200,pic=TRUE){#AR自回归型时间序列的模拟(也可以使用filter函数)e-rnorm(num,0,1)#模拟白噪声,均值=0result-0result[1]-e[1]result[2]-e[2]+b1*result[1]result[3]-e[3]+b1*result[2]+b2*result[1]result[4]-e[4]+b1*result[3]+b2*result[2]+b3*result[1]for(tin5:num){result[t]-e[t]+b1*result[t-1]+b2*result[t-2]+b3*result[t-3]+b4*result[t-4]}#构造一个ar型时间序列if(pic==TRUE){#画图形dev.new()ts.plot(result,main=paste(y.ar[t]=e[t]+,b1,*y.ar[t-1]+,b2,*y.ar[t-2]+,b3,*y.ar[t-3]+,b4,*y.ar[t-4]的时间序列散点图))dev.new()lag.plot(result,9,do.lines=FALSE)dev.new()par(mfrow=c(2,1))acf(result,30,main=paste(y.ar自相关图,y.ar[t]=e[t]+,b1,*y.ar[t-1]+,b2,*y.ar[t-2]+,b3,*y.ar[t-3]+,b4,*y.ar[t-4]))pacf(result,30,main=paste(y.ar偏自相关图,y.ar[t]=e[t]+,b1,*y.ar[t-1]+,b2,*y.ar[t-2]+,b3,*y.ar[t-3]+,b4,*y.ar[t-4]))}result}y.ar-y.ar(0.92,-0.65)结果一:绘制散点图结果二:绘制出y[t]同y[t-1](延迟1)、y[t-2](延迟2)……..y[t-9](延迟9)的2维散点图,用以观察y[t]同y[t-i]的相关性(i=1–9)结果三:绘制自相关和偏自相关图(在虚线外的表示有相关性)1)在纯的ar(q)序列下,pacf图形表现为q+1以后的自相关系数约为0(虚线内)2)在纯的ar(q)序列下,acf则不规则的会大于1/-1可以通过pacf图确定p的数值?0102030405060708091011121314151617181920#####ARMA时间序列的模拟试验:产生一个arma时间序列library(TSA)y.arma-function(a1,a2,a3=0,a4=0,b1,b2,b3=0,b4=0,num=200,pic=TRUE){result-y.ma(a1=a1,a2=a2,a3=a3,a4=a4,pic=F,num=num)+y.ar(b1=b1,b2=b2,b3=b3,b4=b4,pic=F,num=num)#产生自回归滑动平均时间序列ARIMAexp.str-paste(y.arma[t]=e[t]-,a1,*e[t-1]-,a2,*e[t-2]-,a3,*e[t-3]-,a4,*e[t-4]+,b1,*y.arma[t-1]+,b2,*y.arma[t-2]+,b3,*y.arma[t-3]+,b4,*y.arma[t-4])if(pic==TRUE){#画图形dev.new()ts.plot(result,main=paste(exp.str,的时间序列散点图))dev.new()lag.plot(result,9,do.lines=FALSE)dev.new()par(mfrow=c(2,1))acf(result,30,main=paste(exp.str,的自相关图))pacf(result,30,main=paste(exp.str,的偏自相关图))}print(paste(exp.str,的扩展相关图。用于确认p和q的数值))eacf(result)#观察eacf图,确定p和q,###需要加载:library(TSA)result}y.arma(a1=0.92,a2=0.65,b1=0.92,b2=-0.65,num=100)结果一:绘制散点图结果二:绘制出y[t]同y[t-1](延迟1)、y[t-2](延迟2)……..y[t-9](延迟9)的2维散点图,用以观察y[t]同y[t-i]的相关性(i=1–9)结果三:绘制自相关和偏自相关图(在虚线外的表示有相关性)1)在arma(q)序列下,acf和pacf图形全市不规则的所以在arma下acf和pacf并不能用于确定p和q,此时用eacf来大致确定AR/MA0123456789101112130ooxxoooooooxoo1xooooooooooxoo2xooooooooooxoo3xooooooooooooo4xooooooooooooo5xooooooooooooo6oooooooooooooo7xooooooooooooo如何使用该改图,我会以后补充(基本就是查看0的倒三角)以上介绍了arma的一般p和q情况,下面来阐述分析一个arma的一般过程?001002003004005006#################################################################使用差分log对不稳定序列进行“稳定化”并计算d##################################################################取差分,使其稳定化:#代码:#diff(data)#1阶差分,d=1#diff(data,2)#2阶差分,d=2#取log再差点,使其稳定化:#代码:#diff(log(data))#1阶差分,d=1#diff(log(data),2)#2阶差分,d=2#此处不做代码的实验,各位可以自己尝试007008009010011012013014015016017018019###################################################通过acf图pacf图eacf来计算pq#######################################################step1通过acf和pacf确定序列的类型:#acfpacf#MA(q)lag=q+1的自相关系数全部约小于0|逐步将接近0#AR(p)逐步将接近0|lag=p+1的自相关系数全部约小于0#ARMA(p,q)逐步将接近0|逐步将接近0####step2序列的类型确定后:求pq#如果是MA(q)类型的,看acf图,看前几个不为0#如果是AR(p)类型的,看pacf图,看前几个不为0#如果是ARMA(p,q)类型的,看eacf图,看x三角形的顶端#代码:data是向量数据library(TSA)plot.cf-function(data){dev.new()ts.plot(data,main=时间序列散点图)dev.new()lag.plot(data,9,do.lines=FALSE)dev.new()par(mfrow=c(2,1))acf(data,30,main=自相关图)pacf(data,30,main=偏自相关图)020021022023024025026027028029030031032eacf(data)}data-y.arma(a1=0.92,a2=0.65,b1=0.92,b2=-0.65,num=100,pic=F)plot.cf(data)###################################################产生ariam模型####