web-dev-qa-db-ja.com

Rの時系列とstl:エラーは単変量系列のみが許可されます

整理されていないファイルの1時間ごとの降水量の分析を行っています。しかし、私はそれをクリーンアップして、次のような形式のデータフレーム(CA1と呼ばれる)に保存することができました。

  Station_ID Guage_Type   Lat   Long       Date Time_Zone Time_Frame H0 H1 H2 H3 H4 H5        H6        H7        H8        H9       H10       H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23
1    4457700         HI 41.52 124.03 1948-07-01         8        LST  0  0  0  0  0  0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0   0   0   0  0  0   0   0   0   0   0   0
2    4457700         HI 41.52 124.03 1948-07-05         8        LST  0  1  1  1  1  1  2.0000000 2.0000000 2.0000000 4.0000000 5.0000000 5.0000000   4   7   1   1   0 0  10  13   5   1   1   3
3    4457700         HI 41.52 124.03 1948-07-06         8        LST  1  1  1  0  1  1 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0   0   0   0   0  0   0   0   0   0   0   0
4    4457700         HI 41.52 124.03 1948-07-27         8        LST  3  0  0  0  0  0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0   0   0   0   0 0   0   0   0   0   0   0
5    4457700         HI 41.52 124.03 1948-08-01         8        LST  0  0  0  0  0  0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000   0   0   0   0   0 0   0   0   0   0   0   0
6    4457700         HI 41.52 124.03 1948-08-17         8        LST  0  0  0  0  0  0 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889   6   1   0   0   0 0   0   0   0   0   0   0

ここで、H0からH23は1日あたり24時間を表します(行)

CA1(上記のデータフレーム)のみを使用して、24ポイントの毎日(行)を取得し、それを垂直に転置し、残りの日(行)を1つの変数に連結します。これをdat1と呼びます。

 > dat1[1:48,]
  H0  H1  H2  H3  H4  H5  H6  H7  H8  H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23  H0  H1  H2  H3  H4  H5  H6  H7  H8  H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   2   2   2   4   5   5   4   7   1   1   0  0  10  13   5   1   1   3 

変数dat1を使用して、時系列データを取得するための引数として入力します。

> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    frequency = 24)

注意すべきいくつかの事柄:

>dim(CA1)
  [1] 5636   31
>length(dat1)
  [1] 135264

したがって、5636 * 24(行あたりの合計データポイント[24])= 135264合計ポイント。長さ(rainCA1)は上記の点と一致しています。ただし、ts関数に終了すると、次のようになります。

>rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    end = c(1900+as.POSIXlt(CA1[5636,5])$year, 1+as.POSIXlt(CA1[5636,5])$mon),
    frequency = 24)

全長1134のポイントがあり、多くのデータが欠落しています。これは、日付が連続していないためであり、開始点の引数として月と年のみを適用しているためだと思います。

続けて、正しいパスだと思うので、end引数なしで最初のts計算を使用して、stlの入力としてそれを提供します。

>rainCA1_2 <-stl(rainCA1, "periodic")

残念ながら、エラーが発生します。

Error in stl(rainCA1, "periodic") : only univariate series are allowed

私はそれを理解していないか、それについてどうやって行くのか。ただし、ts関数に戻ってend引数を指定すると、stlはエラーなしで正常に機能します。

私は多くのフォーラムで調査しましたが、時間単位のデータのデータ属性を取得するための適切なソリューションを提供する人は誰もいません(または私の理解では)。誰かが私を助けてくれるなら、私はそれを高く評価します。ありがとうございました!

13

このエラーは、データの形状の結果です。 > dim(rainCA1)を試してください。 _> [1] 135264 1_のようなものを与えると思います。 _rainCA1 <- ts(dat1 ..._を_rainCA1 <- ts(dat1[[1]] ..._に置き換えると、機能するはずです。

それが正しく行われるかどうか、私は疑問に思います...あなたの最初の仕事は、一貫した形式のデータを取得することだと思います。 ts()が正しい入力を取得することを確認してください。 ts の正確な仕様を確認してください。

ts()は日時形式を解釈しません。 ts()には、一定の間隔で連続するデータポイントが必要です。メジャーカウンターとマイナーカウンターを使用します(そのうちのfrequencyは1つのメジャーカウンターに収まります)。たとえば、データが1時間ごとで、毎日のレベルで季節性が予想される場合、frequencyは24になります。したがって、startendは主に表面的なものです:startは、メジャーカウンターのt(0)を示すだけですが、endはt(end)を示します。

11
oddman

ここにリンクされている別の質問でこの種のエラーを回避するために、非常に簡単な例で書き込み方法を説明しようとしました。

stl()分解は単変量tsオブジェクトを受け入れませんか?

4
Elias

私が見つけた解決策の1つは、time_series_var <- ts(data[, c("var_of_interest")])、次にtime_series_var <- ts(as.vector(time_series_var))です。その後、次元が正しくなると、単変量に関連するエラーが消えます。

1
roarkz