组合同名列并在R中应用Johansen测试

时间:2016-05-14 07:56:30

标签: r

我有两个数据库(数据是治疗前后的多列):

治疗前 DATA1< -read.csv(" before.csv&#34)

    X1        X2    X3
1   0.21    0.32    0.42
2   0.34    0.23    0.33
3   0.42    0.14    0.11
4   0.35    0.25    0.35
5   0.25    0.41    0.44
治疗后 数据2< -read.csv(" after.csv&#34)

    X1       X2      X3
1   0.33    0.43    0.7
2   0.28    0.51    0.78
3   0.11    0.78    0.34
4   0.54    0.34    0.34
5   0.42    0.64    0.22

我想按列组合数据(即Data1中的x1和Data2中的x1类似:Data1中的x2和Data2中的x2,依此类推),并为每对执行Johansen Cointegration测试。

我尝试做的是:

library("urca")
x1<-cbind(Data1$x1, Data2$x1)
Jo1<-ca.jo(x1, type="trace",K=2,ecdet="none", spec="longrun")
summary(Jo1)

x2<-cbind(Data1$x1, Data2$x2)
Jo2<-ca.jo(x2, type="trace",K=2,ecdet="none", spec="longrun")
summary(Jo2)

这给了我想要的东西,但我希望自动化这个过程,即不是手动组合数据,而是拥有所有成对组合。

2 个答案:

答案 0 :(得分:1)

您可以遍历列名并找到Johansen Cointegration,如下所示:

# Create a sample data frame
Data1<- data.frame(X1 = rnorm(10, 0, 1), X2 = rnorm(10, 0, 1),  X3 = rnorm(10, 0, 1))
Data2 <-data.frame(X1 = rnorm(10, 0, 1), X2 = rnorm(10, 0, 1),  X3 = rnorm(10, 0, 1))

library("urca")
 # loop through all columns index
for(i in ncol(Data1)) {
  col <- paste0("X", as.character(i)) # find the column name
  data <- cbind(Data1[, col], Data2[, col]) # get the data from Data1 and Data2, all rows of a column = col
  # Your method for finding Ca.Jo ...
  Jo<- ca.jo(data, type="trace",K=2,ecdet="none", spec="longrun")
  summary(Jo)
}

您也可以使用colnames进行循环:

for(col in colnames(Data1)) {
  print(col)
  data <- cbind(Data1[, col], Data2[, col])
  print(data)
  #Jo<- ca.jo(data, type="trace",K=2,ecdet="none", spec="longrun")
  #summary(Jo)
}

希望这会对你有所帮助。

答案 1 :(得分:1)

基于克里希纳的回答,但修改了循环:

for(i in 1:ncol(Data1)) {
  col <- paste0("X", as.character(i)) 
  data <- cbind(Data1[, col], Data2[, col])
  colnames(data) <- c(paste0("Data1_",col),paste0("Data2_",col)) # add column names

  Jo<- ca.jo(data, type="trace",K=2,ecdet="none", spec="longrun")
  print(summary(Jo)) # print the summary to the console
}