R'de otomatik korelasyonlu rastgele değerler oluşturma


11

Zaman çizelgesi olarak kullanılacak otomatik korelasyonlu rasgele değerler yaratmaya çalışıyoruz. Bahsettiğimiz mevcut verimiz yok ve sadece vektörü sıfırdan oluşturmak istiyoruz.

Bir yandan elbette dağıtım ve SD'si ile rastgele bir sürece ihtiyacımız var.

Öte yandan, rasgele süreci etkileyen otokorelasyon tarif edilmelidir. Vektörün değerleri, birkaç zaman gecikmesi boyunca azalan mukavemet ile otomatik olarak ilişkilidir. örneğin lag1, 0.5, lag2 0.3, lag1 0.1 vb.

Sonuçta vektör şu şekilde görünmelidir: 2, 4, 7, 11, 10, 8, 5, 4, 2, -1, 2, 5, 9, 12, 13, 10, 8, 4, 3, 1, -2, -5

ve bunun gibi.

Yanıtlar:


11

Aslında sık sık bu problemle karşılaşıyorum. R'de otomatik korelasyonlu bir zaman serisi oluşturmak için iki favori yolum, sabit bir işlem isteyip istemediğime bağlıdır.

Durağan olmayan bir zaman serisi için Brown hareketi kullanıyorum. Örneğin, 1000 uzunluk için:

x <- diffinv(rnorm(999))

Sabit bir zaman serisi için Gauss gürültüsünü filtreliyorum. Örneğin, bu şöyle görünür:

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

Bu durumda, gecikmedeki otomatik korelasyon τ 0 ise τ>2. Diğer durumlarda, değişkenlerin toplamları arasındaki korelasyonu hesaplamamız gerekir. Örneğinτ=1 kovaryans

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

Gördüğünüz gibi, otomatik kovaryans doğrusal olarak n nerede n filtrenin uzunluğudur.

Ayrıca uzun bellek zaman serileri yapmak isteyebilirsiniz (kesirli Brownian hareketi gibi), ancak bu daha çok işin içine girer. İsterseniz size gönderebileceğim Davies-Harte yönteminin bir R uygulamam var.


Uzun bellek zaman serilerinin farkına varmak için Wornell'in 1996 kitabını tavsiye ederim (link: books.google.cl/books/about/… ), :-). Uzun bellek işlemlerinin izlenebilirliği kolay olmasa da, yine de yapabilirsiniz.
Néstor

Yaklaşımınızı kullandım ve genel olarak işe yarıyor, ancak filtrede kullanılan hedef işlev ile sonuçtaki otokorelasyon işlevi arasında hafif sapmalar oluyor. Lütfen şu soruya bir göz atın: stats.stackexchange.com/questions/176722/…
nnn

7

Belirli bir otokovaryans fonksiyonunuz varsa, düşünebileceğim en iyi model (izlenebilirlik açısından), otokovaryans fonksiyonu verildiğinde, çok değişkenli bir gauss sürecidir. R(τ) gecikmeli τ, kovaryans matrisini kolayca oluşturabilirsiniz,

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

Bu kovaryans matrisi göz önüne alındığında, verilen kovaryans matrisi ile çok değişkenli bir gaussiandan veri örneklersiniz Σ, yani, dağılımdan bir vektör örnekleme

f(x)=1(2π)N/2|Σ|1/2exp(12(xμ)TΣ1(xμ)),
nerede μ ortalama vektördür.

5

Bir otoregresif süreç oluşturarak ilişkili bir sıra oluşturabilirsiniz. Örneğin bir AR (1) süreci X(t)=aX(t1)+e(t). üretmeke(0)seçtiğiniz dağıtım için düzgün bir rasgele sayı üreteci kullanarak. Sonra LetX(0)=e(0) Almak X(1)=aX(0)+e(1)ve bunun gibi. e(i)sıralı rasgele sayılarınızı kullanarak rasgele seçilmişlerdir. VermekX(i) istediğiniz ortalama ve standart sapmayı, gürültü dizisinin ortalama ve varyansından çıkarabilirsiniz e(i). Seçe(i) uygun şekilde.


4
Muhtemelen arima.sim()burada işlevin varlığını belirtmeye değer .
fmark

Şimdi R olanların OP'nin bilmek istediği gibi R'de uygulanması için bu önerileri yaptıklarından emin olun.
Michael R.Chernick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.