从 R 中的 ARMA 模型获取 AR(p) 值
Getting the AR(p) values from ARMA model in R
我有兴趣从 R 中的任何 ARIMA 模型中获取 AR(p) 部分的值。
例如,假设我估计了以下 ARIMA 模型
我有兴趣将这些值定义为:
我的做法是:
ar_model <- auto.arima(mydata) # fit an ARIMA model as decided by the auto.arima
fitted_ar_model <- fitted(ar_model)
resid_ar_model <- residuals(ar_model)
ar_p <- fitted_ar_model - resid_ar_model
代码的问题是我不确定 residuals(ar_model)
是仅包含同期残差还是包含移动平均部分。
我会在这里尝试回答。不幸的是,用 SO 写公式真的很麻烦。因此,首先,我认为您需要区分 DGP(数据生成过程)的 "epsilon",也称为冲击或错误(不可观察)和模型 residuals.冲击是不可观察的,因为您不知道模型参数(在本例中为 AR 和 MA 参数)的 true 值 - 您只能 estimate 他们。因此 y_t - phi_1*y_{t-1 } 和 y_t - \hat{phi_1}*y_{t-1} - 前者是 "shock",后者是 "residual"。通常你也会有符号 \hat{y_t} = \hat{phi_1}*y_{t-1} 等残差定义为 e_t = y_t - \帽子{y_t}.
现在,鉴于此,我想你想要得到的是 y_t - e_t - \hat{phi}*e_{t-1}, \hat{phi}是估计的 MA1 参数。下面是一个示例,其中我已将没有常量的 ARMA(2,1) 显式拟合到 LakeHuron
时间序列。我已经使用 residuals
(resid
in df
)查看了模型残差,并且还手动计算了模型残差(resid2
in df
)——它们有点不同近似于 residuals
方法所产生的初始条件,我并没有真正深入研究。您会看到随着 t
的增加,值越来越接近,并且初始条件的影响减小(这是由于我们有一个固定的 ARMA 模型)。以同样的方式,我计算了 "AR_fit" 一次,我称它为 ar_1 * y_{t-1} + ar_2 * y_{t-2} (ar_fit1
在 df
) 中,第二次是 y_t - e_t - ma_1 * e_{t-1}(ar_fit2
在 df
中)。同样,您将看到值随着 t
的增加而收敛(由于使用 residuals
函数计算残差的初始条件相同)。
library(forecast)
data <- LakeHuron - mean(LakeHuron)
nobs <- length(data)
ar_model <- arima(data, order = c(2, 0, 1), include.mean = FALSE)
fitted <- fitted(ar_model)
resid <- residuals(ar_model)
ar1 <- ar_model$coef[1]
ar2 <- ar_model$coef[2]
ma1 <- ar_model$coef[3]
df <- data.frame(data, fitted, resid)
resid2 = data[3:nobs] - ar1*data[2:(nobs-1)] - ar2*data[1:(nobs-2)] - ma1*resid[2:(nobs-1)]
resid2 <- c(NA, NA, resid2)
df$resid2 <- resid2
ar_fit1 <- ar1*data[2:(nobs-1)] + ar2*data[1:(nobs-2)]
ar_fit1<- c(NA, NA, ar_fit1)
df$ar_fit1 <- ar_fit1
ar_fit2 <- data[3:nobs] - resid[3:nobs] - ma1*resid[2:(nobs-1)]
ar_fit2<- c(NA, NA, ar_fit2)
df$ar_fit2 <- ar_fit2
我有兴趣从 R 中的任何 ARIMA 模型中获取 AR(p) 部分的值。
例如,假设我估计了以下 ARIMA 模型
我有兴趣将这些值定义为:
我的做法是:
ar_model <- auto.arima(mydata) # fit an ARIMA model as decided by the auto.arima
fitted_ar_model <- fitted(ar_model)
resid_ar_model <- residuals(ar_model)
ar_p <- fitted_ar_model - resid_ar_model
代码的问题是我不确定 residuals(ar_model)
是仅包含同期残差还是包含移动平均部分。
我会在这里尝试回答。不幸的是,用 SO 写公式真的很麻烦。因此,首先,我认为您需要区分 DGP(数据生成过程)的 "epsilon",也称为冲击或错误(不可观察)和模型 residuals.冲击是不可观察的,因为您不知道模型参数(在本例中为 AR 和 MA 参数)的 true 值 - 您只能 estimate 他们。因此 y_t - phi_1*y_{t-1 } 和 y_t - \hat{phi_1}*y_{t-1} - 前者是 "shock",后者是 "residual"。通常你也会有符号 \hat{y_t} = \hat{phi_1}*y_{t-1} 等残差定义为 e_t = y_t - \帽子{y_t}.
现在,鉴于此,我想你想要得到的是 y_t - e_t - \hat{phi}*e_{t-1}, \hat{phi}是估计的 MA1 参数。下面是一个示例,其中我已将没有常量的 ARMA(2,1) 显式拟合到 LakeHuron
时间序列。我已经使用 residuals
(resid
in df
)查看了模型残差,并且还手动计算了模型残差(resid2
in df
)——它们有点不同近似于 residuals
方法所产生的初始条件,我并没有真正深入研究。您会看到随着 t
的增加,值越来越接近,并且初始条件的影响减小(这是由于我们有一个固定的 ARMA 模型)。以同样的方式,我计算了 "AR_fit" 一次,我称它为 ar_1 * y_{t-1} + ar_2 * y_{t-2} (ar_fit1
在 df
) 中,第二次是 y_t - e_t - ma_1 * e_{t-1}(ar_fit2
在 df
中)。同样,您将看到值随着 t
的增加而收敛(由于使用 residuals
函数计算残差的初始条件相同)。
library(forecast)
data <- LakeHuron - mean(LakeHuron)
nobs <- length(data)
ar_model <- arima(data, order = c(2, 0, 1), include.mean = FALSE)
fitted <- fitted(ar_model)
resid <- residuals(ar_model)
ar1 <- ar_model$coef[1]
ar2 <- ar_model$coef[2]
ma1 <- ar_model$coef[3]
df <- data.frame(data, fitted, resid)
resid2 = data[3:nobs] - ar1*data[2:(nobs-1)] - ar2*data[1:(nobs-2)] - ma1*resid[2:(nobs-1)]
resid2 <- c(NA, NA, resid2)
df$resid2 <- resid2
ar_fit1 <- ar1*data[2:(nobs-1)] + ar2*data[1:(nobs-2)]
ar_fit1<- c(NA, NA, ar_fit1)
df$ar_fit1 <- ar_fit1
ar_fit2 <- data[3:nobs] - resid[3:nobs] - ma1*resid[2:(nobs-1)]
ar_fit2<- c(NA, NA, ar_fit2)
df$ar_fit2 <- ar_fit2