Многомерный временной ряд - расщепление по одной переменной для 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
Результаты.