1. 程式人生 > >用R語言隨機生成AR,MA,ARMA,ARIMA模型的命令,畫出acf,pacf圖

用R語言隨機生成AR,MA,ARMA,ARIMA模型的命令,畫出acf,pacf圖

set.seed(10);x=rnorm(150)
par(mfrow=c(1,2))#一行兩列,兩個圖
ts.plot(x);acf(x)


set.seed(101);
x=NULL;for(i in 1:200)x=c(x,0.5-0.3*i+rnorm(1))#隨機產生數
par(mfrow=c(2,2));ts.plot(x);#畫時間序列圖
acf(x);ts.plot(diff(x));acf(diff(x))#diff(x)是對原序列進行差分


set.seed(10)
#產生63個ms(2)隨機數
rw<-arima.sim(n=63,list(ma=c(0.5,0.3)))
#產生63個符合arma(2,2)模型的數字
arima.sim(n = 63, list(ar = c(0.8897, -0.4858), ma = c(-0.2279, 0.2488)),
          sd = sqrt(0.1796))
#產生ARIMA(1,1,1),第一個數字是AR部分,第二個數字是嗲表差分幾次
#第三個數字是MA部分

arima.sim(list(order = c(1,1,1), ar = 0.7,ma=0.3), n = 200)

#acf()函式中plot是一個邏輯值,他的用法,如果是T,預設也是T就會
#把acf值給畫出來,如果是f,ACF值就不會被畫出來
set.seed(10);x=rnorm(150)
par(mfrow=c(1,2))#一行兩列,兩個圖
ts.plot(x);acf(x,plot=T)

#注意acf(x,plot=T),acf(x,plot=F)區別

acf(x,plot=T,main="dai T")#如果是f就不會畫出圖


set.seed(63010)
tw<-arima.sim(n=200,list(ma=c(0.5,0.3)))
tw1<-acf(tw,plot = F)
#==兩個等號是恆等於,是個全域性變數,一個等號就是賦值,注意theta的書寫
plot(tw1,type="o",pch=16,main=expression(paste("ma(2):",theta[1]==0.5,",",theta[2]==0.3)))

plot(acf(arima.sim(n=200,list(ma=c(0.5,0.3))),plot = F),type="o",pch=16,main=expression(paste("ma(2):",theta[1]==0.5,",",theta[2]==0.3)))


#main=expression(paste("ma(2):",theta[1]==0.5,",",theta[2]==0.3)),注意這個expression的用法

#模擬arma(2,2)模型
tw<-arima.sim(n=200,list(ar=c(0.5,0.3),ma=c(0.5,0.3)))
tw1<-acf(arima.sim(n=200,list(ar=c(0.5,0.3),ma=c(0.5,0.3))),plot = F)
plot(tw1,type="o",pch=16,main=expression(paste("arma(2,2):",phi[1]==0.5,",",phi[2]==0.3,",",
                theta[1]==0.5,",",theta[2]==0.3)),cex.main=0.7)
#連著寫
plot(acf(arima.sim(n=200,list(ar=c(0.5,0.3),ma=c(0.5,0.3))),plot = F),
     type="o",pch=16,main=expression(paste("arma(2,2):",phi[1]==0.5,",",

phi[2]==0.3,",",theta[1]==0.5,",",theta[2]==0.3)),cex.main=0.7)


#模擬arma(2,2)模型畫pacf圖,只需要在上面的acf換成pacf值就行了
tw<-arima.sim(n=200,list(ar=c(0.5,0.3),ma=c(0.5,0.3)))
tw1<-pacf(arima.sim(n=200,list(ar=c(0.5,0.3),ma=c(0.5,0.3))),plot = F)
plot(tw1,type="o",pch=16,main=expression(paste("arma(2,2):",phi[1]==0.5,",",phi[2]==0.3,",",
                                               theta[1]==0.5,",",theta[2]==0.3)),cex.main=0.7)
#連著寫
plot(pacf(arima.sim(n=200,list(ar=c(0.5,0.3),ma=c(0.5,0.3))),plot = F),
     type="o",pch=16,main=expression(paste("arma(2,2):",phi[1]==0.5,",",

                                           phi[2]==0.3,",",theta[1]==0.5,",",theta[2]==0.3)),cex.main=0.7)


#模擬ARIMA模型,並畫出acf、pacf圖

set.seed(63010)
par(mfrow=c(1,3))
tw<-arima.sim(n=200,list(order=c(1,1,1),ar=0.3,d=1,ma=0.4))
tw1<-acf(tw,plot=F)
tw2<-pacf(tw,plot=F)
plot(tw,type="o",pch=16,ylab="tw")
title(expression(paste("arima(1,1,1):",phi[1]==0.4,",",theta[1]==0.4,cex.main=0.7)))
plot(tw1,type="o",pch=16,ylab="acf圖")
plot(tw2,type="o",pch=16,ylab="pacf圖")
#title是在圖畫好之後加標題

title(expression(paste("arima(1,1,1):",phi[1]==0.4,",",theta[1]==0.4,cex.main=0.7)))


#注意ar部分,與ma部分系數的書寫方式