Rで自己相関ランダム値を作成する


11

時系列として使用される自動相関ランダム値を作成しようとしています。参照する既存のデータはなく、ベクターを最初から作成したいだけです。

一方では、もちろん、分布とそのSDを使用したランダムプロセスが必要です。

一方、ランダムプロセスに影響を与える自己相関について説明する必要があります。ベクトルの値は、いくつかのタイムラグで強度が減少することと自己相関します。たとえば、lag1には0.5、lag2 0.3、lag1 0.1などがあります。

したがって、最終的にベクトルは次のようになります。2、4、7、11、10、8、5、4、2、-1、2、5、9、12、13、10、8、4、3。 1、-2、-5

等々。

回答:


11

私は実際にその問題にしばしば遭遇します。Rで自己相関のある時系列を生成するための私の2つのお気に入りの方法は、定常プロセスが必要かどうかによって異なります。

非定常時系列では、ブラウン運動を使用します。たとえば、長さが1000の場合、次のようにします。

x <- diffinv(rnorm(999))

定常時系列では、ガウスノイズをフィルター処理します。たとえば、次のようになります。

x <- filter(rnorm(1000), filter=rep(1,3), circular=TRUE)

その場合、ラグ自己相関は場合0になります。他の場合では、変数の合計間の相関を計算する必要があります。たとえば、、共分散はττ>2τ=1

Cov(X1;X2)=Cov(Y1+Y2+Y3;Y2+Y3+Y4)=Var(Y2)+Var(Y3)=2.

したがって、自動共分散はまで直線的に減少します。ここで、はフィルターの長さです。nn

メモリーの長い時系列(分数ブラウン運動など)を実行することもできますが、これはより複雑です。私はあなたが望むならあなたに送ることができるデイビス・ハートメソッドのR実装を持っています。


長い記憶の時系列を実現するには、Wornellの1996年の本(リンク:books.google.cl/books/about/…)、:-) をお勧めします。長いメモリ処理の扱いやすさは「それほど」簡単ではありませんが、それでも実行できます。
ネストル2012年

私はあなたのアプローチを使用しましたが、それは一般的に機能しますが、フィルターで使用されるターゲット関数と結果の自己相関関数との間にわずかな偏差が生じます。:この質問を見ていてくださいstats.stackexchange.com/questions/176722/...を
NNN

7

与えられた自己共分散関数がある場合、私が考えることができる最良のモデル(扱いやすさの観点から)は、多変量ガウス過程であり、ここで、自己共分散関数R(τ) at lag τ, you can form the covariance matrix easily,

Σ=[R(0)R(1)...R(N)R(1)R(0)...R(N1)...R(N)R(N1)...R(0)]

Given this covariance matrix, you sample data from a multivariate gaussian with the given covariance matrix Σ, i.e., sample a vector from the distribution

f(x)=1(2π)N/2|Σ|1/2exp(12(xμ)TΣ1(xμ)),
where μ is the mean vector.

5

You can generate a correlated sequence by constructing an autoregressive process For example an AR(1) process X(t)=aX(t1)+e(t). Generate e(0) using a uniform random number generator for your chosen distribution. Then Let X(0)=e(0) Get X(1)=aX(0)+e(1) and so on. The e(i) are successively chosen at random using your uniform random numbers. To give X(i) the mean and standard deviation you want, you can derive it from the mean and variance of the noise sequence e(i). Choose e(i) appropriately.


4
It's probably worth pointing out the existence of the arima.sim() function here.
fmark

Sure those who now R should make those suggestions for implementation in R as the OP wants to know.
Michael R. Chernick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.