options(warn=1,digits=5,messages=1,tidy=TRUE)
suppressPackageStartupMessages(library(Ecdat))
data(package="Ecdat")
# EcdatはR-Projectのサイトから簡単に入手できるので
#このライブラリーに含まれているMoneyUSを使って
#線形回帰式と誤差項がGARCH(1,1)に従うモデルの推定を
#行う。パッケージはrugarchを使う。
#モデルのスペックを指定するときに、外生変数としての
#説明変数をマトリックスの型で与える必要がある。
#ここで推定するモデルは計算例を示すための例示であり
#経済理論的な意味や根拠は全くない。
#推定しようとするモデルは
#cprの差分=c0+c1・inflの差分+誤差項e(t)
#外部の説明変数としてinflの差分が加わり
#誤差項e(t)はGARCH(1,1)に従うと仮定する。
# diff(cpr(t))=c0+c1・diff(infl)+e(t)
#sigma(t)^2=omega+a・e(t-1)^2+b・sigma(t-1)^2
#最尤法でc0,c1,omega,a,bを推定しようとする。
#
dim(MoneyUS)
## [1] 164 5
# データフレームとしてDDにデータを保存
DD<-as.data.frame(MoneyUS)
head(DD)
## m infl cpr y tbr
## 1 1.95138 6.3546 7.4151 2.0367 1.08367
## 2 0.90592 6.3537 7.4136 1.6333 0.81433
## 3 0.35966 6.3626 7.4252 1.3633 0.86967
## 4 3.85845 6.3638 7.4374 1.3100 1.03633
## 5 3.09707 6.3676 7.4631 1.6133 1.25633
## 6 4.69576 6.3615 7.4723 1.9667 1.51433
#infl,cprの対前期との差分データを作成
dinf<-diff(DD$infl)
dcpr<-diff(DD$cpr)
length(dcpr)
## [1] 163
length(dinf)
## [1] 163
length(DD$infl)
## [1] 164
#外生変数はマトリックス型で指示する。それ以外の型では
#うまく機能しない。
extdt <- cbind(dinf)
class(extdt)
## [1] "matrix"
head(extdt)
## dinf
## [1,] -0.00093549
## [2,] 0.00896044
## [3,] 0.00118070
## [4,] 0.00381317
## [5,] -0.00610604
## [6,] -0.00493606
suppressPackageStartupMessages(library(rugarch))
regspec.garch <- ugarchspec(
variance.model = list(garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(0,0),
include.mean = TRUE,
external.regressors = extdt)
)
regspec.garch
##
## *---------------------------------*
## * GARCH Model Spec *
## *---------------------------------*
##
## Conditional Variance Dynamics
## ------------------------------------
## GARCH Model : sGARCH(1,1)
## Variance Targeting : FALSE
##
## Conditional Mean Dynamics
## ------------------------------------
## Mean Model : ARFIMA(0,0,0)
## Include Mean : TRUE
## GARCH-in-Mean : FALSE
## Exogenous Regressor Dimension: 1
##
## Conditional Distribution
## ------------------------------------
## Distribution : norm
## Includes Skew : FALSE
## Includes Shape : FALSE
## Includes Lambda : FALSE
regspec.garch.fit <- ugarchfit(data = dcpr, spec =
regspec.garch,
out.sample=5)
regspec.garch.fit
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.006648 0.000760 8.7455 0.000000
## mxreg1 0.173835 0.062814 2.7675 0.005649
## omega 0.000008 0.000000 45.1602 0.000000
## alpha1 0.046390 0.010238 4.5310 0.000006
## beta1 0.855712 0.027047 31.6381 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.006648 0.001051 6.3227 0.000000
## mxreg1 0.173835 0.094377 1.8419 0.065487
## omega 0.000008 0.000000 36.8314 0.000000
## alpha1 0.046390 0.009458 4.9046 0.000001
## beta1 0.855712 0.030649 27.9201 0.000000
##
## LogLikelihood : 519.82
##
## Information Criteria
## ------------------------------------
##
## Akaike -6.5167
## Bayes -6.4197
## Shibata -6.5186
## Hannan-Quinn -6.4773
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 11.90 0.0005609
## Lag[2*(p+q)+(p+q)-1][2] 13.56 0.0002197
## Lag[4*(p+q)+(p+q)-1][5] 14.73 0.0005267
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.0002635 0.9870
## Lag[2*(p+q)+(p+q)-1][5] 1.0096949 0.8575
## Lag[4*(p+q)+(p+q)-1][9] 3.7778561 0.6267
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.2019 0.500 2.000 0.6532
## ARCH Lag[5] 2.2281 1.440 1.667 0.4230
## ARCH Lag[7] 2.8867 2.315 1.543 0.5352
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 18.93
## Individual Statistics:
## mu 0.88570
## mxreg1 0.81192
## omega 2.74758
## alpha1 0.08777
## beta1 0.18683
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.28 1.47 1.88
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.5858 0.5589
## Negative Sign Bias 0.5664 0.5720
## Positive Sign Bias 1.0471 0.2967
## Joint Effect 1.6931 0.6385
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 5.797 0.9984
## 2 30 12.127 0.9975
## 3 40 32.886 0.7439
## 4 50 34.405 0.9434
##
##
## Elapsed time : 0.14981
#diff(cpr(t))=0.0066+0.1738・diff(infl)
#sigma(t)^2=0.000+0.046・e(t-1)^2+0.855・sigma(t-1)^2
#とc0,c1,omega,a,bがそれぞれ推定されている。
#回帰モデルの外生変数の係数はmxreg1で示されている。
fcpr <- regspec.garch.fit@fit$fitted.values
plot.ts(fcpr)
sigma2cpr <- regspec.garch.fit@fit$sigma^2
plot.ts(sigma2cpr)
hinf<-diff(DD$infl)
hcpr<-diff(DD$cpr)
length(hinf)
## [1] 163
length(hcpr)
## [1] 163
length(fcpr)
## [1] 158
matplot(cbind(hcpr[1:158],fcpr,hinf[1:158]),type="l",col=c(2:4))
#予測モデル
fmodel <- ugarchforecast(regspec.garch.fit,data=dcpr,n.roll=5,
external.forecasts=list(mregfor=extdt),n.ahead=5)
plot(fmodel, which =c(1))
plot(fmodel, which =c(2))
plot(fmodel, which =c(3))
plot(fmodel, which =c(4))
EGARCH(1,1) (rugarchによる簡単な計算例)