Створення автокорельованих випадкових значень у 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 залежать від того, хочу я стаціонарний процес чи ні.

Для нестаціонарних часових рядів я використовую броунівський рух. Наприклад, для довжини 1000 я роблю:

x <- diffinv(rnorm(999))

Для стаціонарного часового ряду я фільтрую шум Гаусса. Наприклад, це виглядає так:

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

У цьому випадку автокореляція в lag дорівнює 0, якщо . В інших випадках нам доводиться обчислювати кореляцію між сумами змінних. Наприклад, для коваріаціяττ>2τ=1

Соv(Х1;Х2)=Соv(Y1+Y2+Y3;Y2+Y3+Y4)=Vаr(Y2)+Vаr(Y3)=2.

Отже, ви бачите, що автоковаріація спадає лінійно вгору до де - довжина фільтра.нн

Ви також можете зробити довгі часові серії пам’яті (наприклад, дробовий броунівський рух), але це ще більше пов'язане. У мене є реалізація R методу Девіс-Харт, який я можу вам надіслати, якщо хочете.


Щоб отримати реалізацію довгих часових рядів пам'яті, я б рекомендував книгу Ворнелла 1996 року (посилання: books.google.cl/books/about/… ), :-). Хоча простежуваність тривалих процесів пам'яті, це не так "просто", ви все одно можете це зробити.
Нестор

Я використовував ваш підхід, і він працює в цілому, але я отримую невеликі відхилення між цільовою функцією, що використовується у фільтрі, і отриманою в результаті функцією автокореляції. Перегляньте це питання: stats.stackexchange.com/questions/176722/…
nnn

7

Якщо у вас є задана функція автоковаріації, найкраща модель (з точки зору простежуваності), яку я можу придумати, - це багатоваріантний гауссовий процес, де, зважаючи на функцію автоковаріації при відставанні , ви можете легко сформувати коваріаційну матрицю ,R(τ)τ

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

Враховуючи цю матрицю коваріації, ви вибираєте дані з багатоваріантної гаусса із заданою коваріаційною матрицею , тобто вибірку вектора з розподілу де - середній вектор.Σ

f(х)=1(2π)N/2|Σ|1/2досвід(-12(х-мк)ТΣ-1(х-мк)),
мк

5

Можна створити корельовану послідовність, побудувавши автоматичний процес, наприклад, процес AR (1) . Створіть використовуючи рівномірний генератор випадкових чисел для обраного вами розподілу. Тоді нехай Отримаємо тощо. послідовно вибираються випадковим чином, використовуючи ваші однакових випадкових чисел. Щоб надати потрібне середнє та стандартне відхилення, ви можете отримати його із середнього та дисперсії послідовності шуму . Виберіть відповідним чином.Х(т)=аХ(т-1)+е(т)е(0)Х(0)=е(0)Х(1)=аХ(0)+е(1)е(i)Х(i)е(i)е(i)


4
Напевно, варто вказати на існування arima.sim()тут функції.
fmark

Впевнені, що ті, хто зараз R, повинні внести ці пропозиції щодо впровадження в R, як хоче знати ОП.
Майкл Р. Черник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.