1

Rのzooオブジェクトで「ラグ」を行う関数を「適用」しようとしています.

単一のzooベクトルを渡すと、関数は正しく機能します-ラグが適用され、すべてが機能します。

ただし、apply( data, 1, function )ラグが機能しない場合。エラーはなく、ゼロ ラグと同等です。

これは単純なapply( data, 1, lag ).

なぜこれが当てはまるのか、誰でも説明できますか?ラグを発生させるためにできることはありますか?

4

3 に答える 3

3

ここにいくつかのデータがあります:

 > x <- zoo(matrix(1:12, 4, 3), as.Date("2003-01-01") + 0:3)
 > x
 2003-01-01 1 5  9
 2003-01-02 2 6 10
 2003-01-03 3 7 11
 2003-01-04 4 8 12

この多変量時系列を遅らせたい場合は、lag を呼び出すだけです (つまり、適用する必要はありません)。

 > lag(x)                 
 2003-01-01 2 6 10
 2003-01-02 3 7 11
 2003-01-03 4 8 12

行全体に関数を適用する場合は、賢明である必要があります。たとえば、行の値の平均を取得するには:

> apply(x, 1, mean)
2003-01-01 2003-01-02 2003-01-03 2003-01-04 
         5          6          7          8 

Zoo オブジェクトを適用して Zoo オブジェクトを元に戻すことはできません。apply の出力は「値のベクトルまたは配列またはリスト」です。上記の例では:

> class(apply(x, 1, mean))
[1] "numeric"

Zoo オブジェクトとして再作成してからラグする必要があります。

> lag(zoo(apply(coredata(x), 1, mean), index(x)))
 2003-01-01 2003-01-02 2003-01-03 
         6          7          8 

出力の方向に少し注意する必要があります。ただし、必要に応じてt()関数で転置できます。例えば:

> zoo(t(apply(coredata(x), 1, quantile)), index(x))
           0% 25% 50% 75% 100%
2003-01-01  1   3   5   7    9
2003-01-02  2   4   6   8   10
2003-01-03  3   5   7   9   11
2003-01-04  4   6   8  10   12

これを関数でラップすることもできます。または、時系列ライブラリの適用関数の 1 つを使用することもできますxts(これにより、時系列オブジェクトがプロセスに保持されます)。

> x <- as.xts(x)
> apply.daily(x, mean)
           [,1]
2003-01-01    5
2003-01-02    6
2003-01-03    7
2003-01-04    8
于 2009-09-25T11:43:05.733 に答える
1

quantmod::Lagさまざまなラグ値で、シリーズのさまざまなラグシリーズからなるマトリックスを生成する関数を試してみませんか? 例えば

> quantmod::Lag (1:10, k=c(0,5,2))

戻ります

Lag.0 Lag.5 Lag.2
 [1,]     1    NA    NA
 [2,]     2    NA    NA
 [3,]     3    NA     1
 [4,]     4    NA     2
 [5,]     5    NA     3
 [6,]     6     1     4
 [7,]     7     2     5
 [8,]     8     3     6
 [9,]     9     4     7
[10,]    10     5     8
于 2011-02-06T20:22:24.253 に答える
0

@Marek - lag(data) は私が望むことを行いますが、これを「適用」構造の一部として使用して、ベクトル - >マトリックスの抽象化を少し簡単にしたいと考えました。

于 2009-09-25T09:17:00.973 に答える