我的数据是属于月度数据,是肺结核的发病人数,用2004-2021年12月的数据构造模型,预测2022年的数据。但是在我对数据转换为ts时间序列后,对其进行差分处理使其平滑后,到确定阶数的时候绘制acf和pacf图的时候发现,此时的lag为小数,请问这是什么原因呢?
我的数据如下所示:
代码如下:
setwd("C:\\Users\\Administrator\\Desktop")
DA <- read.csv("123.csv")
rate=ts(DA$value,frequency=12,start=2009)
rate
win.graph(width=6, height=5,pointsize=9)
plot(rate,xlab = "年份",ylab = "月发病人数")
z=diff(rate) #1阶差分
plot(z)
library(timeDate)
library(timeSeries)
library(fBasics)
library(fUnitRoots)
library(tseries)
adf.test(z)#单位根检验平稳性检验
Box.test(z,type='Ljung-Box') #纯随机白噪声检验 X2=7.4485,P值为0.0064,拒绝原假设
#ARIMA模型建立
par(mfrow=c(1,2))
acf(z)
pacf(z) #自相关偏自相关图
par(mfrow=c(1,1))
该回答引用GPTᴼᴾᴱᴺᴬᴵ
出现lag为小数的情况可能是由于时间序列数据的频率不精确导致的。在R中,频率(frequency)参数指定的是每个时间单位的数量,而时间序列的起始时间(start)则指定了第一个时间单位的时间点。在你的代码中,你将频率设置为12,表示每年有12个月,但你的数据集从2004年开始,因此你将start设置为2009,这可能导致时间序列的频率不精确,从而在绘制acf和pacf图时出现小数的lag值。
-
为了解决这个问题,你可以将start设置为2004,并将数据转换为年度数据。这样做可以确保时间序列的频率准确,并且在绘制acf和pacf图时不会出现小数的lag值。以下是可能适用于你的代码:
rate <- ts(DA$value, frequency = 12, start = c(2004, 1))
rate_yearly <- aggregate(rate, FUN = sum, k = 12) # 将月度数据转换为年度数据
z <- diff(rate_yearly) # 一阶差分
plot(z)
acf(z)
pacf(z)
这里,我们将start设置为c(2004, 1),表示从2004年1月开始。然后,我们使用aggregate函数将月度数据转换为年度数据,并将频率设置为12。这样,我们就可以正确地绘制acf和pacf图,而不会出现小数的lag值。
可以的话推荐用Matlab,我这里有一个GUI软件供参考:https://blog.csdn.net/qq_30452897/article/details/126336069