2ちゃんねるの数学板・「= 統計解析フリーソフト R =」スレッドでdecomposeの使い方についてご質問をいただきましたので、矢野から一般的な使い方について回答させていただきます。
http://science3.2ch.net/test/read.cgi/math/1062650510/420-434
回答の要約:decompose(x)とした時には、xはfrequencyを持った時系列データでなければならない(frequencyはtsコマンドで設定する)。そのfrequencyが設定されていない場合、 "Time series has no or less than 3 periods!" というエラーが発生する。対処法としてはtsコマンドを用いて、適切なfrequencyを設定してやればよい。
具体的な手順:
The R bookのCD-ROMに添付された以下のようなデータの場合の具体的な手順を述べる(データはカンマで区切られた、1998年1月から2003年12月までの月次データ)。
"Date","TOPIX","JGB10Year","IndustrialProduct","EnterprisePrices" 199801,1267.51,1.765,99.9,102.6 199802,1272.45,1.66,97.4,102.3 199803,1251.7,1.58,95.4,101.9 199804,1222.98,1.455,94.8,101.6 199805,1221.49,1.21,94,101.5 199806,1230.38,1.32,94.1,101.5 199807,1262.04,1.24,93.9,101.5 199808,1106.49,1.045,91.9,101.4 199809,1043.57,0.76,93.3,101.4 199810,1035.6,0.82,92.8,100.7 199811,1143.5,1.055,92.4,100.5 199812,1086.99,2.013,92.2,100.5 (中略) 200311,999.75,1.295,98.7,94.8 200312,989.95,1.36,97.7,95
このデータからTOPIXだけを取り出して、decomposeで季節調整を実行する。
data <- read.table("JPMacroEcon.csv", sep=",", header=T) topix <- data$TOPIX topixTs <- ts(topix, frequency=12, start=c(1998,1)) plot(decompose(topixTs))
まず、1行目でJPMacroEcon.csvというファイルからデータを読み込む。ファイルの形式がカンマ区切りであるからsep=","を設定し、ファイルにヘッダがあるためheader=Tを設定する。2行目でdataからTOPIXだけを取り出し、topixに代入する(この時点ではtopixはただの配列)。3行目でtsコマンドを使ってただの配列であるtopixを時系列オブジェクト(tsオブジェクト)に変換する。この際にfrequencyを設定することが必要(月次データなのでfrequency=12。四半期ならfrequency=4などとなる)。
失敗する場合(frequencyが設定されていない場合):
data <- read.table("JPMacroEcon.csv", sep=",", header=T) topix <- data$TOPIX topixTs <- ts(topix, start=c(1998,1)) plot(decompose(topixTs)) Error in decompose(topixTs) : time series has no or less than 3 periods
日次データにおけるfrequencyの設定について:
未だにあまり良い方法が見つかっていません。もし、何か良い方法を見つけられた方がおられましたら、ぜひ教えてください!またとりあえずの方法に関しては以下が役に立つかもしれません。
frequencyについて in 初級Q&A アーカイブ(1)