philipp.kn_98
philipp.kn_98

Reputation: 149

Multivariate Cointegration Test?

I am currently performing an analysis on FDI and income inequality in a panel of 10 countries over 30 years. In this setting, I want to test for panel cointegration, unit roots etc. My data is currently in the format:

ID year var1 var2
1   1    3    4
1   2    4    NA
1   3    1    6
2   1    4    2
2   2    1    3
2   3    2    2`

and so on. I have used

data.frame(split(df$var1, df$ID))

to create a dataframe with the IDs as columns to use the purtest function from the plm package (note that my panel data is unbalanced). However, I have a lot of variables and this whole procedure seems excessively tedious.

Is there a way to perform a cointegration test on multiple variables at once? There appears to be an index specification in purtest but I don't fully understand how to use it. What format would my data have to be in and how would I get there? Would it be an issue that there is quite a few NAs in some variables?

df <- data.frame(id = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2), 
                 year = c(1,2,3,4,5,6,7,1,2,3,4,5,6,7),
                 var1 = c(3,5,6,2,NA,6,4, 2,3,4,5,8,NA,7), 
                 var2 = c(5,6,3,8,NA,NA,2, NA,6,7,4,5,9,2))

Upvotes: 0

Views: 305

Answers (1)

Helix123
Helix123

Reputation: 3677

The index argument to plm's purtest works like in the other functions of the package: it is used to specify the individual and the time dimension of your data. However, there is no need to use it directly in the purtest (or other functions) if data is converted to a pdata.frame first.

There is no need to split the data by individual on your end. purtest supports various ways/formats to input data. A user-driven split is just one option. If you already have a data frame in long-format, I suggest to convert it to pdata.frame and input a pseries to purtest (thus, no need to split data yourself). Something along these lines:

library(plm)
df <- data.frame(id = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2), 
                 year = c(1,2,3,4,5,6,7,1,2,3,4,5,6,7),
                 var1 = c(3,5,6,2,NA,6,4,2,3,4,5,8,NA,7), 
                 var2 = c(5,6,3,8,NA,NA,2,NA,6,7,4,5,9,2))
pdf <- pdata.frame(df)
purtest(pdf$var1, test = "hadri", exo = "intercept")

To test multiple variables at once, you can put the purtest function into a loop, e.g., like this:

myvars <- as.list(pdf[ , -c(1:2)], keep.attributes = TRUE)
lapply(myvars, function(x) purtest(x, test = "ips", exo = "intercept", pmax = 1L))

Upvotes: 1

Related Questions