多变量时间序列 - 在 IRF 的一个变量后拆分

Multivariate time series - splitting after one variable for 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 的所有变量的实际 GDP 增长值 > 0 和一个 < 0 )并计算相应的 IRF。

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

没有成功。

我对您的问题有两个部分的回答:(1) 我将向您展示如何正确地对 complete 进行子集化,(2) 我将向您指出非线性脉冲响应函数的资源VAR。

子集多元时间序列

您尝试对 complete 进行子集化的方式存在一些问题:(1) 您实际上是在对矩阵进行子集化,就像它是一个向量一样,并且 (2) 您使用的是一个逻辑向量length 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

结果是向量而不是矩阵。为什么?来自 Hadley Wickham 的 Advanced R:

Because matrices and arrays are implemented as vectors with special attributes, you can subset them with a single vector. In that case, they will behave like a vector.

此外,它从 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 的脉冲响应函数

我会提醒你在发表像 "Since nonlinear irf's are not possible in R" 这样的声明之前多做一些谷歌搜索。在 R 中,几乎任何事情都是 可能 ,并且由于 R 社区的强大,如果您知道的话,您可能想做的很多事情(关于现存的统计方法)已经被某人实现了去哪里看。

在您的情况下,如果您查看了 GitHub repository for the package you're using you'd see that while a generalized impulse response function hasn't been implemented in the tsDyn package, one of the authors has made code for it that you can find here 执行此操作以获得 TVAR 结果。