2016-06-23 30 views
3

我有2個不同參數的矩陣:M1和M3具有相同的尺寸。我喜歡做一個逐列grangertest在R.R明智格蘭傑的因果測試

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(> F)的矩陣[2] 「)和兩列將返回結果請?

+0

它給我的錯誤。 – akrun

+0

是的阿克倫。那是因爲ti本來是指兩個向量。我現在補充說。 –

+0

我剛剛使用「ChickEgg」數據添加了來自lmtest庫的原始代碼。我需要重寫它,以便我可以在差分矩陣的兩列之間進行分析,而不是從相同的基礎或數據框中進行分析。 –

回答

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 
+0

幹得好,亞歷克斯。這工作完美。我只是調整了結果。 –

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