【问题标题】:Multivariate time series - splitting after one variable for IRF多变量时间序列 - 在 IRF 的一个变量后拆分
【发布时间】:2017-11-11 08:23:04
【问题描述】:

我有一个阈值 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 的变量的值,一个具有

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

没用。

【问题讨论】:

  • 让其他人更容易帮助你:请提供一个最小的可重现示例;阅读here了解更多详情

标签: r var tvar


【解决方案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

这导致了向量而不是矩阵。为什么?来自 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 repository for the package you're using,您会发现虽然a generalized impulse response function hasn't been implemented in the tsDyn package,但其中一位作者已经为它编写了代码,您可以找到hereTVAR 结果执行此操作.

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2017-02-25
    • 2017-08-02
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多