R栏中的逐栏格兰杰因果关系检验

时间:2016-06-23 07:12:26

标签: r matrix lm causality

我有2个不同参数的矩阵:M1和M3具有相同的尺寸。我想在R中做一个明智的grangertest。

M1<- matrix( c(2,3, 1, 4, 3, 3, 1,1, 5, 7), nrow=5, ncol=2) 
M3<- matrix( c(1, 3, 1,5, 7,3, 1, 3, 3, 4), nrow=5, ncol=2)

我想做一个格兰杰因果关系检验,以确定M2格兰杰是否会导致M1。我的实际矩阵包含更多的列和行,但这只是一个例子。两个向量之间的原始代码如下:

library(lmtest)
data(ChickEgg)
grangertest(chicken ~ egg, order = 3, data = ChickEgg)

如何编写这个用于列式分析,以便返回具有2行(“F [2]”和“Pr(&gt; F)[2]”)和两列的矩阵作为结果?< / p>

2 个答案:

答案 0 :(得分:5)

这是否朝着正确的方向发展?

library(lmtest)

M1<- matrix( c(2,3, 1, 4, 3, 3, 1,1, 5, 7), nrow=5, ncol=2) 
M3<- matrix( c(1, 3, 1,5, 7,3, 1, 3, 3, 4), nrow=5, ncol=2)

g <- list()
for (i in 1:ncol(M1)){
g[[i]]  <- grangertest(M1[ ,i] ~ M3[ ,i])
}

foo <- function(x){ 
  F <- x$F[2] 
  P <- x$`Pr(>F)`[2]
  data.frame(F = F, P = P)
  }

do.call(rbind, lapply(g, foo))

          F         P
1 0.3125000 0.6754896
2 0.1781818 0.7457180

答案 1 :(得分:5)

我们可以使用sapply

sapply(1:ncol(M1), function(i) {
       m1 <- grangertest(M1[,i]~M3[,i])
       data.frame(F=m1$F[2], p=m1$`Pr(>F)`[2])})
#     [,1]      [,2]     
#F 0.3125    0.1781818
#p 0.6754896 0.745718