ARMA(1,1)和AR(2)自相关函数的R语言实现
ARMA(1,1)模型
ARMA(1,1)模型的自相关函数
模型定义的方程是:
Yt=ϕYt−1+et−θet−1
为得到Yule-Walk形式的方程组,首先:
E(etYt)=E(et(ϕYt−1+et−θet−1))=σe2
或
E(et−1Yt)=E(et−1(ϕYt−1+et−θet−1))=(ϕ−θ)σe2
在其定义式两边乘以Yt−k并求期望值,得到:
γ0γ1γk=ϕγ1+[1−θ(ϕ−θ)σe2]=ϕγ0−θσe2=ϕγk−1⎭⎪⎪⎬⎪⎪⎫
求解前两个方程得到:
γ0=1−ϕ21−2ϕθ+θ2σe2
进一步通过递推关系式,得到:
ρk=1−2ϕθ+θ2(1−θϕ)(ϕ−θ)ϕk−1,k>1
值得注意的是,随着之后长度k的增加,该模型的相关函数指数递减。相关函数的初始值 ρ0=0,从 ρk 的递推式中可以看到,它的形状依赖于 ρ1 和 ϕ 的符号。
ARMA(1,1)模型自相关函数的R语言函数
按照前述中的递推式可构造求解ARMA(1,1)模型自相关函数并画出其自相关图像的函数 ARMA1.1 <- function(phi=phi, theta=theta, max.lag=20, pic=T, ylim=NULL)
1 2 3 4 5 6 7 8 9 10 11 12 13
| ARMA1.1 <- function(phi=phi, theta=theta, max.lag=20, pic=T, ylim=NULL){ rho = NULL rho[1] <- 1 for (k in 1:max.lag) { rho[k+1] <- (1-theta*phi)*(phi-theta)/(1-2*theta*phi+theta^2)*phi^(k-1) } if(pic == T){ plot(x = 1:max.lag, y = rho[-1], type = "h", xlab = "Lag", ylab = "ACF", ylim = ylim) abline(h=0) } out <- list(phi = phi, theta = theta, rho = rho) }
|
该函数包含五个参数:
-
phi ARMA(1,1)模型中自回归部分的系数,即ϕ.
-
theta ARMA(1,1)模型中滑动平均部分的系数,即θ.
-
max.lag ARMA(1,1)模型中需要求解的最大滞后长度k,默认为k=20.
-
pic 逻辑值,pic=T
时绘制自相关函数图像,默认pic=T
.
-
ylim 一个二维的向量,作为绘制自相关函数图像的纵坐标范围,默认为ylim=NULL
该函数的输出为一个列表,其中phi为输入的 phi,theta 为输入的 theta,rho 为计算所得的max.lag+1个自相关函数(第一个为 ρ0=1)。
AR(2)模型
AR(2)模型的自相关函数
模型定义的方程是:
Yt=ϕ1Yt−1+ϕ2Yt−2+et
为推导其自相关函数,在其两边乘上Yt−k,并求期望。假定平稳、零均值,并且et独立于Yt−1,得到:
γk=ϕ1γk−1+ϕ2γk−2,k=1,2,3,⋯
两边再除以γ0,
ρk=ϕ1ρk−1+ϕ2ρk−2,k=1,2,3,⋯
称上述方程为Yule-Walker方程。
下面需求解 k=1 和 k=2 时对应的ρ值。首先令 k=1,因 ρ0=1,ρ−1=ρ1,得到 ρ1=ϕ1+ϕ2ρ2 ,整理得:
ρ1=1−ϕ2ϕ1
再令 k=2,将上式带入Yule-Walker方程中,得出
ρ2=1−ϕ2ϕ2(1−ϕ2)+ϕ12
至此我们可以通过Yule-Walker方程求出AR(2)模型的自相关函数。
下面在给出计算ρk的显示表达:
ρk=(G1−G2)(1+G1G2)(1−G22)G1k+1−(1−G12)G2k+1,k≥0
其中,G1=2ϕ−ϕ12+4ϕ2、G2=2ϕ+ϕ12+4ϕ2
特别地,当ϕ12+4ϕ2<0时,其可表示为:
ρk=Rksin(ϕ)sin(θk+Φ),k≥0
其中,R=−ϕ2 为阻尼因子,θ=arccos(ϕ1/(2−ϕ2)) 为频率,ϕ=arctan[(1−ϕ2)/(1+ϕ2)]
AR(2)模型自相关函数的R语言函数
按照前述中的递推式可构造求解AR(2)模型自相关函数并画出其自相关图像的函数 AR2 <- function(phi1=phi1, phi2=phi2, max.lag = 20, pic = T, ylim=c(-1,1))
,此函数还可求出其特征根为复数时的阻尼因子R和Θ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| AR2 <- function(phi1=phi1, phi2=phi2, max.lag = 20, pic = T, ylim=c(-1,1)){ rho = NULL;root=NULL; rho1 <- phi1/(1-phi2) rho2 <- (phi2*(1-phi2)+phi1^2)/(1-phi2) rho[1] <- rho1 rho[2] <- rho2 for (k in 3:max.lag) { rho[k] <- phi1*rho[k-1]+phi2*rho[k-2] } if(pic == T){ plot(x = 1:max.lag, y = rho, type = "h", xlab = "Lag", ylab = "ACF", ylim = ylim) abline(h=0) } if(phi1^2+4*phi2 < 0){ root1 <- (phi1+sqrt(as.complex(phi1^2+4*phi2)))/(-2*phi2) root2 <- (phi1-sqrt(as.complex(phi1^2+4*phi2)))/(-2*phi2) R <- sqrt(-phi2) Theta <- acos(phi1/2*sqrt(-phi2)) }else{ root1 <- (phi1+sqrt(phi1^2+4*phi2))/(-2*phi2) root2 <- (phi1-sqrt(phi1^2+4*phi2))/(-2*phi2) R <- NULL Theta <-NULL } out <- list(phi=c(phi1,phi2), rho = rho, root = c(root1, root2), R = R, Theta = Theta) }
|
该函数包含五个参数:
-
phi1,phi2 AR(2)模型中的两个参数,即ϕ1,ϕ2.
-
max.lag AR(2)模型中需要求解的最大滞后长度k,默认为k=20.
-
pic 逻辑值,pic=T
时绘制自相关函数图像,默认pic=T
.
-
ylim 一个二维的向量,作为绘制自相关函数图像的纵坐标范围,默认为ylim=c(-1,1)
该函数的输出为一个列表,其中phi为输入的phi为输入的两个参数,rho为计算所得的max.lag个自相关函数,root为特征方程的两个根,R为阻尼系数,Theta为频率。