• 検索結果がありません。

時系列の成分への分解

ドキュメント内 ためになった他の人のサイト script of (ページ 127-131)

4.7.1 移動平均による古典的な時系列の成分への分解 decompose()

時系列を,移動平均により季節,傾向,不規則成分に分解する.加法,乗法モデルをと もに扱える.

書式:

decompose(x, type=c("additive","multiplicative"), filter=NULL)

*5Portmanteau適合度検定は「かばん」検定と訳されることがある.複数の期間にわたる自己相関の有無

をまとめて検定する.時系列解析ではBox-Pierce, Ljung-Box検定が代表的.

引数:

x

時系列

type

季節成分のタイプ

filter

季節成分を取り除くためのフィルタ係数のベクトルで

(AR,MA

係数のよう

)

時間に関して逆順に並べる.

NULL

なら,対称なウィンドによる移動平均が 使われる

返り値: クラス

"decomposed.ts"

のリストで次の成分を持つ:

seasonal

季節成分

(

つまり,繰り返される季節パターン

)

figure

推定された季節パターンのみ

trend

傾向成分

random

残りの不規則成分

type type

引き数値

加法,加法モデルはそれぞれ次式で定義される.

T

t

, S

t

, e

tはそれぞれ傾向成分,季節 成分,残差である:

Y

t

= T

t

+ S

t

+ e

t

, Y

t

= T

t

S

t

+ e

t

.

注意:関数

stl()

はより洗練された分解を与える.

# 炭酸ガス濃度データco2を使用(以下の図を参照)

> m <- decompose(co2)

> m$figure

[1] -0.05100038 0.61075638 1.38363926 2.50942755 2.99729917 2.34354917 [7] 0.82455143 -1.24613551 -3.07113551 -3.25780218 -2.08016704 -0.96298236

> plot(m)

320330340350360

observed 320330340350360

trend −3−2−10123

seasonal −0.50.00.5

random

1960 1970 1980 1990

Time

Decomposition of additive time series

炭酸ガス濃度データの成分への分 解

上から,原データ,傾向成分,季 節成分,不規則成分

4.7.2 loess を用いた時系列の成分への分解 stl()

loess()

関数を用いた時系列の,季節,傾向,不規則成分への分割

(Seasonal Decom-position of Time Series by Loess)

STL

と略される.

書式:

stl(x, s.window, s.degree = 0, t.window = NULL, t.degree = 1, l.window = nextodd(period), l.degree = t.degree,

s.jump = ceiling(s.window/10), t.jump = ceiling(t.window/10), l.jump = ceiling(l.window/10), robust = FALSE,

inner = if(robust) 1 else 2, outer = if(robust) 15 else 0, na.action = na.fail)

引数:

x

分解すべき一変量時系列.周期が

2

以上のクラス

"ts"

のオブジェクト

s.window

文字列

"periodic"

か,季節成分取り出しのための

loess()

のウィンド 幅

(

ラグ単位

)

で奇数.既定値は無い

s.degree

季節成分取り出しのための局所的当てはめ多項式の次数.

0

1

t.window

傾向成分を取り出すための

loess()

用のウィンドの区間幅

(

ラグ単位

)

で 奇数.

NULL

なら既定値は

ceiling((1.5*period)/(1-(1.5/s.window)))

以 上の最小の奇数

t.degree

傾向成分取り出しのための局所当てはめ多項式の次数.

0

1

l.window

各副系列に使われるローパスフィルタの

loess()

用のウィンドの区間幅

(

ラグ単位

)

.既定値は

frequency(x)

以上の最小奇数で,傾向・季節成分間の競 合を防ぐために勧められる.もし奇数でなければ,次に大きい奇数に増やされる

l.degree

副系列用のローパスフィルタの局所的当てはめ多項式の次数.

0

1

s.jump,t.jump,l.jump

それぞれの平滑操作を加速するための整数で,最低でも

1

*.jump

番目の値間で線形補間がされる

robust

論理値で

loesss()

の適用に当たって頑健な当てはめを使うかどうか指示

inner

整数.「内的

(

後退的当てはめ

)

な」繰り返し数.普通僅か

(2

)

の繰り返しで 十分

outer

整数.「外的な」頑健性のための繰り返し数

na.action

欠側値に対する処理

返り値: クラス

"stl"

のリストで次の成分を持つ:

time.series

seasonal, trend, remainder

を持つ多変量時系列

weights

最終的な頑健重み

(

もし当てはめが頑健に行われないならば全て

1)

call

呼出し式

win "s", "t", "l"

平滑操作に対して使われる区間幅を持つ長さ

3

の整数ベクトル

deg

それぞれの平滑操作に対して使われる多項式の次数を持つ長さ

3

の整数ベクトル

jump

それぞれの平滑操作に対して使われる「ジャンプ」数を持つ長さ

3

の整数ベク

トル

ni

内的な繰りかえし数

no

外的な繰りかえし数

季節成分は季節副系列

(

全ての一月の値,全ての二月の値,

...

からなる系列

)

loess()

で平滑化することにより得られる.もし

s.window = "periodic"

ならば,平滑化は実 際には平均操作で置き換えられる.季節値が取り除かれ,残りが傾向成分を見出すため平 滑化される.全体的水準が季節成分から除かれ,傾向成分に加えられる.この過程が数回 繰り返される.

remainder

成分は季節成分と傾向成分の和からの残差である.結果のク ラス

"stl"

には

plot.stl()

等の幾つかのメソッドがある.

注意: これは

S-PLUS

stl()

関数に似ているが同一ではない.

S-PLUS

が与える

remainder

成分は,この関数の

trend

remainder

成分の和である.

関連: クラス

stl

オブジェクト用のプリントメソッド関数

plot.stl(), loess() (

実際 は

stl()

中では使われない

)

,別種の分解を与える

StructTS()

# ノッチンガム城の気温データnottemを使用(以下の図を参照).図を横に並べるため余白の調整

> op <- par(mar = c(0, 4, 0, 3), oma = c(5, 0, 4, 0), mfcol = c(4, 2))

> plot(stl(nottem, "per"), set.pars=NULL) # 周期条件で分解

> plot(stl(nottem, s.win = 4, t.win = 50, t.jump = 1), set.pars=NULL)

3035404550556065

data −10−50510

seasonal 48495051

trend −6−4−2024

1920 1925 1930 1935 1940

remainder

time

3035404550556065

data −10−5051015

seasonal 48.048.549.049.550.0

trend −4−20246

1920 1925 1930 1935 1940

remainder

time

5.755.805.855.90

data −0.010−0.0050.0000.005

seasonal 5.755.805.855.90

trend −0.0020.0000.0010.002

1960 1970 1980 1990

remainder

time

5.755.805.855.90

data −0.010−0.0050.0000.005

seasonal 5.755.805.855.90

trend −0.0050.0000.0050.010

1960 1970 1980 1990

remainder

time

stl(mdeaths, s.w = "per", robust = FALSE / TRUE )

1000150020002500 −4000200400600

1300140015001600 −400−2000200400600

1974 1975 1976 1977 1978 1979 1980

time

1000150020002500

data −400−2000200400

seasonal 135014501550

trend −2000200400600800

1974 1975 1976 1977 1978 1979 1980

remainder

time

stl()による時系列の成分への分解 (上左) ノッチンガム城の気温データ.上か ら原データ季節成分,傾向成分,不規則成分.

左は周期条件制約

(上右) 炭酸ガス濃度データの対数値.右は 線形トレンド,周期制約条件

(下左) 英国の呼吸器疾患死亡者数.右は頑 健版

# 炭酸ガス濃度データco2を使用

> plot(stllc <- stl(log(co2), s.window=21), set.pars=NULL) # 対数値を分解

> summary(stllc) # 分解結果要約

# 線形トレンド,周期条件

> plot(stl(log(co2), s.window="per", t.window=1000), set.pars=NULL)

> data(UKLungDeaths) # 英国の呼吸器疾患死亡者数

> stmd <- stl(mdeaths, s.w = "per") # 頑健でない

> summary(stmR <- stl(mdeaths, s.w = "per", robust = TRUE)) # 頑健版の要約 Call:

stl(x = log(co2), s.window = 21) Time.series components:

seasonal trend remainder

Min. :-9.939103e-03 Min. :5.753541 Min. :-2.255405e-03 1st Qu.:-4.536535e-03 1st Qu.:5.778556 1st Qu.:-4.586796e-04 Median : 8.777611e-04 Median :5.815125 Median :-8.867395e-06 Mean :-1.304469e-06 Mean :5.819267 Mean :-1.965549e-06 3rd Qu.: 4.997747e-03 3rd Qu.:5.859806 3rd Qu.: 4.023465e-04 Max. : 9.114691e-03 Max. :5.898750 Max. : 1.939626e-03 (途中省略)

> plot(stmd, set.pars=NULL, labels = NULL,

main = "stl(mdeaths, s.w = \"per\", robust = FALSE / TRUE )")

> plot(stmR, set.pars=NULL)

> iO <- which(stmR $ weights < 1e-8) # 外れ値をマーク(外れ値は10個)

> sts <- stmR$time.series

> points(time(sts)[iO], .8* sts[,"remainder"][iO], pch = 4, col = "red")

4.8 フィルタリング,平滑化

ドキュメント内 ためになった他の人のサイト script of (ページ 127-131)