R中含大量零值的时间序列绘制pacf图x轴异常如何解决
问题根因
pacf绘制偏自相关图时x轴出现数十万量级异常值,和数据集里的零值无关,是时间序列对象的索引类型识别错误导致:
- R中
POSIXct类时间的底层存储值是从1970-01-01 00:00:00开始计算的秒数,若生成zoo/xts对象时,日期字段被自动转成了POSIXct类而非Date类,pacf计算滞后时会直接以秒为单位计算时间差,滞后1天对应的x轴数值就是86400,滞后数天就会达到数十万量级,不会显示常规的1、2、3阶数。
修正方案
任选以下一种方法即可解决:
- 方案1:直接传入纯数值向量绘图,最简便
提取xts对象中的入院量字段转为纯数值向量,手动指定最大滞后阶数,跳过时间索引识别逻辑:# 替换成你自己的xts对象名、字段名 pacf(as.numeric(adm_xts$adm), lag.max = 30, main = "急诊日入院量偏自相关图", xlab = "滞后阶数(天)") - 方案2:转换为标准ts时间序列对象再绘图
显式指定日度序列的频率、起始时间,生成标准ts对象后再调用pacf,x轴会自动按滞后阶数标注:# 自动计算数据起始时间点 start_date <- min(index(adm_xts)) start_year <- as.integer(format(start_date, "%Y")) start_doy <- as.integer(format(start_date, "%j")) # 计算起始日期是当年第几天 # 生成日度频率的ts对象 adm_ts <- ts(coredata(adm_xts$adm), start = c(start_year, start_doy), frequency = 365) pacf(adm_ts, lag.max = 30) - 方案3:修正xts对象的索引类型
把xts的索引显式转为按天计数的Date类,从根源避免秒级单位误读:# 强制将索引转为Date类型 index(adm_xts) <- as.Date(index(adm_xts)) # 再绘图时指定最大滞后阶数即可 pacf(adm_xts$adm, lag.max = 30, xlab = "滞后阶数(天)")
注:数据中存在的零值不会影响pacf轴的标注逻辑,无需在绘图前专门处理零值。
内容的提问来源于stack exchange,提问作者Lilia
相关产品推荐
相关产品推荐

