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

時系列を部分的に集約する aggregate()

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

4.1 時系列オブジェクトの生成と処理

4.1.10 時系列を部分的に集約する aggregate()

データを部分集合に分割し,各々に対する要約統計量を計算し,結果を適切な形式で 返す.

書式:

aggregate(x, ...)

aggregate(x, by, FUN, ...) #

クラス

"data.frame"

用メソッド

#

クラス

"ts"

用メソッド

aggregate(x, nfrequency = 1, FUN = sum, ndeltat = 1, ts.eps = getOption("ts.eps"), ...)

引数:

x R

オブジェクト

by

グループ化要素のリストで,各々は

x

中の変数と同じ長さを持つ.

FUN

要約統計量を計算する,全てのデータサブセットに適用可能なスカラ値関数

nfrequency

時間単位毎の新しい観測値数.

x

の周波数の約数でなければならない

ndeltat

引き続く観測値間のサンプリング間隔の新しい比率.

x

のサンプリング間隔

の約数でなければならない

ts.eps nfrequency

が元の周波数の約数かどうかを判定する許容度

...

メソッドに引き渡される

(

使われる

)

追加引き数

aggregate()

はデータフレームと時系列に対するメソッドを持つ総称的関数である.

既定のメソッド

aggregate.default()

は,もし

x

が時系列なら時系列用メソッドを使 い,さもなければ,

x

をデータフレームに強制変換してからデータフレーム用メソッドを 呼び出す.

aggregate.data.frame()

はデータフレーム用のメソッドである.もし

x

がデータ フレームでなければ,データフレームに強制変換される.それから,

x

中の変数

(

)

の 各々が

by

の成分の同一の組合せを持つケース

(

)

のサブセットに分割される.そして,

FUN

...

中の追加引き数を用いて,各サブセットに適用される.

(

つまり,

x

中の各変 数

VAR

に対して,実際は

lapply()

の一回の呼び出しに置き換えられた,

tapply(VAR, by, FUN, ..., simplify = FALSE)

が実行される.

)

空のサブセットは除去され,結 果は

by

x

中の変数を含むデータフレームに再整形される.

by

に由来する変数はサブ セットを決定するのに使われたグルーピング変数の一意的な組合せを含み,

x

に由来する 変数は,対応する

x

中のサブセットに対する要約統計量を含む.

aggregate.ts()

は時系列用のメソッドである.もし

x

が時系列でなければ,時系列

に強制変換される.それから,

x

中の変数が長さ

frequency(x)/nfrequency

の適当な ブロックに分割され,

...

中の

(

名前付き

)

引き数を備えた関数

FUN

が各ブロックに適用 される.返される結果は集約された値を含む周波数

nfrequency

の時系列である.

# 米国50州の各種データstate.x77中の変数を,4地域毎にグループ化し平均を取る

> aggregate(state.x77, list(Region = state.region), mean)

Region Population Income Illiteracy Life Exp Murder HS Grad

1 Northeast 5495.111 4570.222 1.000000 71.26444 4.722222 53.96667 2 South 4208.125 4011.938 1.737500 69.70625 10.581250 44.34375 3 North Central 4803.000 4611.083 0.700000 71.76667 5.275000 54.51667 4 West 2915.308 4702.615 1.023077 71.23462 7.215385 62.00000

Frost Area

1 132.7778 18141.00 2 64.6250 54605.12 3 138.8333 62652.00 4 102.1538 134463.00

# 地域と霜が130日以上降りたかどうかで平均を取る(Southにはそうした州が無い)

> aggregate(state.x77, list(Region = state.region, Cold = state.x77[,"Frost"] > 130), mean)

Region Cold Population Income Illiteracy Life Exp Murder 1 Northeast FALSE 8802.8000 4780.400 1.1800000 71.12800 5.580000 2 South FALSE 4208.1250 4011.938 1.7375000 69.70625 10.581250 3 North Central FALSE 7233.8333 4633.333 0.7833333 70.95667 8.283333 4 West FALSE 4582.5714 4550.143 1.2571429 71.70000 6.828571 5 Northeast TRUE 1360.5000 4307.500 0.7750000 71.43500 3.650000 6 North Central TRUE 2372.1667 4588.833 0.6166667 72.57667 2.266667 7 West TRUE 970.1667 4880.500 0.7500000 70.69167 7.666667

HS Grad Frost Area

1 52.06000 110.6000 21838.60 2 44.34375 64.6250 54605.12 3 53.36667 120.0000 56736.50 4 60.11429 51.0000 91863.71 5 56.35000 160.5000 13519.00 6 55.66667 157.6667 68567.50 7 64.20000 161.8333 184162.17

# 米国大統領支持率データpresidentsの年毎の支持率を求める

> aggregate(presidents, nf = 1, FUN = mean)

Time Series: Start = 1945 End = 1974 Frequency = 1

[1] NA 47.00 51.00 NA 58.50 41.75 28.75 NA 67.00 65.00 72.75 72.25 [13] 65.25 52.25 61.50 62.75 76.00 71.50 64.75 72.75 66.50 52.25 45.00 41.00 [25] 61.25 58.00 50.50 NA 44.75 25.25

# 夏期により少ない重みを与え平均

> aggregate(presidents, nf = 1, FUN = weighted.mean, w = c(1, 1, 0.5, 1)) Time Series: Start = 1945 End = 1974 Frequency = 1

[1] NA 47.57143 50.57143 NA 58.71429 41.14286 28.28571 NA [9] 65.85714 64.14286 71.85714 73.00000 65.57143 52.85714 61.57143 63.00000 [17] 76.71429 72.85714 65.14286 73.28571 66.14286 51.71429 46.00000 41.85714 [25] 60.71429 57.57143 50.00000 NA 45.42857 25.42857

4.1.11 欠損値を含まない最長の部分時系列を取り出す na.contiguous()

メソッド

na.omit() (

実際は関数

na.omot.ts())

は時系列の先頭と末尾にある

(

引 き続く

)

欠損値を取り去る.内部に含まれる欠損値はエラーとなる.返り値は欠損値 の無い時系列となる.

object

のクラスは保存される.

na.omit(), na.fail()

そして

na.contiguous()

を参照せよ.

na.contiguous()

は引き続いて欠損値を含まないような,最長の部分時系列を取り出

す.もしそうしたものが複数あれば,最初のものを返す.引き数

frame

は一次元,もし くは多次元時系列である.

frame

のクラスは保存される.

書式:

#

クラス

"ts"

に対する

S3

メソッド

na.omit(object, ...)

na.contiguous(object, ...)

引数:

object

一変量,もしくは多変量時系列

...

他のメソッドに

(

から

)

引き渡される追加引き数

> (x <- ts(c(NA,NA,1:10,NA), start=c(2008,1), frequency=12)) # 先頭と末尾にNAを含む時系列 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

2008 NA NA 1 2 3 4 5 6 7 8 9 10

2009 NA

> na.omit(x) # 先頭と末尾のNAが全て除かれる

Mar Apr May Jun Jul Aug Sep Oct Nov Dec

2008 1 2 3 4 5 6 7 8 9 10

> (x <- ts(c(NA,NA,1:5,NA,6:10,NA), start=c(2008,1), frequency=12)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

2008 NA NA 1 2 3 4 5 NA 6 7 8 9

2009 10 NA # 途中にNAがあるとエラー

> na.omit(x) 以下にエラー na.omit.ts(x) : 時系列は内部に NA 値を含んでいます

> (x <- ts(cbind(c(NA,NA,1:10,NA),c(1:11,NA,NA)), start=c(2008,1),

frequency=12)) # 多変量時系列の場合

Series 1 Series 2

Jan 2008 NA 1

Feb 2008 NA 2

Mar 2008 1 3

Apr 2008 2 4

May 2008 3 5

Jun 2008 4 6

Jul 2008 5 7

Aug 2008 6 8

Sep 2008 7 9

Oct 2008 8 10

Nov 2008 9 11

Dec 2008 10 NA

Jan 2009 NA NA

> na.omit(x)

Series 1 Series 2

Mar 2008 1 3

Apr 2008 2 4

May 2008 3 5

Jun 2008 4 6

Jul 2008 5 7

Aug 2008 6 8

Sep 2008 7 9

Oct 2008 8 10

Nov 2008 9 11

> (x <- ts(c(NA,NA,1:5,NA,6:11,NA), start=c(2008,1), frequency=12)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

2008 NA NA 1 2 3 4 5 NA 6 7 8 9

2009 10 11 NA

> na.contiguous(x) # NA値を含まない最長の副時系列を取り出す

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

2008 6 7 8 9

2009 10 11

> (x <- ts(cbind(c(NA,NA,1:5,NA,6:9,NA),c(1:11,NA,NA)), start=c(2008,1),

frequency=12)) # 多変量時系列の場合

Series 1 Series 2

Jan 2008 NA 1

Feb 2008 NA 2

Mar 2008 1 3

Apr 2008 2 4

May 2008 3 5

Jun 2008 4 6

Jul 2008 5 7

Aug 2008 NA 8

Sep 2008 6 9

Oct 2008 7 10

Nov 2008 8 11

Dec 2008 9 NA

Jan 2009 NA NA

> na.contiguous(x)

Series 1 Series 2

Mar 2008 1 3

Apr 2008 2 4

May 2008 3 5

Jun 2008 4 6

Jul 2008 5 7

4.2 時系列の自己共分散・相関係数,スペクトル密度

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