Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中CO2数据集的ARIMA建模、预测和绘图_R_Time Series - Fatal编程技术网

R中CO2数据集的ARIMA建模、预测和绘图

R中CO2数据集的ARIMA建模、预测和绘图,r,time-series,R,Time Series,我正在使用arima0()和co2。我想在我的数据上绘制arima0()model。我尝试了fitted()和curve()但没有成功 这是我的密码: ###### Time Series # format: time series data(co2) # format: matrix dmn <- list(month.abb, unique(floor(time(co2)))) co2.m <- matrix(co2, 12, dimnames = dmn) co2.dt

我正在使用
arima0()
co2
。我想在我的数据上绘制
arima0()
model。我尝试了
fitted()
curve()
但没有成功

这是我的密码:

###### Time Series

# format: time series
data(co2)

# format: matrix
dmn <- list(month.abb, unique(floor(time(co2))))
co2.m <- matrix(co2, 12, dimnames = dmn)

co2.dt <- pracma::detrend(co2.m, tt = 'linear')
co2.dt <- ts(as.numeric(co2.dt), start = c(1959,1), frequency=12)

# first diff
co2.dt.dif <- diff(co2.dt,lag = 12)

# Second diff
co2.dt.dif2 <- diff(co2.dt.dif,lag = 1)

我想画出模型和预测。我希望有一种方法可以在R基中实现这一点。我还希望能够绘制预测图。

课程1:首先

老实说,我非常担心你建模时间序列的方式。当你去趋势化二氧化碳时,已经发生了一些错误。为什么要使用
tt=“linear”
?您在每个时期(即,年)内拟合线性趋势,并取残差进行进一步检查。这通常是不推荐的,因为它往往会对残差序列引入人为效果。我倾向于做
tt=“constant”
,也就是说,简单地降低年平均值。这将至少与原始数据中的季节相关性保持一致

也许你想在这里看到一些证据。考虑使用ACF来帮助您诊断。

data(co2)

## de-trend by dropping yearly average (no need to use `pracma::detrend`)
yearlymean <- ave(co2, gl(39, 12), FUN = mean)
co2dt <- co2 - yearlymean

## de-trend by dropping within season linear trend
co2.m <- matrix(co2, 12)
co2.dt <- pracma::detrend(co2.m, tt = "linear")
co2.dt <- ts(as.numeric(co2.dt), start = c(1959, 1), frequency = 12)

## compare time series and ACF
par(mfrow = c(2, 2))
ts.plot(co2dt); acf(co2dt)
ts.plot(co2.dt); acf(co2.dt)
无论该模型是否良好,我们需要检查残差的ACF:

acf(fit$residuals)

看起来这个型号不错(实际上相当不错)

出于预测目的,将
co2dt
的季节差异与
co2dt.dif
的模型拟合相结合实际上是一个更好的想法。我们开始吧

fit <- arima0(co2dt, order = c(1,0,0), seasonal = c(0,1,1), include.mean = FALSE)
让我们绘制
co2dt
,将模型和预测拟合在一起:

fittedco2dt <- co2dt - fit$residuals
ts.plot(co2dt, fittedco2dt, predco2dt, col = 1:3)
ts.plot(co2, co2fitted, co2pred, col = 1:3)
但对于预测来说更难,因为我们不知道未来的年平均值是多少。在这方面,我们的建模虽然看起来不错,但实际上并不有用。我将在另一个答案中谈论一个更好的想法。为了完成本课程,我们仅用拟合值绘制
co2

ts.plot(co2, fittedco2, col = 1:2)

课程1:首先

老实说,我非常担心你建模时间序列的方式。当你去趋势化二氧化碳时,已经发生了一些错误。为什么要使用
tt=“linear”
?您在每个时期(即,年)内拟合线性趋势,并取残差进行进一步检查。这通常是不推荐的,因为它往往会对残差序列引入人为效果。我倾向于做
tt=“constant”
,也就是说,简单地降低年平均值。这将至少与原始数据中的季节相关性保持一致

也许你想在这里看到一些证据。考虑使用ACF来帮助您诊断。

data(co2)

## de-trend by dropping yearly average (no need to use `pracma::detrend`)
yearlymean <- ave(co2, gl(39, 12), FUN = mean)
co2dt <- co2 - yearlymean

## de-trend by dropping within season linear trend
co2.m <- matrix(co2, 12)
co2.dt <- pracma::detrend(co2.m, tt = "linear")
co2.dt <- ts(as.numeric(co2.dt), start = c(1959, 1), frequency = 12)

## compare time series and ACF
par(mfrow = c(2, 2))
ts.plot(co2dt); acf(co2dt)
ts.plot(co2.dt); acf(co2.dt)
无论该模型是否良好,我们需要检查残差的ACF:

acf(fit$residuals)

看起来这个型号不错(实际上相当不错)

出于预测目的,将
co2dt
的季节差异与
co2dt.dif
的模型拟合相结合实际上是一个更好的想法。我们开始吧

fit <- arima0(co2dt, order = c(1,0,0), seasonal = c(0,1,1), include.mean = FALSE)
让我们绘制
co2dt
,将模型和预测拟合在一起:

fittedco2dt <- co2dt - fit$residuals
ts.plot(co2dt, fittedco2dt, predco2dt, col = 1:3)
ts.plot(co2, co2fitted, co2pred, col = 1:3)
但对于预测来说更难,因为我们不知道未来的年平均值是多少。在这方面,我们的建模虽然看起来不错,但实际上并不有用。我将在另一个答案中谈论一个更好的想法。为了完成本课程,我们仅用拟合值绘制
co2

ts.plot(co2, fittedco2, col = 1:2)

第2课时:时间序列建模的更好想法

在上一节课中,我们已经看到,如果我们将去趋势系列的去趋势和建模分开,预测会有困难。现在,我们尝试一次将这两个阶段结合起来

co2
的季节性模式非常强,因此我们需要季节性差异:

data(co2)
co2dt <- diff(co2, lag = 12)
par(mfrow = c(1,2)); ts.plot(co2dt); acf(co2dt)

季节内和季节间的负峰值表明两者都需要MA过程。我不会使用
co2dt.dif
;我们可以直接使用
co2

fit <- arima0(co2, order = c(0,1,1), seasonal = c(0,1,1))
acf(fit$residuals)
通过调用
predict
进行预测:

co2pred <- predict(fit, n.ahead = 36, se.fit = FALSE)


哦,这真是太棒了

第2课时:时间序列建模的更好想法

在上一节课中,我们已经看到,如果我们将去趋势系列的去趋势和建模分开,预测会有困难。现在,我们尝试一次将这两个阶段结合起来

co2
的季节性模式非常强,因此我们需要季节性差异:

data(co2)
co2dt <- diff(co2, lag = 12)
par(mfrow = c(1,2)); ts.plot(co2dt); acf(co2dt)

季节内和季节间的负峰值表明两者都需要MA过程。我不会使用
co2dt.dif
;我们可以直接使用
co2

fit <- arima0(co2, order = c(0,1,1), seasonal = c(0,1,1))
acf(fit$residuals)
通过调用
predict
进行预测:

co2pred <- predict(fit, n.ahead = 36, se.fit = FALSE)


哦,这真是太棒了

第三课时:车型选择

故事现在应该已经结束了;但是我想与
forecast
中的
auto.arima
进行比较,它可以自动决定“最佳”模型

AIC值表明我们的模型更好。BIC也是如此:

BIC = -2 * loglik + log(n) * p

我们有
n课程3:车型选择

故事现在应该已经结束了;但是我想与
forecast
中的
auto.arima
进行比较,它可以自动决定“最佳”模型

AIC值表明我们的模型更好。BIC也是如此:

BIC = -2 * loglik + log(n) * p
我们有
n