在R中的ca.jo方法中,从Johannsen协整方法估计t统计量

3
我正在学习R语言中“vars”库中的范例。除了vignette的Table 5 here之外,我已经理解了大部分的范例。
通过运行下面的代码,我看到了协整向量和载荷点估计是如何得出的,但我不明白t统计量是从哪里得出的。
我运行了这段代码: library("vars") data("Canada") Canada <- Canada[, c("prod", "e", "U", "rw")] vecm <- ca.jo(Canada[, c("rw", "prod", "e", "U")], type = "trace", ecdet = "trend", K = 3, spec = "transitory") vecm.r1 <- cajorls(vecm, r = 1)
并得到了这些特征向量和权重。
    Eigenvectors, normalised to first column:
(These are the cointegration relations)

               rw.l1     prod.l1       e.l1       U.l1   trend.l1
rw.l1     1.00000000   1.0000000  1.0000000   1.000000  1.0000000
prod.l1   0.54487553  -3.0021508  0.7153696  -7.173608  0.4087221
e.l1     -0.01299605  -3.8867890 -2.0625220 -30.429074 -3.3884676
U.l1      1.72657188 -10.2183404 -5.3124427 -49.077209 -5.1326687
trend.l1 -0.70918872   0.6913363 -0.3643533  11.424630  0.1157125

Weights W:
(This is the loading matrix)

              rw.l1      prod.l1        e.l1          U.l1      trend.l1
rw.d   -0.084814510  0.048563997 -0.02368720 -0.0016583069  5.722004e-12
prod.d -0.011994081  0.009204887 -0.09921487  0.0020567547 -7.478364e-12
e.d    -0.015606039 -0.038019447 -0.01140202 -0.0005559337 -1.229460e-11
U.d    -0.008659911  0.020499657  0.02896325  0.0009140795  1.103862e-11

请告诉我如何在代码中找到表5中正确的alpha和beta值。

但我不知道表5中的t统计量是如何在代码中推导出来的。有没有人能指点我一下?

谢谢,

詹姆斯

1个回答

4
我的最大不满之一就是urca无法计算beta向量的t统计量。看起来作者可能曾经想过包括这个功能(因此您引用的vignette中有表5),但实际上并没有实现它。
好消息是,对于只有一个共整合向量(r=1)的情况,有可用的样本代码可以获得标准错误。请参见讨论线程 使用urca计算长期共整合关系时,如果只有一个共整合向量,可以使用上述nabble线程中提供的代码获取标准误差。继续使用您上面的示例,代码如下:
 alpha <- coef(vecm.r1$rlm)[1, ]  # the coefficients on ecm1
 beta <- vecm.r1$beta  # the point estimates of beta

 resids <- resid(vecm.r1$rlm) 
 N <- nrow(resids) 
 sigma <- crossprod(resids) / N 

 ## t-stats for beta 
 beta.se <- sqrt(diag(kronecker(solve(crossprod(vecm@RK[, -1])), 
                                solve(t(alpha) %*% solve(sigma) %*% alpha)))) 
 beta.t <- c(NA, beta[-1] / beta.se) 
 names(beta.t) <- rownames(vecm.r1$beta) 
 beta.t 

这完全复制了说明文档给出的标准误差。

与Gretl比较

如果我们使用gretl运行相同的模型,我们得到的beta点估计值完全相同,但标准误差大致相同:

Cointegrating Vector的Gretl标准误差

奖励:使用urca和texreg创建包含标准误差的协整向量LaTeX表格

您需要编写一个稍微笨拙的“提取”函数,将标准误差和点估计值组合成texreg喜欢的形式:

 extract.cajo_beta <- function(cajo, orls) {
   alpha <- coef(orls$rlm)[1, ];
   resids <- resid(orls$rlm);
   N <- nrow(resids);
   sigma <- crossprod(resids) / N;

   # get standard errors and p-values
   beta <- orls$beta
   beta.se <- sqrt(diag(kronecker(solve(crossprod(cajo@RK[, -1])), 
                                  solve(t(alpha) %*% solve(sigma) %*% alpha))));
   beta.se2 <- c(NA, beta.se);
   beta.t <- c(NA, beta[-1] / beta.se);
   beta.pval <- dt(beta.t, df= orls$rlm$df.residual)

   tr <- createTexreg(coef.names = as.character(rownames(beta)), coef = as.numeric(beta), se = beta.se2, 
         pvalues = beta.pval,
         # remove this goodness of fit measure afterwards from the table
         gof.names = c('Dummy'), gof = c(1), gof.decimal = c(FALSE)
   );
   return(tr);
 }

然后运行:

 > screenreg(extract.cajo_beta(vecm, vecm.r1))

 =================
           Model 1
 -----------------
 rw.l1      1.00  

 prod.l1    0.54  
           (0.61) 
 e.l1      -0.01  
           (0.68) 
 U.l1       1.73  
           (1.45) 
 trend.l1  -0.71 *
           (0.28) 
 -----------------
 Dummy      1     
 =================
 *** p < 0.001, ** p < 0.01, * p < 0.05

当你将Gretl的输出从标准误差转换为t-值时,结果与你引用的其他代码相差不到10%。我想当你说它们只“大致”一致时,这就是你的意思。我现在不知道Gretl如何精确计算标准误差,但对于样本量T = 81,我认为使用不同的误差方差估计已经可以轻松解释这种差异。(在你引用的代码中,分母使用N,这当然可以,但不是唯一的选择。) - Sven S.
@SvenS。好的 - 标准误差很接近,所以更改了答案的措辞 :) - flexponsive
@user3096626 谢谢您的代码。 在您的代码中,您给出了如何计算beta的p值,并考虑了df=orls$rlm$df.residual beta的自由度。 alpha的自由度是多少? 我们如何计算alpha的自由度? 我们如何计算alpha的p值? 如果您能包含您给出的Gretl代码的截图,那就更好了。非常感谢。 - Erdogan CEVHER

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接