Rで任意の変数(つまり、通常の時系列ではない)のラグ変数の行列を作成する最も効率的な方法は何ですか?
例えば:
入力:
x <- c(1,2,3,4)
2ラグ、出力:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
Rで任意の変数(つまり、通常の時系列ではない)のラグ変数の行列を作成する最も効率的な方法は何ですか?
例えば:
入力:
x <- c(1,2,3,4)
2ラグ、出力:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
組み込みembed()
関数を使用してこれを実現できます。ここで、2 番目の「ディメンション」引数は、「lag」と呼ばれるものと同等です。
x <- c(NA,NA,1,2,3,4)
embed(x,3)
## returns
[,1] [,2] [,3]
[1,] 1 NA NA
[2,] 2 1 NA
[3,] 3 2 1
[4,] 4 3 2
embed()
Joshua Reichによる以前の回答で議論されました。(目的の出力を複製するために、x の先頭に NA を追加したことに注意してください)。
特に名前はよくありませんが、ローリング合計や移動平均など、スライディング ウィンドウを含む操作には非常に便利で強力です。
class
オブジェクトに適切なを使用してください。ベースRにts
は、lag()
操作する関数があります。これらのts
オブジェクトは、'delta' または 'frequency' が一定の時からのものであることに注意してください: マクロ経済シリーズのように、月次または四半期ごとのデータ。
(ビジネス) デイリーなどの不規則なデータの場合は、ラグも (非常にうまく) 処理できるzooまたはxtsパッケージを使用します。そこからさらに先に進むには、dynlmやdlmなどのパッケージを使用して、ラグのある動的回帰モデルを許可できます。
時系列、計量経済学、金融のタスク ビューにはすべて、さらなるポインターがあります。
パッケージ内のrunning
関数は、gtools
多かれ少なかれあなたが望むことを行います:
> require("gtools")
> running(1:4, fun=I, width=3, allow.fewer=TRUE)
$`1:1`
[1] 1
$`1:2`
[1] 1 2
$`1:3`
[1] 1 2 3
$`2:4`
[1] 2 3 4
私にとって最も効果的な方法は、パッケージのlag
関数を使用することです。dplyr
例:
> require(dplyr)
> lag(1:10, 1)
[1] NA 1 2 3 4 5 6 7 8 9
> lag(1:10, 2)
[1] NA NA 1 2 3 4 5 6 7 8