時系列分析の目的は、ほとんどの場合には時系列データそのもの(原系列と呼ばれる)の性質を明らかにすることであるが、実際の解析は、原系列に何らかの変換を施した系列に対して行われることも少なくない。そのような変換を施した系列も含めて、時系列分析で扱われるデータの種類を、以下に簡単に整理する。
時系列分析では、まず時系列データをプロットして、その性質を検討する。
# IIPデータの読み込み
iip <- read.csv("iip.csv")
head(iip)
## yyyymm iip
## 1 197801 63.0
## 2 197802 62.4
## 3 197803 63.9
## 4 197804 63.9
## 5 197805 64.1
## 6 197806 64.4
Rで時系列データを扱うのに適したオブジェクトの基本は、tsクラス(tsはtime seriesの略)のオブジェクト
# データをts型に変換
x <- ts(data = iip$iip, start = c(1978, 1), frequency = 12)
x
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1978 63.0 62.4 63.9 63.9 64.1 64.4 64.8 65.7 66.3 66.4 66.6 67.2
## 1979 67.1 67.0 67.7 67.9 69.4 69.6 70.1 71.4 69.9 71.4 72.2 72.0
## 1980 72.6 75.3 73.3 74.5 73.9 73.3 73.2 71.1 72.1 72.6 71.6 72.6
## 1981 72.7 72.4 72.7 72.7 71.6 73.5 73.9 73.7 74.9 75.4 75.4 75.2
## 1982 74.7 74.2 74.9 73.8 73.3 74.2 73.9 74.0 74.4 72.2 74.0 73.4
## 1983 73.7 73.5 74.5 74.6 74.8 75.8 75.4 77.0 78.4 77.9 78.6 79.6
## 1984 80.0 81.9 81.4 81.3 83.0 83.3 83.2 84.5 83.5 86.0 85.9 85.3
## 1985 86.1 86.1 85.3 86.6 87.6 86.1 87.4 86.5 85.7 86.6 86.5 86.4
## 1986 86.4 86.3 86.2 86.2 86.1 86.5 86.6 84.4 87.4 86.1 84.9 87.2
## 1987 86.5 86.3 87.6 86.6 85.3 88.5 89.3 89.7 91.0 92.4 92.8 93.9
## 1988 94.5 97.2 95.2 97.7 96.8 97.0 97.4 97.9 99.6 98.1 100.1 101.0
## 1989 102.1 101.3 105.0 103.2 103.1 104.6 102.3 104.3 103.7 103.0 104.0 104.4
## 1990 103.5 104.4 106.4 106.4 107.2 107.4 108.5 109.1 108.5 110.6 109.8 109.8
## 1991 110.8 111.0 109.8 110.3 111.4 108.0 110.6 109.0 108.9 108.2 108.9 107.4
## 1992 106.5 106.1 104.4 104.1 101.6 103.9 103.5 100.3 104.4 101.0 99.6 99.0
## 1993 100.8 101.9 97.8 99.6 100.9 99.1 99.6 98.7 98.7 97.4 97.3 96.5
## 1994 95.4 97.0 97.9 99.0 98.6 99.9 100.8 101.6 101.0 102.0 102.6 103.2
## 1995 100.6 102.7 103.7 105.0 102.9 103.2 101.6 102.5 101.6 102.9 103.7 105.0
## 1996 103.1 103.3 103.1 103.3 104.1 104.2 105.0 105.5 106.6 107.0 107.4 108.4
## 1997 109.8 110.1 110.8 107.9 111.0 110.2 110.9 110.3 109.4 108.6 107.2 106.2
## 1998 107.7 105.0 102.8 102.2 101.3 101.4 101.2 99.0 100.6 100.0 99.6 99.4
## 1999 100.6 100.6 102.3 100.1 102.0 101.1 101.9 102.4 103.2 103.3 104.6 104.4
## 2000 104.4 104.1 105.9 107.3 106.9 108.5 107.9 109.4 107.2 108.9 109.3 110.7
## 2001 106.0 107.2 105.4 104.3 102.2 101.0 99.4 98.2 96.2 96.1 94.5 95.5
## 2002 94.8 96.3 97.1 96.5 100.7 99.6 100.3 100.6 101.3 101.4 101.0 100.9
## 2003 101.4 101.0 101.6 100.3 101.7 100.9 101.6 100.3 103.2 105.0 104.7 104.6
## 2004 106.3 106.1 105.6 107.4 107.4 107.7 109.0 107.8 108.0 106.4 107.4 106.0
## 2005 108.4 108.2 108.6 109.1 108.4 108.7 107.8 107.9 108.9 108.4 110.1 110.3
## 2006 110.8 110.7 111.3 113.5 111.9 113.3 113.7 114.1 114.1 115.0 115.4 115.7
## 2007 114.4 115.1 115.1 114.6 115.9 116.0 116.1 119.1 117.2 119.4 117.7 118.5
## 2008 119.1 119.4 118.3 117.6 118.2 114.9 114.7 110.7 112.0 109.3 102.0 93.6
## 2009 85.3 78.0 79.0 82.5 85.5 87.1 88.3 89.6 92.6 95.0 97.0 97.8
## 2010 100.3 100.7 100.9 102.0 101.8 101.0 102.1 102.5 104.1 101.2 102.8 103.4
## 2011 103.9 104.5 87.3 89.2 95.3 99.3 100.5 102.2 101.3 103.1 100.9 102.9
## 2012 103.3 103.1 102.9 102.4 100.6 99.8 99.3 97.8 95.7 96.0 95.1 96.4
## 2013 94.8 96.5 97.7 97.7 99.3 98.2 99.8 100.0 101.0 101.2 101.8 101.8
## 2014 103.8 102.7 104.2 99.6 101.9 100.3 100.1 99.5 100.7 100.4 100.4 99.9
## 2015 102.9 99.8 99.3 99.5 99.5 100.4 100.3 98.6 100.6 100.7 99.9 98.5
## 2016 100.1 99.2 99.7 99.3 98.5 99.2 99.8 100.5 100.7 101.0 102.0 102.0
## 2017 100.9 101.6 101.5 104.1 102.3 103.3 102.5 104.0 103.0 103.3 104.2 105.8
frequencyはデータの間隔(周期)を意味しており、月次データならfrequency = 12と指定する。
frequency = 4と指定する。# 時系列プロット:原系列
par(family = "HiraginoSans-W3") #日本語が文字化けしないようにおまじない
plot(x, xlab = '年月', ylab = '鉱工業生産指数の原系列')
# 時系列プロット:対数系列
par(family = "HiraginoSans-W3") #日本語が文字化けしないようにおまじない
plot(log(x), xlab = '年月', ylab = '鉱工業生産指数の対数系列')
GDPの原系列にはトレンドが含まれる。
トレンドの変化を検出する場合は、階差系列を検討する
時系列\(X_t\)が単純なトレンド(観測時\(t\)の1次式と誤差項\(\epsilon_t\)の和) \[ X_t = \mu + t \alpha + \epsilon_t \] で表現できる場合、階差系列は次のようになる。 \[ \Delta X_t = X_t - X_{t-1} = \alpha + (\epsilon_t - \epsilon_{t-1})\]
階差プロットが一定の値を中心として振動するならば、原系列には1つのトレンドがあるといえる。
階差の計算には関数diffを使う。
# 階差系列
dx <- diff(x)
dx
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1978 -0.6 1.5 0.0 0.2 0.3 0.4 0.9 0.6 0.1 0.2 0.6
## 1979 -0.1 -0.1 0.7 0.2 1.5 0.2 0.5 1.3 -1.5 1.5 0.8 -0.2
## 1980 0.6 2.7 -2.0 1.2 -0.6 -0.6 -0.1 -2.1 1.0 0.5 -1.0 1.0
## 1981 0.1 -0.3 0.3 0.0 -1.1 1.9 0.4 -0.2 1.2 0.5 0.0 -0.2
## 1982 -0.5 -0.5 0.7 -1.1 -0.5 0.9 -0.3 0.1 0.4 -2.2 1.8 -0.6
## 1983 0.3 -0.2 1.0 0.1 0.2 1.0 -0.4 1.6 1.4 -0.5 0.7 1.0
## 1984 0.4 1.9 -0.5 -0.1 1.7 0.3 -0.1 1.3 -1.0 2.5 -0.1 -0.6
## 1985 0.8 0.0 -0.8 1.3 1.0 -1.5 1.3 -0.9 -0.8 0.9 -0.1 -0.1
## 1986 0.0 -0.1 -0.1 0.0 -0.1 0.4 0.1 -2.2 3.0 -1.3 -1.2 2.3
## 1987 -0.7 -0.2 1.3 -1.0 -1.3 3.2 0.8 0.4 1.3 1.4 0.4 1.1
## 1988 0.6 2.7 -2.0 2.5 -0.9 0.2 0.4 0.5 1.7 -1.5 2.0 0.9
## 1989 1.1 -0.8 3.7 -1.8 -0.1 1.5 -2.3 2.0 -0.6 -0.7 1.0 0.4
## 1990 -0.9 0.9 2.0 0.0 0.8 0.2 1.1 0.6 -0.6 2.1 -0.8 0.0
## 1991 1.0 0.2 -1.2 0.5 1.1 -3.4 2.6 -1.6 -0.1 -0.7 0.7 -1.5
## 1992 -0.9 -0.4 -1.7 -0.3 -2.5 2.3 -0.4 -3.2 4.1 -3.4 -1.4 -0.6
## 1993 1.8 1.1 -4.1 1.8 1.3 -1.8 0.5 -0.9 0.0 -1.3 -0.1 -0.8
## 1994 -1.1 1.6 0.9 1.1 -0.4 1.3 0.9 0.8 -0.6 1.0 0.6 0.6
## 1995 -2.6 2.1 1.0 1.3 -2.1 0.3 -1.6 0.9 -0.9 1.3 0.8 1.3
## 1996 -1.9 0.2 -0.2 0.2 0.8 0.1 0.8 0.5 1.1 0.4 0.4 1.0
## 1997 1.4 0.3 0.7 -2.9 3.1 -0.8 0.7 -0.6 -0.9 -0.8 -1.4 -1.0
## 1998 1.5 -2.7 -2.2 -0.6 -0.9 0.1 -0.2 -2.2 1.6 -0.6 -0.4 -0.2
## 1999 1.2 0.0 1.7 -2.2 1.9 -0.9 0.8 0.5 0.8 0.1 1.3 -0.2
## 2000 0.0 -0.3 1.8 1.4 -0.4 1.6 -0.6 1.5 -2.2 1.7 0.4 1.4
## 2001 -4.7 1.2 -1.8 -1.1 -2.1 -1.2 -1.6 -1.2 -2.0 -0.1 -1.6 1.0
## 2002 -0.7 1.5 0.8 -0.6 4.2 -1.1 0.7 0.3 0.7 0.1 -0.4 -0.1
## 2003 0.5 -0.4 0.6 -1.3 1.4 -0.8 0.7 -1.3 2.9 1.8 -0.3 -0.1
## 2004 1.7 -0.2 -0.5 1.8 0.0 0.3 1.3 -1.2 0.2 -1.6 1.0 -1.4
## 2005 2.4 -0.2 0.4 0.5 -0.7 0.3 -0.9 0.1 1.0 -0.5 1.7 0.2
## 2006 0.5 -0.1 0.6 2.2 -1.6 1.4 0.4 0.4 0.0 0.9 0.4 0.3
## 2007 -1.3 0.7 0.0 -0.5 1.3 0.1 0.1 3.0 -1.9 2.2 -1.7 0.8
## 2008 0.6 0.3 -1.1 -0.7 0.6 -3.3 -0.2 -4.0 1.3 -2.7 -7.3 -8.4
## 2009 -8.3 -7.3 1.0 3.5 3.0 1.6 1.2 1.3 3.0 2.4 2.0 0.8
## 2010 2.5 0.4 0.2 1.1 -0.2 -0.8 1.1 0.4 1.6 -2.9 1.6 0.6
## 2011 0.5 0.6 -17.2 1.9 6.1 4.0 1.2 1.7 -0.9 1.8 -2.2 2.0
## 2012 0.4 -0.2 -0.2 -0.5 -1.8 -0.8 -0.5 -1.5 -2.1 0.3 -0.9 1.3
## 2013 -1.6 1.7 1.2 0.0 1.6 -1.1 1.6 0.2 1.0 0.2 0.6 0.0
## 2014 2.0 -1.1 1.5 -4.6 2.3 -1.6 -0.2 -0.6 1.2 -0.3 0.0 -0.5
## 2015 3.0 -3.1 -0.5 0.2 0.0 0.9 -0.1 -1.7 2.0 0.1 -0.8 -1.4
## 2016 1.6 -0.9 0.5 -0.4 -0.8 0.7 0.6 0.7 0.2 0.3 1.0 0.0
## 2017 -1.1 0.7 -0.1 2.6 -1.8 1.0 -0.8 1.5 -1.0 0.3 0.9 1.6
# 階差系列の平均
mean_dx <- mean(dx)
mean_dx
## [1] 0.08935282
# 時系列プロット:階差系列
par(family = "HiraginoSans-W3") #日本語が文字化けしないようにおまじない
plot(dx, xlab = '年月', ylab = '鉱工業生産指数の階差系列')
abline(a = mean_dx, b = 0, col = 'blue') #平均を青線で描画
#成長率の計算
n <- length(x)
r_d <- x[2:n] / x[1:n-1] - 1 #離散型成長率
r_c <- log(x[2:n]) - log(x[1:n-1]) #連続型成長率
# 時系列プロット:成長率
par(family = "HiraginoSans-W3") #日本語が文字化けしないようにおまじない
plot(r_d, type = 'l', xlab = '年月', ylab = '成長率')
lines(r_c, lty = 2) #点線で連続型成長率を重ね書き
標本AC係数の背後にあるのは母自己相関係数(真のAC係数)で、理論的な値である母自己相関係数を推定する方法が標本AC係数である。
理論的な自己共分散や分散は、十分に\(t\)が大きければ、観測時点\(t\)に依存しないという前提条件が置かれる。
データ分析では、「\(k\)次の母自己相関係数が0」であるという帰無仮説を検定することも必要となる。
# 鉱工業生産指数の原系列の標本AC関数と2シグマ
acf(x, lag.max = 20, ci.type = "ma")
# 鉱工業生産指数の連続型成長率の標本AC関数と2シグマ
r <- diff(log(x)) #連続型成長率
acf(r, lag.max = 20, ci.type = "ma")
線形回帰分析では、被説明変数\(X_t\)の値が経済的な意味を備えた回帰式によって定まる(回帰式が経済構造の骨組みを示す)と考える。
一方、時系列分析では被説明変数\(X_t\)の変化は、同じ変数の過去の値(例えば\(X_{t-1}\))によって説明されるとする。
phi <- 0.9
t <- 0:20
# \phiのt乗の推移(t=0,1,...,20)
plot(t, phi^t)
\(p\)次式AR(\(p\))は \[ \begin{align} X_t &= c + \phi_1 X_{t-1} + \phi_2 X_{t-2} + \cdots + \phi_{p}X_{t-p} + \epsilon_t \\ &\quad (t = p+1, p+2, \ldots, n) \end{align} \]
推定における基本的な注意
鉱工業生産指数の連続型成長率について自己回帰式を推定する。
まず、4次の自己回帰式AR(4)を推定する。
# AR(4)の推定
ar4 <- arima(r, order = c(4, 0, 0))
ar4
##
## Call:
## arima(x = r, order = c(4, 0, 0))
##
## Coefficients:
## ar1 ar2 ar3 ar4 intercept
## -0.0129 0.1343 0.0514 -0.0006 0.0011
## s.e. 0.0457 0.0457 0.0456 0.0457 0.0010
##
## sigma^2 estimated as 0.0003234: log likelihood = 1245.09, aic = -2478.19
Rではarima関数を使って簡単にARモデルを最尤法により推定できる。
orderの設定で後述のMAモデルやARIMAモデルも推定できる。method = "CSS"とすれば最小二乗法(正確には条件付き最小二乗法)による推定もできる。Coefficeintsには各ラグ項の係数とともに、係数の標準誤差s.e.が表示される。sigma^2の推定値は0.0003234で、対数尤度log likelihoodは1245aicは赤池情報量基準(Akaike information criterion:AIC)」と呼ばれるモデルの総括的な比較基準で、最小値を与えるモデルが最も望ましいと考えられる。 \[
AIC = -2 \times \mbox{対数尤度} + 2 \times \mbox{パラメータ数}
\]
ar2)以外は有意にならないことがわかる。高次の項が有意でないので、字数を下げて推定する。
# AR(3)の推定
ar3 <- arima(r, order = c(3, 0, 0))
ar3
##
## Call:
## arima(x = r, order = c(3, 0, 0))
##
## Coefficients:
## ar1 ar2 ar3 intercept
## -0.0129 0.1342 0.0514 0.0011
## s.e. 0.0456 0.0452 0.0456 0.0010
##
## sigma^2 estimated as 0.0003234: log likelihood = 1245.09, aic = -2480.19
# AR(2)の推定
ar2 <- arima(r, order = c(2, 0, 0))
ar2
##
## Call:
## arima(x = r, order = c(2, 0, 0))
##
## Coefficients:
## ar1 ar2 intercept
## -0.0060 0.1340 0.0011
## s.e. 0.0453 0.0453 0.0009
##
## sigma^2 estimated as 0.0003242: log likelihood = 1244.46, aic = -2480.92
# AR(1)の推定
ar1 <- arima(r, order = c(1, 0, 0))
ar1
##
## Call:
## arima(x = r, order = c(1, 0, 0))
##
## Coefficients:
## ar1 intercept
## -0.0067 0.0011
## s.e. 0.0457 0.0008
##
## sigma^2 estimated as 0.0003302: log likelihood = 1240.13, aic = -2474.26
AICを比較する。
AIC(ar1, ar2, ar3, ar4)
## df AIC
## ar1 3 -2474.256
## ar2 4 -2480.918
## ar3 5 -2480.188
## ar4 6 -2478.188
自己回帰の次数を決める際には、各式の推定結果だけでなく、残差の性質を検討する必要がある。
r、AR(1)によりフィットした値、rとフィット値との差である残差の時系列プロットを見る。# 成長率とフィット値のプロット
par(family = "HiraginoSans-W3") #日本語が文字化けしないようにおまじない
ts.plot(r, r - ar2$residuals, gpars=list(xlab="年月", ylab="成長率", lty=c(1:2), col=c(1:2))) #成長率とフィット値
# 残差のプロット
par(family = "HiraginoSans-W3") #日本語が文字化けしないようにおまじない
ts.plot(ar2$residuals, gpars=list(xlab="年月", ylab="残差", lty=3, col=3))
sigma^2の推定値は0.0003302で、2シグマ0.036となる。自己回帰式の推定において、最高次の項の係数推定値は、標本偏自己相関(partial auto-correlation:PAC)係数と呼ばれる。
回帰式は説明変数が少なすぎると推定に偏り(バイアス)を生じる。
\(p\)次のPAC、PAC(\(p\))は、AR(\(p\))式の\(p\)次のラグ項係数の最小2乗推定値として求めることができる。
Rでは、関数pacfを用いて計算することができる。# PAC
pacf(r, lag.max = 20)