# clear environment, console, unused memory
rm(list = ls())
gc()
## used (Mb) gc trigger (Mb) limit (Mb) max used (Mb)
## Ncells 533243 28.5 1188844 63.5 NA 669414 35.8
## Vcells 984722 7.6 8388608 64.0 16384 1851972 14.2
cat("\f")
# load necessary packages
library(readr)
library(tidyverse)
library(dplyr)
library(ggplot2)
library(psych)
library(visdat)
library(plm)
library(stargazer)
library(summarytools)
library(xtable)
wdi <- read_csv("/Users/matthewcolantonio/Documents/Research/fsu_growth/rawdata/WDIData.csv")
wdi1 <-wdi[wdi$`Indicator Code` %in%
c(
"SI.POV.GINI", # Gini Index
"GC.TAX.YPKG.ZS", #taxes on income, cg, profits
"NY.GDP.TOTL.RT.ZS", #total nat resources rent
"NY.GNP.PCAP.CD", #GNI per capita in current USD
"DT.TDS.DPPF.XP.ZS", # Debt service %GDP
"NV.AGR.TOTL.ZS", # agriculture value added
"SI.DST.04TH.20", # income share by 4th 20%
"SI.DST.FRST.20", # b20 income share
"SI.DST.10TH.10" # t10 income share
),]
wdi2 <- wdi1[442:2394, -c(5:14,68)]
wdi2_long <- gather(wdi2, key = "Year", value = "Value", starts_with(c("19", "2")))
wdi3 <- spread(wdi2_long, key = 'Indicator Name', value = 'Value')
gini <- wdi3[wdi3$`Indicator Code` == 'SI.POV.GINI',]
gini <- gini[,-c(2:3,5:6,8:13)]
tax_income_cg <- wdi3[wdi3$`Indicator Code` == 'GC.TAX.YPKG.ZS',]
tax_income_cg <- tax_income_cg[,-c(2:3,5:11,13)]
rent <- wdi3[wdi3$`Indicator Code` == 'NY.GDP.TOTL.RT.ZS',]
rent <- rent[,-c(2:3,5:12)]
gni <- wdi3[wdi3$`Indicator Code` == 'NY.GNP.PCAP.CD',]
gni <- gni[,-c(2:3,5:7,9:13)]
debt_service <- wdi3[wdi3$`Indicator Code` == 'DT.TDS.DPPF.XP.ZS',]
debt_service <- debt_service[,-c(2:3,5,7:13)]
agri_value <- wdi3[wdi3$`Indicator Code` == 'NV.AGR.TOTL.ZS',]
agri_value <- agri_value[,-c(2:3,6:13)]
fourth20 <- wdi3[wdi3$`Indicator Code` == 'SI.DST.04TH.20',]
fourth20 <- fourth20[,-c(2:3,5:8,10:13)]
b20_share <- wdi3[wdi3$`Indicator Code` == 'SI.DST.FRST.20',]
b20_share <- b20_share[,-c(2:3,5:10,12:13)]
t10_share <- wdi3[wdi3$`Indicator Code` == 'SI.DST.10TH.10',]
t10_share <- t10_share[,-c(2:3,5:9,11:13)]
merged <- merge(gini, tax_income_cg, by = c("Country Name", "Year"), all = TRUE)
merged <- merge(merged, rent, by = c("Country Name", "Year"), all = TRUE)
merged <- merge(merged, gni, by = c("Country Name", "Year"), all = TRUE)
merged <- merge(merged, debt_service, by = c("Country Name", "Year"), all = TRUE)
merged <- merge(merged, agri_value, by = c("Country Name", "Year"), all = TRUE)
# merged <- merge(merged, fourth20, by = c("Country Name", "Year"), all = TRUE)
merged <- merge(merged, b20_share, by = c("Country Name", "Year"), all = TRUE)
merged <- merge(merged, t10_share, by = c("Country Name", "Year"), all = TRUE)
rm(gini, gni, tax_income_cg, rent, debt_service, agri_value, fourth20, t10_share, b20_share)
Data comes from World Bank Development Indicators database, abbreviated WDI.
For this model, I am interested in smaller economies in Central and Eastern Europe and former Soviet member States. The following functions filter for these countries from the WDI dataset.
# filtering former Soviet Union FSU
fsu <- c(
"Armenia", "Azerbaijan", "Belarus", "Estonia", "Georgia",
"Kazakhstan", "Kyrgyz Republic", "Latvia", "Lithuania", "Moldova",
"Russia", "Tajikistan", "Turkmenistan", "Ukraine", "Uzbekistan"
)
fsu_data <- merged[merged$Country %in% fsu, ] # selected indicators in former soviet union
fsu_data <- fsu_data[fsu_data$Year > 2003,]
#vis_miss(fsu_data)
some_fsu <- c(
"Armenia", "Belarus", "Estonia", "Georgia",
"Kazakhstan", "Kyrgyz Republic", "Latvia", "Lithuania", "Moldova", "Ukraine"
)
selected <- fsu_data[fsu_data$`Country Name` %in% some_fsu, ] # 10 states with the most data
# to fix make column names uniform in new dataframe
names(selected) <- c("Country", "Year", "Gini", "Tax", "Rent", "GNI", "Debt", "Agriculture", "Income b20", "Income t10")
names(fsu_data) <- c("Country", "Year", "Gini", "Tax", "Rent", "GNI", "Debt", "Agriculture", "Income b20", "Income t10")
Here, we can look at the aggregating measures for selected variables across all countries chosen.
data_summary <- fsu_data %>%
summarytools::descr(
stats = c("mean", "sd", "min", "max"),
transpose = FALSE
)
# Print the summary
print(data_summary, method = "render")
## Non-numerical variable(s) ignored: Country, Year
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 10.58 | 5.24 | 31.46 | 5989.12 | 8.18 | 25.01 | 8.06 | 27.99 |
| Std.Dev | 7.38 | 3.77 | 4.32 | 5558.24 | 1.44 | 2.59 | 11.48 | 12.72 |
| Min | 2.02 | 0.21 | 24.00 | 260.00 | 5.60 | 20.60 | 0.01 | 1.65 |
| Max | 29.90 | 30.67 | 39.80 | 26460.00 | 10.80 | 31.70 | 56.97 | 57.83 |
Generated by summarytools 1.0.1 (R version 4.3.2)
2024-02-22
I am also interested in each country’s averages across the time period. This is just to get an idea of where countries stand in relation to each other- for the econometric model, I am more interested in the variations within countries across the period.
# Group by country and compute summary statistics
country_summary <- fsu_data %>%
group_by(Country) %>%
summarytools::descr(
stats = c("mean", "sd", "min", "max"),
transpose = FALSE
)
# Print the summary
print(country_summary, method = "render")
## Non-numerical variable(s) ignored: Year
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 15.12 | 6.48 | 31.03 | 3537.22 | 8.71 | 25.69 | 1.28 | 32.92 |
| Std.Dev | 2.91 | 4.69 | 3.02 | 1077.57 | 0.64 | 2.71 | 1.75 | 8.54 |
| Min | 11.34 | 1.79 | 25.10 | 1160.00 | 7.60 | 21.50 | 0.01 | 19.63 |
| Max | 18.43 | 19.50 | 37.50 | 4880.00 | 10.20 | 31.70 | 7.05 | 44.07 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 6.27 | 3.37 | 26.60 | 4541.11 | 10.75 | 24.30 | 27.85 | 38.46 |
| Std.Dev | 1.52 | 2.69 | 0.00 | 1927.93 | 0.07 | 0.14 | 9.03 | 6.07 |
| Min | 5.08 | 0.78 | 26.60 | 960.00 | 10.70 | 24.20 | 13.00 | 30.04 |
| Max | 10.99 | 7.87 | 26.60 | 7740.00 | 10.80 | 24.40 | 43.04 | 53.08 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 7.68 | 5.52 | 26.75 | 5603.33 | 9.41 | 21.92 | 1.55 | 8.44 |
| Std.Dev | 0.87 | 3.63 | 1.43 | 1495.68 | 0.51 | 0.74 | 0.25 | 2.92 |
| Min | 6.28 | 1.00 | 24.40 | 2170.00 | 8.60 | 20.70 | 1.14 | 3.47 |
| Max | 8.89 | 10.31 | 29.60 | 7620.00 | 10.30 | 23.60 | 1.98 | 13.40 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 2.90 | NA | 32.26 | 16997.78 | 7.58 | 24.63 | 1.69 | 35.60 |
| Std.Dev | 0.62 | NA | 1.47 | 4855.85 | 0.43 | 1.41 | 0.21 | 2.03 |
| Min | 2.02 | Inf | 30.30 | 7500.00 | 6.80 | 22.40 | 1.25 | 32.62 |
| Max | 3.93 | -Inf | 35.10 | 26460.00 | 8.10 | 26.90 | 2.10 | 39.81 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 8.84 | 8.05 | 37.31 | 3532.22 | 6.32 | 28.19 | 0.87 | 37.30 |
| Std.Dev | 2.74 | 2.93 | 1.55 | 1153.26 | 0.40 | 1.10 | 0.37 | 5.13 |
| Min | 6.24 | 4.38 | 34.20 | 1210.00 | 5.60 | 26.20 | 0.45 | 26.06 |
| Max | 16.40 | 13.63 | 39.60 | 4740.00 | 7.00 | 29.80 | 1.90 | 42.63 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 5.10 | 1.83 | 29.08 | 7734.44 | 9.22 | 23.79 | 21.51 | 44.53 |
| Std.Dev | 0.81 | 1.43 | 3.27 | 2846.51 | 1.03 | 1.84 | 6.88 | 5.67 |
| Min | 4.29 | 0.21 | 26.80 | 2300.00 | 5.90 | 22.50 | 9.33 | 35.54 |
| Max | 7.12 | 3.99 | 39.80 | 12080.00 | 10.00 | 29.70 | 33.25 | 57.83 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 18.18 | 4.94 | 30.03 | 945.00 | 9.06 | 24.79 | 5.56 | 19.90 |
| Std.Dev | 6.34 | 1.76 | 3.06 | 292.24 | 0.89 | 1.77 | 2.92 | 1.79 |
| Min | 11.67 | 2.48 | 26.80 | 400.00 | 7.30 | 22.90 | 1.07 | 18.48 |
| Max | 29.90 | 8.43 | 37.40 | 1250.00 | 10.00 | 29.40 | 11.51 | 23.60 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 3.61 | NA | 35.75 | 13755.56 | 6.56 | 27.16 | 1.16 | 18.41 |
| Std.Dev | 0.41 | NA | 1.23 | 3632.45 | 0.38 | 1.02 | 0.21 | 4.48 |
| Min | 2.95 | Inf | 34.20 | 5830.00 | 5.90 | 25.80 | 0.71 | 9.54 |
| Max | 4.34 | -Inf | 39.00 | 19790.00 | 7.10 | 30.00 | 1.59 | 28.56 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 3.44 | NA | 35.81 | 14046.67 | 6.48 | 27.39 | 0.44 | 37.40 |
| Std.Dev | 0.45 | NA | 1.55 | 4133.44 | 0.44 | 1.30 | 0.10 | 6.94 |
| Min | 2.54 | Inf | 32.50 | 6010.00 | 5.70 | 24.50 | 0.29 | 27.75 |
| Max | 4.33 | -Inf | 38.40 | 21740.00 | 7.10 | 29.50 | 0.66 | 46.52 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 11.47 | 4.04 | 30.15 | 2907.78 | 8.72 | 24.37 | 0.24 | 9.74 |
| Std.Dev | 2.46 | 1.43 | 3.98 | 1291.03 | 1.22 | 2.35 | 0.05 | 7.24 |
| Min | 8.50 | 2.59 | 25.70 | 910.00 | 7.00 | 21.70 | 0.13 | 1.65 |
| Max | 17.59 | 8.38 | 36.30 | 5370.00 | 10.20 | 28.40 | 0.33 | 20.16 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 21.11 | 5.27 | 32.65 | 920.56 | 7.75 | 25.55 | 2.70 | 4.47 |
| Std.Dev | 1.72 | 1.90 | 1.45 | 322.12 | 0.47 | 1.17 | 2.34 | NA |
| Min | 18.55 | 2.15 | 30.80 | 260.00 | 7.40 | 24.10 | 0.57 | 4.47 |
| Max | 23.96 | 8.63 | 34.00 | 1340.00 | 8.40 | 26.60 | 9.05 | 4.47 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 12.03 | NA | NA | 4585.62 | NA | NA | 29.73 | NA |
| Std.Dev | 3.85 | NA | NA | 2121.52 | NA | NA | 15.13 | NA |
| Min | 8.30 | Inf | Inf | 1270.00 | Inf | Inf | 9.66 | Inf |
| Max | 18.85 | -Inf | -Inf | 6970.00 | -Inf | -Inf | 56.97 | -Inf |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 8.97 | 8.42 | 26.12 | 2889.44 | 9.79 | 21.78 | 4.38 | 25.99 |
| Std.Dev | 1.74 | 6.50 | 1.70 | 786.05 | 0.53 | 0.96 | 2.09 | 4.13 |
| Min | 6.28 | 2.66 | 24.00 | 1270.00 | 8.80 | 20.60 | 1.09 | 19.16 |
| Max | 12.06 | 30.67 | 29.80 | 4120.00 | 10.50 | 24.10 | 7.94 | 36.36 |
| Agriculture | Debt | Gini | GNI | Income b20 | Income t10 | Rent | Tax | |
|---|---|---|---|---|---|---|---|---|
| Mean | 26.12 | 4.43 | NA | 1695.00 | NA | NA | 16.23 | 31.31 |
| Std.Dev | 3.15 | 2.53 | NA | 787.71 | NA | NA | 6.29 | 4.58 |
| Min | 18.63 | 2.31 | Inf | 460.00 | Inf | Inf | 6.72 | 24.24 |
| Max | 29.70 | 10.46 | -Inf | 2790.00 | -Inf | -Inf | 30.05 | 37.76 |
Generated by summarytools 1.0.1 (R version 4.3.2)
2024-02-22
selected2 <- selected %>%
mutate(log_GNI = log(GNI))
# Gather the data for easier plotting
selected_long <- selected2 %>%
gather(key = "variable", value = "value", -Country, -Year, -log_GNI)
# Univariate analysis for each variable on the log of GNI
ggplot(selected_long, aes(x = value, y = log_GNI)) +
geom_point() +
facet_wrap(~variable, scales = "free") +
labs(title = "Univariate Analysis for each Variable on log(GNI)",
x = "Variable Value",
y = "log(GNI)")
## Warning: Removed 188 rows containing missing values (`geom_point()`).
ggplot(selected, aes(x = Year)) +
geom_line(aes(y = `Income b20`, group = Country, color = Country), linetype = "solid") +
geom_line(aes(y = `Income t10`, group = Country, color = Country), linetype = "dashed") +
facet_wrap(~ Country, scales = "free_y", ncol = 2) +
labs(title = "Income Share: bottom 20% and top 10% Over Time",
x = "Year",
y = "Income Share") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Removed 19 rows containing missing values (`geom_line()`).
## Removed 19 rows containing missing values (`geom_line()`).
ggplot(selected, aes(x = Year)) +
geom_line(aes(y = `Tax`, group = Country, color = Country, linetype = "Tax"), size = 1) +
geom_line(aes(y = `Gini`, group = Country, color = Country, linetype = "Gini"), size = 1) +
scale_linetype_manual(name = "Lines", values = c("Tax" = "solid", "Gini" = "dashed")) +
facet_wrap(~ Country, scales = "free_y", ncol = 2) +
labs(title = "Gini Index and Profit Tax levels",
x = "Year",
y = "Gini Index and Tax, both %") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Removed 21 rows containing missing values (`geom_line()`).
## Warning: Removed 19 rows containing missing values (`geom_line()`).
ggplot(selected, aes(x = Year)) +
geom_line(aes(y = `Rent`, group = Country, color = Country, linetype = "Natural Resource Rent"), size = 1) +
geom_line(aes(y = `Agriculture`, group = Country, color = Country, linetype = "Agricultural Production"), size = 1) +
scale_linetype_manual(name = "Lines", values = c("Natural Resource Rent" = "solid", "Agricultural Production" = "dashed")) +
facet_wrap(~ Country, scales = "free_y", ncol = 2) +
labs(title = "Natural Resource Rent and Agriculture, % of GDP",
x = "Year",
y = "Natural Resource Rent and Agricultural Production") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Removed 10 rows containing missing values (`geom_line()`).
## Warning: Removed 18 rows containing missing values (`geom_line()`).
model_lm <- lm(log(GNI) ~ Gini + Tax + Rent + Agriculture,
data = selected)
# how do year/country fixed effects impact interpretation?
#model_lm for simple OLS
model_fy <- plm(log(GNI) ~ Gini + Tax + Rent + Agriculture,
data = selected,
index = c( "Year"),
model = "within")
model_fc <- plm(log(GNI) ~ Gini + Tax + Rent + Agriculture,
data = selected,
index = c("Country"),
model = "within")
The best model using all 10 countries selected:
model_01 <- plm(log(GNI) ~ Gini + Tax + Rent + Agriculture,
data = selected,
index = c("Country", "Year"),
model = "within",
effect = 'twoways')
stargazer(model_01, type = 'text')
##
## ========================================
## Dependent variable:
## ---------------------------
## log(GNI)
## ----------------------------------------
## Gini -0.018***
## (0.005)
##
## Tax 0.011***
## (0.002)
##
## Rent -0.013**
## (0.005)
##
## Agriculture -0.020***
## (0.007)
##
## ----------------------------------------
## Observations 147
## R2 0.401
## Adjusted R2 0.246
## F Statistic 19.414*** (df = 4; 116)
## ========================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Hausman’s test:
# Hausmans test
# create random effects model and compare
model.re <- plm(log(GNI) ~ Gini + Tax + Rent + Agriculture,
data = selected,
index = c("Country", "Year"),
model = "random")
# this tests whether you should use random or fixed effects
# it tests whether ui is correlated with the regressors
# the H0: not correlated
phtest(model_01, model.re)
##
## Hausman Test
##
## data: log(GNI) ~ Gini + Tax + Rent + Agriculture
## chisq = 106.92, df = 4, p-value < 2.2e-16
## alternative hypothesis: one model is inconsistent
# if p < .05 FE is needed. it is 2.2e-16 so we should add FE
# this infers that the unique errors NOT correlated with regressors
Breusch-Godfrey/Wooldridge test for serial correlation in panel models:
pbgtest(model_01)
##
## Breusch-Godfrey/Wooldridge test for serial correlation in panel models
##
## data: log(GNI) ~ Gini + Tax + Rent + Agriculture
## chisq = 86.217, df = 7, p-value = 7.385e-16
## alternative hypothesis: serial correlation in idiosyncratic errors
White’s test for heteroskedasticity:
lmtest::coeftest(model_01, vcovHC(model_01, method = "white1", type = "HC0"))
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## Gini -0.0176778 0.0045235 -3.9080 0.000157 ***
## Tax 0.0106141 0.0016239 6.5363 1.761e-09 ***
## Rent -0.0132752 0.0048813 -2.7196 0.007541 **
## Agriculture -0.0200854 0.0067276 -2.9855 0.003453 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
lmtest::coeftest(model.re, vcovHC(model.re, method = "white1", type = "HC0"))
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11.52048635 0.37483264 30.7350 < 2.2e-16 ***
## Gini -0.06249020 0.01179778 -5.2968 4.392e-07 ***
## Tax -0.00099184 0.00513915 -0.1930 0.8472378
## Rent -0.04095912 0.01186940 -3.4508 0.0007364 ***
## Agriculture -0.10678340 0.01375459 -7.7635 1.487e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# with homoskedasticity and the potential presence of autocorrelated standard errors
# the vcovHC function is a method to mitigate these threats to the validity.
After testing, it appears the model holds, and the choice for fixed effects is the proper one. Now, I want to further explore regional dynamics of the model by applying it to different country groupings.
baltic <- c(
"Estonia", "Latvia", "Lithuania"
)
Baltics <- fsu_data[fsu_data$`Country` %in% baltic, ]
non_baltics <- fsu_data[!fsu_data$Country %in% baltic, ]
cauc <- c(
"Armenia", "Georgia"
)
Caucuses <- fsu_data[fsu_data$`Country` %in% cauc, ]
commod <- c(
"Armenia", "Belarus", "Georgia",
"Kazakhstan", "Kyrgyz Republic", "Ukraine"
)
comm_dep <- fsu_data[fsu_data$`Country` %in% commod, ]
# removing Baltics
Does the model hold when removing the Baltic states? This is a reasonable question to ask due to the Baltic states integration with the EU. This free trade access will theoretically improve national income potential as these countries will be able to capitalize on their comparative advantages while also expanding consumer goods availability.
model_02 <- plm(log(GNI) ~ Gini + Tax + Rent + Agriculture,
data = non_baltics,
index = c("Country", "Year"),
model = "within",
effect = 'twoways')
stargazer(model_02, type = 'text')
##
## ========================================
## Dependent variable:
## ---------------------------
## log(GNI)
## ----------------------------------------
## Gini -0.026***
## (0.006)
##
## Tax 0.014***
## (0.002)
##
## Rent -0.019***
## (0.006)
##
## Agriculture -0.022***
## (0.007)
##
## ----------------------------------------
## Observations 97
## R2 0.548
## Adjusted R2 0.362
## F Statistic 20.643*** (df = 4; 68)
## ========================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Examining the results and comparing to the model that included the Baltic nations, we see that the effects and statistical significance is stronger without the EU member nations. This brings into frame the importance of international trade dynamics to income growth in small open economies in post-socialist Europe.
Do results change when including particularly commodity dependent nations?
model_03 <- plm(log(GNI) ~ Gini + Tax + Rent + Agriculture,
data = comm_dep,
index = c("Country", "Year"),
model = "within",
effect = 'twoways')
stargazer(model_03, type = 'text')
##
## ========================================
## Dependent variable:
## ---------------------------
## log(GNI)
## ----------------------------------------
## Gini -0.003
## (0.008)
##
## Tax 0.004
## (0.003)
##
## Rent -0.019***
## (0.005)
##
## Agriculture -0.043***
## (0.007)
##
## ----------------------------------------
## Observations 79
## R2 0.551
## Adjusted R2 0.326
## F Statistic 15.923*** (df = 4; 52)
## ========================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Interestingly, the particularly commodity dependent states appear to be unaffected by Gini and tax measures, with only agricultural production and resource rents showing statistical significance. The coefficients being negative shows that increases in rents and agriculture are not moving in the same direction as national income.
These tables will compare the various models.
First, the different effects on all countries.
notes <- c("OLS", "Year", "Country", "Year and Country")
# Create stargazer output with notes
stargazer(model_lm, model_fy, model_fc, model_01,
type = 'text',
add.lines = list(c("Model Effects:", paste(notes, collapse = ", "))))
##
## =================================================================================================================================
## Dependent variable:
## -------------------------------------------------------------------------------------------------------------
## log(GNI)
## OLS panel
## linear
## (1) (2) (3) (4)
## ---------------------------------------------------------------------------------------------------------------------------------
## Gini -0.016 0.002 -0.072*** -0.018***
## (0.011) (0.010) (0.011) (0.005)
##
## Tax 0.012*** 0.010*** -0.005 0.011***
## (0.004) (0.003) (0.005) (0.002)
##
## Rent -0.038*** -0.032*** -0.040*** -0.013**
## (0.010) (0.009) (0.012) (0.005)
##
## Agriculture -0.165*** -0.164*** -0.095*** -0.020***
## (0.010) (0.009) (0.014) (0.007)
##
## Constant 10.140***
## (0.353)
##
## ---------------------------------------------------------------------------------------------------------------------------------
## Model Effects: OLS, Year, Country, Year and Country
## Observations 147 147 147 147
## R2 0.701 0.762 0.489 0.401
## Adjusted R2 0.693 0.723 0.440 0.246
## Residual Std. Error 0.467 (df = 142)
## F Statistic 83.348*** (df = 4; 142) 100.311*** (df = 4; 125) 31.879*** (df = 4; 133) 19.414*** (df = 4; 116)
## =================================================================================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Then, the most effective fixed effects model on different country groupings.
notes2 <- c("All", "No Baltics", "Commodity Dependent")
# Create stargazer output with notes
stargazer(model_01, model_02, model_03,
type = 'text',
add.lines = list(c("Model Effects:", paste(notes2, collapse = ", "))))
##
## =================================================================================================
## Dependent variable:
## ----------------------------------------------------------------------------------
## log(GNI)
## (1) (2) (3)
## -------------------------------------------------------------------------------------------------
## Gini -0.018*** -0.026*** -0.003
## (0.005) (0.006) (0.008)
##
## Tax 0.011*** 0.014*** 0.004
## (0.002) (0.002) (0.003)
##
## Rent -0.013** -0.019*** -0.019***
## (0.005) (0.006) (0.005)
##
## Agriculture -0.020*** -0.022*** -0.043***
## (0.007) (0.007) (0.007)
##
## -------------------------------------------------------------------------------------------------
## Model Effects: All, No Baltics, Commodity Dependent
## Observations 147 97 79
## R2 0.401 0.548 0.551
## Adjusted R2 0.246 0.362 0.326
## F Statistic 19.414*** (df = 4; 116) 20.643*** (df = 4; 68) 15.923*** (df = 4; 52)
## =================================================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01