使用for循环提取自相关时间序列的重要系数列表时R中的错误

ruarlubt  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(112)

bounty还有6天到期。回答此问题可获得+50声望奖励。gerardlambert希望引起更多关注这个问题。

我试图运行一个for循环,以创建一个列表/数据框对象,它将给予我一组与0显著不同的ACF系数(在置信区间之外)。我不太确定我的for循环是否能做到这一点,但无论如何,它给了我以下错误消息:

Error in if (acf_res$ci[2, i + 1] < acf_res$acf[i + 1] || acf_res$ci[1,  : 
   missing value where TRUE/FALSE needed

以下是我目前的代码,我正在研究法国1981年至1999年电力生产的单变量时间序列:

production_periode_1 <-periode_1$`Production brute d'électricité nucléaire (en GWh)`
prod_periode_1 <- ts(periode_1, frequency=12)
prod_periode_1 <- ts(production_periode_1, start=c(1981,1) , end=c(1999,12), 
frequency=12)
summary(prod_periode_1)
plot.ts(prod_periode_1)
plot(ts.union(prod_periode_1,log(prod_periode_1)))

acf(prod_periode_1,lag.max=150)
acf(diff(prod_periode_1),lag.max=150)
acf(diff(diff(prod_periode_1,12)),lag.max=150)

pacf(prod_periode_1, lag.max = 250)
pacf(diff(prod_periode_1), lag.max = 250)
pacf(diff(diff(prod_periode_1,12), lag.max = 250))

for (i in 1:228) {
  acf_res <- acf(prod_periode_1, lag.max = i, plot = FALSE)
  if (acf_res$ci[2, i+1] < acf_res$acf[i+1] || acf_res$ci[1, i+1] > acf_res$acf[i+1]) {
    print(paste("Coefficient significatif pour lag", i))
  } else {
    print(paste("Pas de coefficient significatif pour lag", i))
  }
}

以下是我的数据集的结构,用于再现性:

structure(c(36509.514, 34485.002, 33702.518, 31274.906, 30241.116, 
 31542.381), tsp = c(1981, 1981.41666666667, 12), class = "ts")

我会很感激任何建议!

llycmphe

llycmphe1#

如果假设滞后值为白色噪声,则此代码计算95%置信区间:

ci <- 0.95
prod_periode_1 <-  structure(c(36509.514, 34485.002, 33702.518, 31274.906, 30241.116, 
                               31542.381), tsp = c(1981, 1981.41666666667, 12), class = "ts")
summary(prod_periode_1)
plot.ts(prod_periode_1)
plot(ts.union(prod_periode_1,log(prod_periode_1)))

acf(prod_periode_1,lag.max=150)
acf(diff(prod_periode_1),lag.max=150)
acf(diff(diff(prod_periode_1,12)),lag.max=150)

pacf(prod_periode_1, lag.max = 250)
pacf(diff(prod_periode_1), lag.max = 250)
pacf(diff(diff(prod_periode_1,12), lag.max = 250))

for (i in 1:228) {
  acf_res <- acf(prod_periode_1, lag.max = i, plot = FALSE)
  clim0 <- qnorm((1 + ci) / 2) / sqrt(acf_res$n.used)
  if (-clim0 < acf_res$acf[i+1] || clim0 > acf_res$acf[i+1]) {
    print(paste("Coefficient significatif pour lag", i))
  } else {
    print(paste("Pas de coefficient significatif pour lag", i))
  }
}

相关问题