0

我有一个阈值 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))] 

不工作。

4

1 回答 1

0

我对您的问题有两个部分的答案:(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

这导致了一个向量而不是一个矩阵。为什么?来自 Hadley Wickham 的Advanced 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 的脉冲响应函数

我会提醒您在做出诸如“由于非线性 irf 在 R 中是不可能的”之类的声明之前,请先进行更多的谷歌搜索。在 R 中几乎任何事情都是可能的,并且由于 R 社区非常强大,如果您知道去哪里寻找,那么您可能想做的许多事情(关于现存的统计方法)已经被某人实现了。

在您的情况下,如果您查看了您正在使用的包的 GitHub 存储库,您会发现虽然tsDyn 包中尚未实现通用脉冲响应函数,但其​​中一位作者已经为其编写了代码你可以在这里找到这样做的TVAR结果。

于 2017-11-11T00:23:04.270 回答