代码之家  ›  专栏  ›  技术社区  ›  Heike

多元时间序列-IRF的一个变量后分裂

  •  0
  • Heike  · 技术社区  · 7 年前

    我有一个阈值变量。因为非线性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个变量的现有时间序列分为两部分(一部分是实际GDP增长率大于0的所有变量值的VAR,另一部分是小于0的VAR),并计算相应的IRF。

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

    不起作用。

    1 回复  |  直到 7 年前
        1
  •  0
  •   duckmayr    7 年前

    对于你的问题,我有两个部分的答案:(1)我将向你展示如何子集 complete 正确的,(2)我会给你们指出一个关于非线性变量脉冲响应函数的资源。

    您尝试子集的方式有几个问题 完成 :(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
    

    这导致了向量而不是矩阵。为什么?从哈德利·威克姆那里 Advanced R

    此外,它从 完成 不要与第一列的积极因素一致。为什么?让我们看看用于子集的逻辑向量:

    ts1 > 0
    [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE
    

    有10个元素,而 完成 只有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 ,其中一位作者为其编写了代码,您可以找到 here 这是为了 TVAR 后果