Создание автокоррелированных случайных значений в 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)

В этом случае автокорреляция при лаге равна 0, если τ > 2 . В других случаях мы должны вычислить корреляцию между суммами переменных. Например, для τ = 1 ковариацияττ>2τзнак равно1

Соv(Икс1;Икс2)знак равноСоv(Y1+Y2+Y3;Y2+Y3+Y4)знак равноВaр(Y2)+Вaр(Y3)знак равно2.

Итак, вы видите, что автоковариантность линейно уменьшается до где n - длина фильтра.NN

Вы также можете делать длинные временные ряды памяти (например, дробное броуновское движение), но это более сложный процесс. У меня есть R-реализация метода Дэвиса-Харта, которую я могу отправить вам, если хотите.


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

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

7

Если у вас есть заданная автоковариационная функция, то лучшая модель (с точки зрения управляемости), которую я могу придумать, - это многомерный гауссовский процесс, где, учитывая автоковариационную функцию при запаздывании τ , вы можете легко сформировать ковариационную матрицу,р(τ)τ

Σзнак равно[р(0)р(1),,,р(N)р(1)р(0),,,р(N-1),,,р(N)р(N-1),,,р(0)]

Учитывая это ковариационная матрица, вы выборки данных из многомерного гауссовой с заданной ковариационной матрицей , т.е. образца вектор из распределения F ( х ) = 1Σ гдеμ - средний вектор.

е(Икс)знак равно1(2π)N/2|Σ|1/2ехр(-12(Икс-μ)TΣ-1(Икс-μ)),
μ

5

Икс(T)знак равноaИкс(T-1)+е(T)е(0)Икс(0)знак равное(0)Икс(1)знак равноaИкс(0)+е(1)е(я)Икс(я)е(я)е(я)


4
Вероятно, стоит указать на наличие arima.sim()функции здесь.
fmark

Конечно, те, кто сейчас R, должны сделать эти предложения для реализации в R, как хочет знать ОП.
Майкл Р. Черник
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.