R语言航空乘客数据:拟合值与残差散点图显示异常问题
解决ARIMA拟合值与残差散点图异常显示的问题
我明白你遇到的困扰了——直接用ARIMA模型输出的时间序列残差和拟合值调用plot(),会因为R对时间序列对象的特殊绘图逻辑,导致本该是散点的地方显示成了数字标签。咱们来一步步修正这个问题:
问题根源
arima()返回的模型对象中,y$residuals和fitted(y)都是时间序列(ts)对象。当你直接把两个ts对象传入plot()时,R默认会优先按照时间序列的绘图规则处理,而非普通散点图逻辑,这就引发了显示异常。
修正后的代码
只需要把时间序列转换成普通的数值向量,就能让plot()按照预期生成散点图:
# 加载数据并拟合ARIMA模型 x <- AirPassengers y <- arima(x, order = c(0,1,1), seasonal = c(0,1,1)) z <- fitted(y) # 将时间序列转为数值向量,绘制散点图 plot(as.numeric(y$residuals), as.numeric(z), type = "p", xlab = "残差", ylab = "拟合值", main = "ARIMA拟合值与残差散点图")
额外优化(可选)
如果想让散点图更直观美观,还可以添加趋势线或调整点的样式:
# 绘制散点并添加平滑趋势线 plot(as.numeric(y$residuals), as.numeric(z), type = "p", pch = 16, col = "#2E86AB", xlab = "残差", ylab = "拟合值", main = "ARIMA(0,1,1)(0,1,1)拟合值与残差散点图") abline(lm(as.numeric(z) ~ as.numeric(y$residuals)), col = "#F24C4E", lwd = 2)
这样就能得到你预期的散点图了——每个点代表一组残差和对应的拟合值,不会再出现数字标签的异常情况。
内容的提问来源于stack exchange,提问作者Ryan Z Johnson
相关产品推荐
相关产品推荐

