Многомерный временной ряд - расщепление по одной переменной для IRF

У меня есть порог VAR. Поскольку нелинейные IRF невозможны в R, я хочу обойти это с помощью IRF.

Ниже приведены коды для моего многомерного временного ряда, а затем TVAR

complete=ts.intersect(GDPdiff2,Inflationdiff2,Euribordiff2,CISSdiff2)

tvarcomplete= TVAR(complete, lag=4, nthresh=1, thDelay=1, thVar=complete[,1], trim=0.15)

Я хочу разделить существующий временной ряд с 4 переменными на две (одна VAR со значениями всех переменных, у которых реальный рост ВВП> 0, а другая с < 0) и рассчитать соответствующие IRF.

   SPLITGDPup <- complete[(GDPdiff2>(0))] 

не работал.

1 ответ

Решение

У меня есть ответ из двух частей на ваш вопрос: (1) Я покажу вам, как подмножество complete правильно, (2) я укажу вам ресурс для функций импульсного отклика нелинейных VAR.

Подмножество многомерного временного ряда

Есть несколько проблем с тем, как вы пытались подмножество complete: (1) вы по сути поднабор матрицы, как это был вектор, и (2) вы использовали логический вектор длины length(GDPdiff2) когда вы хотели логический вектор длины nrow(complete), Чтобы проиллюстрировать это, я сначала приведу несколько примеров данных, поскольку вы не предоставили свои:

# set the seed for reproducibility
set.seed(123)
# make example data
ts1 <- ts(rnorm(10))
ts2 <- ts(rnorm(8))
complete <- ts.intersect(ts1, ts2)
complete

Time Series:
Start = 1 
End = 8 
Frequency = 1 
          ts1        ts2
1 -0.56047565  1.2240818
2 -0.23017749  0.3598138
3  1.55870831  0.4007715
4  0.07050839  0.1106827
5  0.12928774 -0.5558411
6  1.71506499  1.7869131
7  0.46091621  0.4978505
8 -1.26506123 -1.9666172

Теперь мы попробуем установить его так, как вы:

# attempt to subset like yours
complete[ts1 > 0]

[1]  1.55870831  0.07050839  0.12928774  1.71506499  0.46091621 -0.55584113
[7]  1.78691314  0.49785048 -1.96661716

Это привело к вектору вместо матрицы. Зачем? Из Продвинутого R Хэдли Уикхэма:

Поскольку матрицы и массивы реализованы в виде векторов со специальными атрибутами, вы можете поместить их в один вектор. В этом случае они будут вести себя как вектор.

Более того, элементы, которые он вытащил из второго столбца complete не совпадают с положительными элементами первого столбца. Зачем? Давайте посмотрим на логический вектор, который вы бы использовали для подмножества:

ts1 > 0
[1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE

Есть 10 элементов, в то время как complete только 8 строк, потому что вы использовали ts.intersect который дает только полные случаи (ts2 имеет меньше наблюдений, чем ts1). Сочетание этих двух вопросов - вот почему ваша стратегия подмножества не сработала. Вот как это сделать правильно:

complete[complete[, 'ts1'] > 0, ]

            ts1        ts2
[1,] 1.55870831  0.4007715
[2,] 0.07050839  0.1106827
[3,] 0.12928774 -0.5558411
[4,] 1.71506499  1.7869131
[5,] 0.46091621  0.4978505

В качестве альтернативы, если вы знаете и предпочитаете использовать номер столбца:

complete[complete[, 1] > 0, ]

            ts1        ts2
[1,] 1.55870831  0.4007715
[2,] 0.07050839  0.1106827
[3,] 0.12928774 -0.5558411
[4,] 1.71506499  1.7869131
[5,] 0.46091621  0.4978505

Функция импульсного отклика для TVAR

Я хотел бы предупредить вас, чтобы вы сделали больше Googling, прежде чем вы сделаете заявление типа "Так как нелинейные значения IRF невозможны в R". В R почти все возможно, и благодаря большому сообществу R многие вещи, которые вы могли бы захотеть сделать (в отношении существующих статистических методов), уже были кем-то реализованы, если вы знаете, где искать.

В вашем случае, если бы вы посмотрели на репозиторий GitHub для используемого вами пакета, вы бы увидели, что хотя обобщенная функция импульсного отклика не была реализована в пакете tsDyn, один из авторов создал для нее код, который Вы можете найти здесь, что делает это для TVAR Результаты.

Другие вопросы по тегам