构建自相关函数

Build a Function for Autocorrelation

我构建了以下 AR(2) 模型:

# Generate noise
noise=rnorm(200, mean=0, sd=1) 

# Introduce a variable
ma_1=NULL
# Set the value of parameter theta1
theta1=0.7

# Loop for generating MA(1)
for(i in 2:200)
{
  ma_1[i] = 0.1 + noise[i] + theta1*noise[i-1]
}

plot(ma_1, main="MA(1) Model", type = "l", col= "blue")

我正在尝试创建一个函数 来计算自相关。我想建立一个流程,以便找到它,然后绘制一个图。

有什么想法吗?

采用 Enders 的应用计量经济学时间序列(第 4 版,第 67 页)的经验自相关公式:

哪里

那我们写代码就可以了):

acf.new = function(y, smax, plot){

  values = numeric()
  for(i in 0:smax){
    values[i+1] = sum((y-mean(y))*(lag(y, i)-mean(y))) / sum((y-mean(y))^2)}
  
  if(plot){
    df = data.frame(Acf=values, Lag=0:smax)

    graph = ggplot(df, aes(x=Lag, y=Acf)) +
      geom_hline(aes(yintercept = 0)) +
      geom_segment(mapping=aes(xend=Lag, yend=0))

    plot(graph)}

  return(values)}

剧情:

Endres也给出了acf方差的公式:

您也可以像 acf 一样使用它来绘制置信区间。如果你愿意,我也可以写代码。

检查输出(使用 set.seed(10)):

> cbind(acf(ma_1, 23, plot=FALSE)$acf, acf.new(ma_1, 23))

             [,1]        [,2]
 [1,]  1.00000000  1.00000000
 [2,]  0.54446735  0.54446735
 [3,]  0.10622437  0.10622437
 [4,]  0.05674789  0.05674789
 [5,]  0.07363862  0.07363862
 [6,]  0.06474101  0.06474101
 [7,]  0.03218385  0.03218385
 [8,] -0.00330324 -0.00330324
 [9,] -0.07926465 -0.07926465
[10,] -0.10776187 -0.10776187
[11,] -0.11907161 -0.11907161
[12,] -0.09931743 -0.09931743
[13,]  0.01019203  0.01019203
[14,]  0.07401695  0.07401695
[15,]  0.07139094  0.07139094
[16,] -0.02332401 -0.02332401
[17,] -0.14173214 -0.14173214
[18,] -0.12507718 -0.12507718
[19,] -0.04592383 -0.04592383
[20,] -0.05617885 -0.05617885
[21,] -0.12087564 -0.12087564
[22,] -0.05018037 -0.05018037
[23,] -0.01171499 -0.01171499
[24,] -0.10177784 -0.10177784