On cherche aujourd’hui à reproduire la méthode présentée dans l’article de Mankiw, Romer, and Weil (1990). Les auteurs cherchent à estimer le modèle de Solow (1988). Les deux hypothèses que l’ont cherche à tester sont:
Nous allons ici nous limiter à l’estimation du modèle de Solow standard et laisser de côté le modèle augmenté du capital humain, je vous invite à lire l’article pour avoir plus d’informations à ce sujet.
L’équation que nous souhaitons estimer est la suivante:
\[ \ln\left[\frac{Y}{L}\right] = c + \frac{\alpha}{1-\alpha}\ln(s) - \frac{\alpha}{1-\alpha}\ln(n+e+\delta) + \epsilon\] Avec:
La méthode se déroule en trois parties:
Je commence par déclarer quelques variables utiles pour la suite.
> startDate <- 1970
> middleDate <- 1985
> endDate <- 2014
>
> # Je mets ici la liste des pays de l'OCDE, j'en aurai besoin plus tard
> OECD_list <- c("BRA", "CHN", "COL", "CRI", "HUN", "IDN", "IND", "ISL", "LUX", "ZAF", "ARG", "AUS", "AUT", "BEL", "CAN", "CHE", "CHL", "DEU", "DNK", "ESP", "FIN", "FRA", "GBR", "GRC", "IRL", "ISR", "ITA", "JPN", "KOR", "MEX", "NLD", "NOR", "NZL", "POL", "PRT", "SWE", "TUR")
Je télécharge ensuite les données.
url <- getURL('http://mayerowitz.io/download/pwt90.csv')
data <- read.csv(text = url, sep=";")
On isole les variables qui nous intéressent:
df <- as.data.frame(data) %>%
select(countrycode, country, year, rgdpo, cgdpo, ccon, csh_i, pop, delta, hc)
On crée les variables dont on a besoin
df <- df %>%
mutate(s_proxy = (csh_i*cgdpo)/cgdpo, # Taux d'épargne
rgdpoPop= rgdpo/pop, # PIB/hab
cconPop = ccon/pop, # Conso/hab
OECD = ifelse(countrycode %in% OECD_list,1,0)) # Variable indicatrice pour les pays de l'OCDE
On supprime également les données qui précèdent 1970 et les pays pour lesquelles il y a une absence d’observations.
df <- df %>%
group_by(countrycode) %>%
filter(!is.na(rgdpo),
!is.na(delta),
year >= startDate) %>%
filter(min(year) == startDate)
On construit 2 bases de données pour les 2 horizons temporels différents : 1970-2014, 1970-1985. On veut donc pour chaque pays avoir la moyenne des variables sur l’horizon temporel choisi.
df_7014 <- df %>%
group_by(country, countrycode) %>%
mutate(firstPop = first(pop),
lastPop = last(pop),
firstGdp = first(rgdpo),
lastGdp = last(rgdpo),
n = (lastPop/firstPop)^(1/(endDate-startDate)) -1, #Taux de croissance annuel de la pop
g = (lastGdp/firstGdp)^(1/(endDate-startDate)) -1) %>% #Taux de croissance annuel du PIB
# On ne garde que la moyenne sur la période (puisque notre estimation est faire sur des données en coupe):
summarise_all(mean) %>%
mutate(lrgdpoPop = log(rgdpoPop), # log(Y/L)
ls = log(s_proxy), # log(s)
lngd = log(n+0.015+delta), # log(n+e+delta)
contr = ls-lngd, # log(s)-log(n+g+delta) pour le modèle contraint
oecd15K = ifelse(OECD==1,ifelse(rgdpoPop >= 15000,1,0),0),
lGdpPopFirst = log(firstGdp/firstPop),
lGdpPopLast = log(lastGdp/lastPop))
df_7085 <- df %>%
group_by(country, countrycode) %>%
filter(year <= middleDate) %>%
mutate(firstPop = first(pop),
lastPop = last(pop),
firstGdp = first(rgdpo),
lastGdp = last(rgdpo),
n = (lastPop/firstPop)^(1/(middleDate-startDate)) -1,
g = (lastGdp/firstGdp)^(1/(middleDate-startDate)) -1) %>%
summarise_all(mean) %>%
mutate(lrgdpoPop = log(rgdpoPop),
ls = log(s_proxy),
lngd = log(n+0.02+delta),
contr = ls-lngd,
oecd15K = ifelse(OECD==1,ifelse(rgdpoPop >= 15000,1,0),0))
df_7014 %>% select(country, rgdpoPop, cconPop, n, g, s_proxy)
On commence par observer notre base de données pour comprendre la relation entre nos variables avant de passer à l’estimation.