GDPの四半期データ(gdp_qtr.csv)の対数系列を用いて、以下の分析を行ってください。
上記の分析結果を踏まえて( )内から適切な語句を選んでください。
# 四半期毎のGDPデータを読み込む
gdp_qtr <- read.csv("gdp_qtr.csv")
head(gdp_qtr)
## time gdp
## 1 1994/ 1- 3. 446281.9
## 2 4- 6. 443805.8
## 3 7- 9. 448941.2
## 4 10-12. 447126.3
## 5 1995/ 1- 3. 452085.2
## 6 4- 6. 456347.7
# データをts型に変換
x <- ts(data = gdp_qtr$gdp, start = c(1994, 1), frequency = 4)
# 対数系列
y <- log(x)
# 標本AC関数
acf(y)
Lagの1は4四半期を表すので)20次のラグの係数まですべて有意となっている。# 標本PAC関数
pacf(y)
# AR(1), AR(2), MA(1), MA(2), ARMA(1,1)
ar1 <- arima(y, order = c(1,0,0))
ar2 <- arima(y, order = c(2,0,0))
ma1 <- arima(y, order = c(0,0,1))
ma2 <- arima(y, order = c(0,0,2))
arma11 <- arima(y, order = c(1,0,1))
# AIC
AIC(ar1, ar2, ma1, ma2, arma11)
## df AIC
## ar1 3 -621.9827
## ar2 4 -620.1237
## ma1 3 -418.2189
## ma2 4 -485.6494
## arma11 4 -620.1233
# 残差プロット
plot(ar1$residuals)
# 残差のACプロット
acf(ar1$residuals)
# 残差のPACプロット
pacf(ar1$residuals)
# k=1から8までのLjung-Box検定統計量とp値
Q_LB <- numeric(8)
p_LB <- numeric(8)
for (k in 1:8) {
LB <- Box.test(ar1$residuals, k, type = "Ljung-Box", fitdf = 1)
Q_LB[k] <- LB$statistic
p_LB[k] <- LB$p.value
}
data.frame(k = 1:8, Q_LB, p_LB)
## k Q_LB p_LB
## 1 1 0.3884665 0.0000000
## 2 2 0.5202927 0.4707168
## 3 3 1.0700188 0.5856638
## 4 4 1.9318177 0.5866781
## 5 5 2.1201251 0.7136760
## 6 6 2.1895277 0.8223472
## 7 7 2.2537468 0.8949455
## 8 8 2.4546147 0.9304757
# ARIMAを含めて次数選択
library("forecast")
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
fit <- auto.arima(y, seasonal = F, ic = "aic", stepwise = T, trace = T)
##
## ARIMA(2,1,2) with drift : Inf
## ARIMA(0,1,0) with drift : -622.8033
## ARIMA(1,1,0) with drift : -621.2504
## ARIMA(0,1,1) with drift : -621.2779
## ARIMA(0,1,0) : -623.0517
## ARIMA(1,1,1) with drift : Inf
##
## Best model: ARIMA(0,1,0)
summary(fit)
## Series: y
## ARIMA(0,1,0)
##
## sigma^2 estimated as 0.0001908: log likelihood=312.53
## AIC=-623.05 AICc=-623.01 BIC=-620.36
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.001839519 0.01375119 0.008445821 0.013991 0.06431981 0.4397182
## ACF1
## Training set -0.06778431
# k=1から8までのLjung-Box検定統計量とp値
Q_LB <- numeric(8)
p_LB <- numeric(8)
for (k in 1:8) {
LB <- Box.test(fit$residuals, k, type = "Ljung-Box", fitdf = 1)
Q_LB[k] <- LB$statistic
p_LB[k] <- LB$p.value
}
data.frame(k = 1:8, Q_LB, p_LB)
## k Q_LB p_LB
## 1 1 0.5193290 0.0000000
## 2 2 0.5508002 0.4579909
## 3 3 1.1939031 0.5504872
## 4 4 1.6808260 0.6412050
## 5 5 1.7644625 0.7789773
## 6 6 1.7720567 0.8796997
## 7 7 1.8392210 0.9338755
## 8 8 1.9629108 0.9618646