【问题标题】:Why ACF not plotting lags为什么 ACF 不绘制滞后
【发布时间】:2018-04-18 22:09:52
【问题描述】:

您好,有谁知道为什么我的 ACF 没有在我的时间序列中绘制我的最大滞后时间?您可以使用 R 中的航空旅客数据来回答这个问题。

我的代码是:

acf(z.t, lag.max = 40, main = expression(paste("acf of Z"[t])))

我得到了

但希望在 x 轴上有 1-40。

【问题讨论】:

  • 谢谢你,但你能描述一下你是如何用 Markdown 语言重新格式化这篇文章的吗?

标签: r time-series


【解决方案1】:

数据是按月排列的时间序列。四十个滞后时间跨度为 40 个月或 3.33 年。 x 轴上的时间单位以年为单位,您会在图中看到 0 到 40 个月的滞后。

再举一个例子,如果您运行acf(AirPassengers, lag.max=12),您可以看到 x 轴的滞后时间为 0 到 12 个月,并且轴标记为从零到 1 年。

您可以根据需要重新标记轴。例如:

mx=40
acf(AirPassengers, lag.max=mx, xaxt="n", xlab="Lag (months)")
axis(1, at=0:mx/12, labels=0:mx)

【讨论】:

  • 你有没有添加任何东西来绘制偶数位?
  • 在发布的示例中,实际显示的数字取决于所呈现的绘图的大小。如果你把图放大,就会出现更多的数字。如果你把它变小,就会出现更少。您还可以将标签缩小,打印更多标签。例如,尝试axis(1, at=0:mx/12, labels=0:mx, cex.axis=0.5)。如果您只想要偶数滞后的刻度线:axis(1, at=seq(0,mx,2)/12, labels=seq(0,mx,2), cex.axis=1).
  • 如果您希望在每个滞后处都有刻度线,但您只希望每隔一个滞后一个标签,那么您可以将所有其他标签设为空白:axis(1, at=0:mx/12, labels=c(rbind('', seq(0,mx,2)))[-1], cex.axis=0.7)
  • this question 中的讨论可能会有所帮助。
【解决方案2】:

这是因为轴的单位是季节单位(周期),而不是时间单位。

frequency(AirPassengers) 给出 12,所以每月一次。绘图中的轴为 ~3.33,正好是 40 / 12。

您可以从acfx = acf(AirPassengers, lag.max = 40) 获取值以生成您自己的图,并获得x$acfx$lag

你也可以这样做:

library(forecast)
Acf(AirPassengers, lag.max = 40)

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    相关资源
    最近更新 更多