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

时间:2017-11-10 22:07:51

标签: r var tvar

我有一个阈值VAR。由于R中不可能使用非线性irf,我想用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 个答案:

答案 0 :(得分:0)

我对你的问题有一个两部分的答案:(1)我将向你展示如何正确地分组complete,(2)我将指出一个非线性VAR的脉冲响应函数的资源。

子集多变量时间序列

您尝试对complete进行子集的方式存在一些问题:(1)您基本上是对矩阵进行子集化,就像它是一个向量,以及(2)您使用的是长度为{的逻辑向量{1}}当你想要一个长度为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

这导致了一个向量而不是一个矩阵。为什么?来自Hadley Wickham的Advanced R

  

因为矩阵和数组是作为具有特殊属性的向量实现的,所以可以使用单个向量对它们进行子集化。在这种情况下,它们的行为就像一个向量。

此外,它从# 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 的第二列中提取的元素与第一列的正元素不对齐。为什么?让我们看看您用于子集的逻辑向量:

complete

有10个元素,而ts1 > 0 [1] FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE 只有8行,因为您使用的complete只提供了完整的案例(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

TVAR的脉冲响应功能

我会提醒你做更多的谷歌搜索之前你做一个声明,“因为非线性irf在R中是不可能的”。在R中几乎任何东西都是可能的,并且由于R社区很棒,如果你知道在哪里看,你可能想要做的很多事情(关于现存的统计方法)已经被某人实施了

在您的情况下,如果您查看了GitHub repository for the package you're using a generalized impulse response function hasn't been implemented in the tsDyn package,您会看到here,其中一位作者为其创建了代码,您可以找到{{3}}这适用于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 结果。