1

I have my dataset, it looks something like this

enter image description here

I then use my r code

install.packages("vars")
library(vars)
install.packages("plm")
library(plm)
install.packages("panelvar")
library(panelvar)
data <- read.csv("economistdata.csv")
data$year <- as.integer(data$year)
pdata <- pdata.frame(data, index=c("country", "year"), drop.index = TRUE)
summary(pdata)
var_model <- pvargmm(cbind(interest.rates, inflation) ~ 1, data=pdata, lags=2)
granger_test <- causality(var_model, cause="inflation")
summary(granger_test)
granger_test1 <- causality(var_model, cause="interest.rates")
summary(granger_test1)`

I get the error Error in .subset(x, j) : invalid subscript type 'list'

I've tried to make it a vector and instead it tells me that year or country does not exist

I'm expecting it to simply run the regression

I was told to post my dataset so:

structure(list(year = c(2019, 2019, 2019, 2019, 2019, 2019, 2019, 
2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
2020, 2020, 2020, 2020, 2020, 2020, 2020, 2021, 2021, 2021, 2021, 
2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 
2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 
2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 
2021, 2021, 2021, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 
2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 
2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 
2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2023, 
2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 
2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 
2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 
2023, 2023, 2023, 2023, 2023, 2023), country = c("United States", 
"China", "Japan", "Britain", "Canada", "Euro area", "Austria", 
"Belgium", "France", "Germany", "Greece", "Italy", "Netherlands", 
"Spain", "Czech Republic", "Denmark", "Norway", "Poland", "Russia", 
"Sweden", "Switzerland", "Turkey", "Australia", "Hong Kong", 
"India", "Indonesia", "Malaysia", "Pakistan", "Philippines", 
"Singapore", "South Korea", "Taiwan", "Thailand", "Brazil", "Chile", 
"Colombia", "Mexico", "Peru", "Israel", "South Africa", "United States", 
"China", "Japan", "Britain", "Canada", "Euro area", "Austria", 
"Belgium", "France", "Germany", "Greece", "Italy", "Netherlands", 
"Spain", "Czech Republic", "Denmark", "Norway", "Poland", "Russia", 
"Sweden", "Switzerland", "Turkey", "Australia", "Hong Kong", 
"India", "Indonesia", "Malaysia", "Pakistan", "Philippines", 
"Singapore", "South Korea", "Taiwan", "Thailand", "Brazil", "Chile", 
"Colombia", "Mexico", "Peru", "Israel", "South Africa", "United States", 
"China", "Japan", "Britain", "Canada", "Euro area", "Austria", 
"Belgium", "France", "Germany", "Greece", "Italy", "Netherlands", 
"Spain", "Czech Republic", "Denmark", "Norway", "Poland", "Russia", 
"Sweden", "Switzerland", "Turkey", "Australia", "Hong Kong", 
"India", "Indonesia", "Malaysia", "Pakistan", "Philippines", 
"Singapore", "South Korea", "Taiwan", "Thailand", "Brazil", "Chile", 
"Colombia", "Mexico", "Peru", "Israel", "South Africa", "United States", 
"China", "Japan", "Britain", "Canada", "Euro area", "Austria", 
"Belgium", "France", "Germany", "Greece", "Italy", "Netherlands", 
"Spain", "Czech Republic", "Denmark", "Norway", "Poland", "Russia", 
"Sweden", "Switzerland", "Turkey", "Australia", "Hong Kong", 
"India", "Indonesia", "Malaysia", "Pakistan", "Philippines", 
"Singapore", "South Korea", "Taiwan", "Thailand", "Brazil", "Chile", 
"Colombia", "Mexico", "Peru", "Israel", "South Africa", "United States", 
"China", "Japan", "Britain", "Canada", "Euro area", "Austria", 
"Belgium", "France", "Germany", "Greece", "Italy", "Netherlands", 
"Spain", "Czech Republic", "Denmark", "Norway", "Poland", "Russia", 
"Sweden", "Switzerland", "Turkey", "Australia", "Hong Kong", 
"India", "Indonesia", "Malaysia", "Pakistan", "Philippines", 
"Singapore", "South Korea", "Taiwan", "Thailand", "Brazil", "Chile", 
"Colombia", "Mexico", "Peru", "Israel", "South Africa"), interest.rates = c(2.3, 
3, 0, 1.2, 1.9, 0.2, 0.5, 0.6, 0.5, 0.2, 3.7, 2.8, 0.2, 1.2, 
1.9, 0.3, 1.7, 2.9, 8.5, 0.3, -0.3, 14.9, 2.1, 1.8, 7.7, 7.8, 
3.9, 13.1, 6.4, 2.2, 2, 0.8, 2.2, 7.1, 4.1, 6.6, 8.2, 5.6, 2, 
8.7, 1, 2.5, 0, 0.5, 1, -0.6, -0.4, -0.3, -0.2, -0.6, 1.2, 1, 
-0.5, 0.3, 1.2, -0.6, 1.1, 1.7, 6.1, -0.3, -0.8, 11.3, 0.7, 0.9, 
6.2, 6.5, 2.8, 11, 4.2, 1.4, 1.3, 0.5, 0.8, 3.8, 3.4, 5.5, 6.3, 
3.9, 0.4, 8.9, 1.4, 3.1, 0, 0.8, 1.3, -0.3, -0.1, -0.1, -0.1, 
-0.3, 1, 0.7, -0.4, 0.3, 1.7, -0.2, 1.4, 1.5, 6.9, 0.4, -0.3, 
12.9, 1.7, 1.3, 6.2, 6.5, 3.1, 10.2, 4, 1.4, 2, 0.4, 1.6, 8.3, 
2.9, 5.5, 5.7, 4.3, 1.1, 9, 1.9, 2.6, 0, 1.5, 1.8, 0, 0.4, 0.4, 
0.6, 0, 2.4, 1.6, -0.2, 1.1, 3, 0.3, 1.4, 4.1, 12.5, 0.4, 0.1, 
23.1, 2.1, 1.7, 6.8, 6.6, 3.7, 11, 5.3, 1.8, 2.6, 0.7, 2, 11.3, 
5.7, 9.4, 8, 6.2, 1.9, 9.6, 4, 2.7, 0, 3.8, 3.4, 2.7, 3.4, 3.3, 
3, 2.7, 4.5, 4.6, 3, 3.6, 5, 3, 1.4, 6.6, 10.8, 2.7, 1.5, 10.3, 
3.8, 3.9, 7.4, 6.8, 3.9, 15.6, 6.4, 3.3, 3.8, 1.2, 2.7, 13.5, 
5.8, 13.1, 9.3, 8.1, 4, 10.1), inflation = c(2.2, 2.9, 1.1, 1.8, 
1.8, 1.4, 1.8, 2.2, 1.2, 1.4, 1.3, 0.9, 2.6, 1.2, 2.5, 1.1, 2.6, 
2, 4.9, 1.7, 0.5, 16.1, 1.7, 2.3, 3.6, 3.1, 0.6, 8.4, 3.6, 0.5, 
1, 0.3, 0.9, 4, 2.4, 3.4, 4.2, 2.2, 1, 5.1, 0.7, 3, -0.1, 1, 
0.5, 0.3, 0.7, 0.5, 0.4, 0.8, -0.4, -0.2, -0.9, -0.3, 2.4, 0.4, 
0.2, 3, 4.2, 0.5, -1, 11.2, 1.6, 1.4, 3.4, 1.3, 0, 7.4, 1.6, 
-0.2, 0.5, -0.8, 0.2, 2.5, 3.2, 1.9, 2.6, 1.7, -1, 3.6, 3.1, 
1.6, -0.2, 3, 2.2, 1.7, 2.2, 1.5, 1.4, 2.5, 0, 1, 2.2, 1.5, 2.6, 
0.7, 2.9, 4.1, 5.5, 1.8, 0.3, 14.5, 2.1, 1.6, 5.2, 2.5, 2.5, 
9, 2.4, 1.8, 1.9, 1.6, 2.1, 6.8, 3.6, 3, 4.5, 2.6, 1.5, 4, 7.8, 
2.1, 2.2, 7.2, 6.2, 7.1, 7, 9.2, 5.5, 7.7, 7, 6.5, 10.4, 7.2, 
11.9, 6.9, 4.8, 10.1, 21, 5.1, 2.5, 62.2, 5, 4.1, 7.3, 5.3, 3, 
16.1, 4.7, 6, 4.4, 3.8, 5.7, 10.4, 10.2, 9.8, 7.6, 7.1, 4.2, 
6, 4, 2.2, 1.9, 5.9, 3.6, 6, 6.6, 6.1, 5, 6.8, 3.9, 6.8, 7.1, 
4.3, 9.9, 5, 4.6, 12.6, 7.3, 5.6, 2.2, 40.8, 3.8, 2.3, 5.3, 3.9, 
2.3, 9.9, 5.7, 3.1, 2.8, 1.6, 2.2, 4.8, 7.5, 9.7, 5.9, 6.9, 3.4, 
5.1)), class = "data.frame", row.names = c(NA, -200L))
Helix123
  • 3,502
  • 2
  • 16
  • 36
minddrag
  • 11
  • 2
  • 1
    Can you share a sample of the data using `dput()` rather than as an image? It makes it easier for others to help if they can run your code – nrennie Apr 03 '23 at 21:24
  • 1
    There is a worked example in package `lmtest` so maybe see `help("grangertest.default", package="lmtest")`. – Dirk Eddelbuettel Apr 03 '23 at 21:32

1 Answers1

1

Package lmtest implements the Granger test with command grangertest.

As you have panel data you might be interested in a panel version of the Granger test. Package plm implements Dumistrecu/Hurlin (2012) panel Granger test with pgrangertest.

See below for examples of both. However, for the panel Granger test, your data is too short, thus I show another example from the help page ?pgrangertest.

library(lmtest)
grangertest(interest.rates ~ inflation, data = data)
#> Granger causality test
#> 
#> Model 1: interest.rates ~ Lags(interest.rates, 1:1) + Lags(inflation, 1:1)
#> Model 2: interest.rates ~ Lags(interest.rates, 1:1)
#>   Res.Df Df     F Pr(>F)
#> 1    196                
#> 2    197 -1 2.187 0.1408

## panel version: data is not sufficient, needs more time periods per individual
library(plm)
pdata <- pdata.frame(data, index=c("country", "year"), drop.index = TRUE)
pgrangertest(interest.rates ~ inflation, data = pdata)
#> Error in pgrangertest(interest.rates ~ inflation, data = pdata):
#> Condition for test = "Ztilde" not met for all individuals: 
#> length of time series must be larger than 5+3*order (>5+3*1=8)

# inspect how many oberservations we have for the 40 countries: 5 for each
pdim(pdata)
Balanced Panel: n = 40, T = 5, N = 200

# Example of with suffiently long panel data
data("Grunfeld", package = "plm")
pgrangertest(inv ~ value, data = Grunfeld)
#> 
#>  Panel Granger (Non-)Causality Test (Dumitrescu/Hurlin (2012))
#> 
#> data:  inv ~ value
#> Ztilde = 3.2896, p-value = 0.001003
#> alternative hypothesis: Granger causality for at least one individual
Helix123
  • 3,502
  • 2
  • 16
  • 36