0

我使用 tseries 包中的 add.test 制作了一个简单的协整函数

cointegration <- function(vals)
{
    library(tseries)

    beta <- coef(lm(vals[,2] ~ vals[,1] + 0, data = vals))[1]
    names(beta) <- NULL
    res <- adf.test(vals[,2] - beta*vals[,1], alternative = "stationary", k = 0)
    return( list(beta = beta, p.value = res$p.value) )
}

显然, adf.test 的打印 p 值下限为 0.01。任何较小的 p 值都会产生警告消息:

Warning message:
In adf.test(vals[, 2] - beta * vals[, 1], alternative = "stationary",  :
  p-value smaller than printed p-value

是否可以让 adf.test 打印出更精确的 p 值?

我知道另一种方法是抑制警告消息:

res <- suppressWarnings(adf.test(vals[,2] - beta*vals[,1],
                        alternative = "stationary", k = 0))

但是打印更精确的 p 值会很好。

谢谢

4

1 回答 1

2

从帮助文件?adf.test

p 值是从表 4.2,p 中插值的。Banerjee 等人的 103。(1993 年)。如果计算的统计数据超出临界值表,则会生成警告消息。

所以简短的回答是否定的,你不能得到“更精确”的 p 值。至少不是直接的。无论如何,通常报告除p<0.01.

如果您真的想获得“准确”的 p 值,您可能应该查看下面的参考资料。我无权访问它,但他们可能会解释他们是如何提出“临界值表”的,因此可以扩展它。

A. Banerjee、JJ Dolado、JW Galbraith 和 DF Hendry(1993 年):协整、纠错和非平稳数据的计量经济学分析,牛津大学出版社,牛津。

于 2014-02-26T08:43:52.140 回答