/getspanel

An implementation of the `gets` package for Panel Models to use indicator saturation

Primary LanguageROtherNOASSERTION

getspanel

R build status CRAN status

The package is a panel adaptation of the gets package see here.

This code is being developed by Felix Pretis and Moritz Schwarz. The associated working paper is published under “Panel Break Detection: Detecting Unknown Treatment, Stability, Heterogeneity, and Outliers” by Pretis and Schwarz, which is available at SSRN here and was applied to a study by Nico Koch and colleagues on EU Road CO2 emissions, which was published in Nature Energy in 2022.

Installation

You can install the released version of getspanel from CRAN with:

install.packages("getspanel")

And the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("moritzpschwarz/getspanel")

Example

library(getspanel)

data("EU_emissions_road")
# let's subset a few countries to make this faster
subset <- c("Austria", "Belgium", "Germany", "Denmark", "Spain", 
                 "France",  "Greece", "Ireland", "Italy", "Netherlands", "Sweden", "United Kingdom")

EU_emissions_road <- EU_emissions_road[EU_emissions_road$country %in% subset, ]

is1 <- isatpanel(data = EU_emissions_road,
                 formula = transport.emissions ~ lgdp + lpop, 
                 index = c("country","year"),
                 effect = "twoways",
                 fesis = TRUE,
                 
                 print.searchinfo = FALSE # to save space we suppress the status information in the estimation
)
Loading required namespace: gets
is1

Date: Sat Jan 28 18:02:02 2023 
Dependent var.: y 
Method: Ordinary Least Squares (OLS)
Variance-Covariance: Ordinary 
No. of observations (mean eq.): 576 
Sample: 1 to 576 

SPECIFIC mean equation:

                             coef std.error   t-stat   p-value    
lgdp                     16166.01   3698.62   4.3708 1.509e-05 ***
lpop                    -20201.86  10799.14  -1.8707 0.0619766 .  
idBelgium                 4000.22   2640.51   1.5149 0.1304241    
idDenmark               -10845.73   4359.12  -2.4881 0.0131716 *  
idFrance                 66188.67  17508.65   3.7803 0.0001757 ***
idGermany                96272.86  20912.34   4.6036 5.282e-06 ***
idGreece                  2817.26   3132.58   0.8993 0.3689070    
idIreland                -2658.34   6880.04  -0.3864 0.6993776    
idItaly                  58752.06  17821.58   3.2967 0.0010485 ** 
idNetherlands             8562.85   5385.59   1.5900 0.1124814    
idSpain                  33677.26  14651.99   2.2985 0.0219497 *  
idSweden                   530.17   1505.34   0.3522 0.7248433    
idUnitedKingdom          74109.40  17971.66   4.1237 4.371e-05 ***
time1971                -93833.18 128577.79  -0.7298 0.4658707    
time1972                -92624.47 128613.12  -0.7202 0.4717540    
time1973                -91506.49 128640.52  -0.7113 0.4772111    
time1974                -92809.71 128679.42  -0.7212 0.4710971    
time1975                -91394.63 128722.81  -0.7100 0.4780309    
time1976                -91124.39 128743.15  -0.7078 0.4794020    
time1977                -89888.88 128771.65  -0.6980 0.4854738    
time1978                -89589.36 128829.40  -0.6954 0.4871236    
time1979                -88915.27 128852.38  -0.6901 0.4904822    
time1980                -88877.13 128882.84  -0.6896 0.4907706    
time1981                -89182.08 128916.46  -0.6918 0.4893980    
time1982                -88663.53 128934.20  -0.6877 0.4919852    
time1983                -88159.12 128943.82  -0.6837 0.4944828    
time1984                -87325.32 128948.20  -0.6772 0.4985869    
time1985                -87069.20 128951.95  -0.6752 0.4998592    
time1986                -87107.37 128982.22  -0.6753 0.4997720    
time1987                -84505.33 129007.82  -0.6550 0.5127454    
time1988                -81052.83 128991.08  -0.6284 0.5300574    
time1989                -78570.84 129025.01  -0.6090 0.5428309    
time1990                -75690.17 129052.59  -0.5865 0.5578021    
time1991                -74748.84 129094.31  -0.5790 0.5628352    
time1992                -73233.68 129137.90  -0.5671 0.5709050    
time1993                -72308.53 129181.74  -0.5597 0.5759077    
time1994                -73875.92 129191.56  -0.5718 0.5676946    
time1995                -73018.31 129151.13  -0.5654 0.5720771    
time1996                -72144.60 129169.49  -0.5585 0.5767369    
time1997                -72079.39 129182.02  -0.5580 0.5771182    
time1998                -71319.91 129195.70  -0.5520 0.5811764    
time1999                -70971.83 129234.39  -0.5492 0.5831350    
time2000                -71458.66 129252.29  -0.5529 0.5806071    
time2001                -71093.29 129287.58  -0.5499 0.5826458    
time2002                -70620.12 129332.12  -0.5460 0.5852860    
time2003                -70244.19 129386.95  -0.5429 0.5874424    
time2004                -69754.87 129430.26  -0.5389 0.5901715    
time2005                -70463.80 129480.18  -0.5442 0.5865447    
time2006                -70448.29 129526.82  -0.5439 0.5867618    
time2007                -70673.44 129581.24  -0.5454 0.5857245    
time2008                -72625.71 129645.08  -0.5602 0.5756036    
time2009                -73646.87 129713.53  -0.5678 0.5704511    
time2010                -74469.83 129746.95  -0.5740 0.5662536    
time2011                -75277.18 129769.49  -0.5801 0.5621215    
time2012                -77342.82 129804.50  -0.5958 0.5515534    
time2013                -76958.54 129839.27  -0.5927 0.5536376    
time2014                -76505.27 129870.02  -0.5891 0.5560684    
time2015                -76179.65 129898.07  -0.5865 0.5578351    
time2016                -75655.80 129937.92  -0.5822 0.5606657    
time2017                -75528.82 129969.34  -0.5811 0.5614182    
time2018                -76549.16 129999.52  -0.5888 0.5562354    
fesisAustria.1987       -14752.52   1654.35  -8.9174 < 2.2e-16 ***
fesisBelgium.1989       -12941.87   1596.28  -8.1075 4.072e-15 ***
fesisGermany.1978        18284.76   2048.76   8.9248 < 2.2e-16 ***
fesisGermany.1987        19086.84   2032.35   9.3915 < 2.2e-16 ***
fesisGermany.1998         7350.67   2158.87   3.4049 0.0007156 ***
fesisGermany.2003       -16943.32   2116.72  -8.0045 8.574e-15 ***
fesisDenmark.1988       -18253.66   1644.62 -11.0990 < 2.2e-16 ***
fesisSpain.1994          16853.70   1782.70   9.4541 < 2.2e-16 ***
fesisSpain.2003          13298.86   1734.13   7.6689 9.236e-14 ***
fesisFrance.1976         13435.71   2113.43   6.3573 4.661e-10 ***
fesisFrance.1988         15148.31   1763.04   8.5921 < 2.2e-16 ***
fesisUnitedKingdom.1986  14711.60   1686.10   8.7252 < 2.2e-16 ***
fesisGreece.1988        -10814.35   1814.16  -5.9611 4.761e-09 ***
fesisIreland.1987       -17863.87   1999.58  -8.9338 < 2.2e-16 ***
fesisIreland.1995        -8728.46   2241.13  -3.8947 0.0001118 ***
fesisItaly.1986          18109.81   1836.05   9.8635 < 2.2e-16 ***
fesisItaly.1999           5542.89   1534.77   3.6116 0.0003354 ***
fesisNetherlands.1986   -10588.43   1689.90  -6.2657 8.062e-10 ***
fesisSweden.1990        -16740.92   1560.10 -10.7307 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diagnostics and fit:

                  Chi-sq df   p-value    
Ljung-Box AR(1)   273.47  1 < 2.2e-16 ***
Ljung-Box ARCH(1) 203.28  1 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
                            
SE of regression  3787.68635
R-squared            0.99428
Log-lik.(n=576)  -5523.26673
plot(is1)

Let’s explore the other plots that we can use:

plot_grid(is1)

We can plot the counterfactuals as well:

plot_counterfactual(is1, plus_t = 5)

We can plot the residuals against an OLS model:

plot_residuals(is1)

An example using coefficient step indicator saturation and impulse indicator saturation:

is2 <- isatpanel(data = EU_emissions_road,
                 formula = transport.emissions ~ lgdp + lpop, 
                 index = c("country","year"),
                 effect = "twoways",
                 csis = TRUE, 
                 iis = TRUE,  
                 print.searchinfo = FALSE # to save space we suppress the status information in the estimation
)
is2     

Date: Sat Jan 28 18:04:11 2023 
Dependent var.: y 
Method: Ordinary Least Squares (OLS)
Variance-Covariance: Ordinary 
No. of observations (mean eq.): 576 
Sample: 1 to 576 

SPECIFIC mean equation:

                     coef std.error  t-stat   p-value    
lgdp             -1309.59   5200.07 -0.2518 0.8012641    
lpop            -19713.06  18182.85 -1.0842 0.2788025    
idBelgium         9344.72   4456.79  2.0967 0.0365039 *  
idDenmark       -14714.45   7266.18 -2.0251 0.0433767 *  
idFrance        130800.79  30255.98  4.3231 1.847e-05 ***
idGermany       170095.59  34685.82  4.9039 1.262e-06 ***
idGreece           920.57   6102.51  0.1509 0.8801518    
idIreland       -24556.72  10798.40 -2.2741 0.0233701 *  
idItaly         113904.80  29959.95  3.8019 0.0001608 ***
idNetherlands    23780.80   9735.94  2.4426 0.0149178 *  
idSpain          77098.98  25550.27  3.0175 0.0026744 ** 
idSweden          4113.59   2449.85  1.6791 0.0937360 .  
idUnitedKingdom 125238.32  30372.14  4.1235 4.350e-05 ***
time1971        337573.55 212025.05  1.5921 0.1119668    
time1972        339667.96 212047.13  1.6019 0.1098017    
time1973        341774.30 212049.80  1.6118 0.1076259    
time1974        340827.37 212103.40  1.6069 0.1086908    
time1975        342319.90 212178.45  1.6134 0.1072792    
time1976        344453.70 212185.76  1.6234 0.1051245    
time1977        346175.55 212214.20  1.6313 0.1034478    
time1978        348560.87 212233.20  1.6423 0.1011282    
time1979        349821.30 212246.78  1.6482 0.0999252 .  
time1980        350130.80 212289.04  1.6493 0.0996936 .  
time1981        349850.02 212348.93  1.6475 0.1000603    
time1982        350556.90 212372.10  1.6507 0.0994150 .  
time1983        351326.17 212376.83  1.6543 0.0986843 .  
time1984        352617.08 212362.73  1.6604 0.0974332 .  
time1985        353327.57 212347.60  1.6639 0.0967385 .  
time1986        355549.70 212341.16  1.6744 0.0946539 .  
time1987        357446.66 212336.68  1.6834 0.0929045 .  
time1988        360407.35 212310.28  1.6976 0.0901968 .  
time1989        362433.36 212303.25  1.7071 0.0883970 .  
time1990        364443.78 212327.77  1.7164 0.0866864 .  
time1991        365699.26 212388.28  1.7218 0.0856984 .  
time1992        367440.24 212456.52  1.7295 0.0843216 .  
time1993        368344.48 212537.31  1.7331 0.0836798 .  
time1994        368733.81 212546.04  1.7348 0.0833671 .  
time1995        369413.53 212548.84  1.7380 0.0828055 .  
time1996        370723.06 212560.90  1.7441 0.0817419 .  
time1997        371431.92 212552.15  1.7475 0.0811491 .  
time1998        373440.00 212544.32  1.7570 0.0795123 .  
time1999        374926.57 212536.25  1.7641 0.0783148 .  
time2000        375183.25 212531.99  1.7653 0.0781055 .  
time2001        375960.72 212575.83  1.7686 0.0775533 .  
time2002        376750.81 212641.21  1.7718 0.0770244 .  
time2003        377108.67 212712.58  1.7729 0.0768437 .  
time2004        378138.04 212764.59  1.7773 0.0761156 .  
time2005        377829.39 212835.61  1.7752 0.0764526 .  
time2006        378465.72 212889.63  1.7778 0.0760340 .  
time2007        378767.26 212962.49  1.7786 0.0759012 .  
time2008        376797.02 213079.76  1.7683 0.0775964 .  
time2009        375029.37 213241.76  1.7587 0.0792215 .  
time2010        374489.45 213288.57  1.7558 0.0797191 .  
time2011        373808.44 213323.35  1.7523 0.0803158 .  
time2012        371578.43 213395.33  1.7413 0.0822338 .  
time2013        371965.53 213458.55  1.7426 0.0820064 .  
time2014        372764.83 213497.36  1.7460 0.0814085 .  
time2015        373719.63 213517.09  1.7503 0.0806615 .  
time2016        374587.80 213572.53  1.7539 0.0800401 .  
time2017        375180.68 213606.53  1.7564 0.0796127 .  
time2018        374569.33 213641.06  1.7533 0.0801515 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diagnostics and fit:

                  Chi-sq df   p-value    
Ljung-Box AR(1)   503.70  1 < 2.2e-16 ***
Ljung-Box ARCH(1) 429.87  1 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
                            
SE of regression 10193.99274
R-squared            0.95699
Log-lik.(n=576)  -6103.03163
plot(is2)

plot_grid(is2)
Warning in plot_grid(is2): No indicators identified in the isatpanel object. No
plot produced.

and an example of Coefficient Fixed-Effect Step indicator saturation:

is3 <- isatpanel(data = EU_emissions_road,
                 formula = transport.emissions ~ lgdp + lpop, 
                 index = c("country","year"),
                 effect = "twoways",
                 cfesis = TRUE, 
                 print.searchinfo = FALSE # to save space we suppress the status information in the estimation
)
is3    
plot(is3)

We can also use e.g. the fixest package to estimate our models:

is4 <- isatpanel(data = EU_emissions_road,
                 formula = transport.emissions ~ lgdp + lpop, 
                 index = c("country","year"),
                 effect = "twoways",
                 engine = "fixest",
                 fesis = TRUE, 
                 print.searchinfo = FALSE # to save space we suppress the status information in the estimation
)
plot(is4)