Le but de ce document est de faciliter l’accès des étudiants et des chercheurs aux données sur la croissance économique et à leur analyse/modélisation.
Le document traverse les principales sources de données utilisées dans la littérature : Penn World Tables, les données World Development Index de la Banque mondiale, les données de Mankiw, Romer et la base de données de long terme initiée par Angus Maddison.
Le document contient normalement toute l’information nécessaire pour être directement utilisé. Je fournis notamment des liens vers des fichiers CSV qui sont utilisés pour simplifier leur accès.
Murat Yildizoglu, Phnom Penh, Mars 2023
Citer comme : Yildizoglu, M., 2023, Illustration de l’accès et de l’utilisation des principales bases de données sur la croissance économique avec R-Project, https://rpubs.com/myildi/1012230
# Fixer le répertoire de travail. Les fichiers seront lus à partir de ce répertoire et les graphiques seront sauvegardés dans ce répertoire. Dans R-project, si vous créer un projet, ce sera le réperrtoire de ce projet.
setwd("/Users/myildi/Dropbox/Documents/rdir/croissance")
# Chergement des principales librairies de données et d'outils qui seront utilisées
library(pwt) # Penn World Tables (ici nous avons utiliser la version 7, mais la version courante est la 10e)
library(WDI) # La BDD de World Development Index (Banque Mondiale)
library(maddison) # La BDD développées à partir des travaux d'Angus Maddison
library(ggplot2) # Librairie graphique
library(Zelig) # Utilitaires divers
# Une petite fonction pour mettre plusieurs graphiques sur la même page de PDF
vplayout <- function(x,y) viewport(layout.pos.row = x, layout.pos.col = y)
Penn World Tables contiennent la base de données la plus complète et actualisée sur la croissance économique.
Elle est actuellement développée par Groningen Growth and Development Centre. La version actuelle à cette date est 10.1 mais nous allons utiliser dans cet exemple la version 7.
Référence : Feenstra, Robert C., Robert Inklaar and Marcel P. Timmer (2015), “The Next Generation of the Penn World Table” American Economic Review, 105(10), 3150-3182, available for download at www.ggdc.net/pwt
#Ouvrir les données provenant de PWT 7 et les affecter à la base de données total
data(pwt7.0)
total<-pwt7.0
row.names(total)<-NULL
# Noms des pays de l'OCDE en conformité avec les noms utilisés dans PWT 7'
ocde=c("Australia","Austria","Belgium","Canada","Chile","Czech Republic","Denmark","Estonia","Finland","France","Germany","Greece","Hungary","Iceland","Ireland","Israel","Italy","Japan","Korea, Republic of","Luxembourg","Mexico","Netherlands","New Zealand","Norway","Poland","Portugal","Slovak Republic","Slovenia","Spain","Sweden","Switzerland","Turkey","United Kingdom","United States of America")
Créer les groupes de pays qui seront utilisés pour les graphiques
groupe1=c("FRA", "USA", "FIN", "JPN", "NLD","GER")
groupe2=c("FRA", "USA", "FIN", "JPN", "NLD", "ARG", "GRC", "ITA", "SWE","ESP")
# Noms des pays de l'OCDE en conformité avec les noms utilisés dans PWT 7'
ocde=c("Australia","Austria","Belgium","Canada","Chile","Czech Republic","Denmark","Estonia","Finland","France","Germany","Greece","Hungary","Iceland","Ireland","Israel","Italy","Japan","Korea, Republic of","Luxembourg","Mexico","Netherlands","New Zealand","Norway","Poland","Portugal","Slovak Republic","Slovenia","Spain","Sweden","Switzerland","Turkey","United Kingdom","United States of America");
# Tous les pays
groupe3=levels(as.factor(total$country))
try(
{
detach(total);
rm(ccountry);
rm(iso);
rm(n);
rm(y);
rm(savings);
rm(gamma_y);
rm(ouverture);
rm(tmp);
rm(year1);
rm(year2);
}, silent = TRUE)
ccountry <- numeric()
iso<- numeric()
n <- numeric()
y <- numeric()
savings <- numeric()
gamma_y <- numeric()
ouverture <- numeric()
tmp <- numeric()
year1 <- 1980
year2 <- 2009
total$saveRate<-100 - total$cc
try(detach(total), silent = TRUE)
attach(total)
## Liste basée sur le nom du pays OCDE
countryList <- ocde
# Constructing the full dataset for the graphics (for the list of countries)
# total contains PWT 7 without row names
for (i in 1 : length(countryList)){
n[i] <- (subset(pop,year==year2 & country==countryList[i]) / subset(pop,year==year1 & country==countryList[i]) )^(1/(year2-year1)) -1;
y[i] <- subset(rgdpl,year==year2 & country==countryList[i]);
savings[i] <- mean(subset(saveRate, year>=year1 & year <= year2 & country==countryList[i]) );
gamma_y[i] <- subset(grgdpch,year==year1 & country==countryList[i]);
ouverture[i] <-mean(subset(openk,year>=year1 & year <= year2 & country==countryList[i]) );
}
#extracting the raw data per country in countryList (see above)
mydata<-subset(total,subset=( year==year2 & is.element(country,countryList) ),select=c(country,isocode,rgdpl))
row.names(mydata)<-NULL
#Adding the computed variables
mydata2<- cbind(mydata,gamma_y,n,savings,ouverture)
pp1<- qplot(savings,rgdpl, geom=c("smooth"),span=1,label=isocode,data=mydata2,main="PIB et taux d'épargne (OCDE)",xlab=paste("Taux d'épargne moyen (",year1,"-",year2,") (%)",sep=""),ylab=paste("PIB/tête (",year2,", rgdpl)"))
pp1 + geom_text(cex=4,alpha=0.5)
# Exporter le graphique en PDF
ggsave("pib-s-ocde.pdf",height=4,width=6)
On observe bien une relation assez nettement croissante pour les pays de l’OCDE.
pp<-qplot(n,rgdpl, geom=c("smooth"),span=1,label=isocode,data=mydata2,main="PIB et croissance démographique (OCDE)",xlab=paste("Taux de croissance démo. (",year1,"-",year2,")",sep=""),ylab=paste("PIB/tête (",year2,", rgdpl)"))
pp + geom_text(cex=4,alpha=0.5)
# Exporter le graphique en PDF
ggsave("pib-n-ocde.pdf",height=4,width=6)
La relation semble plus non-linéaire pour la croissance démographique : certains pays semblent encore en profiter tandis que chez d’autres une croissance démographique forte semble associée à un revenu plus faible.
Mise en forme des données correspondantes.
try(
{
detach(total);
}, silent = TRUE)
total$saveRate<-100 - total$cc
try(try(detach(total), silent = TRUE), silent = TRUE)
attach(total)
## Liste de tous les pays de PWT 7
countryList <- groupe3
for (i in 1 : length(countryList)){
n[i] <- (subset(pop,year==year2 & country==countryList[i]) / subset(pop,year==year1 & country==countryList[i]) )^(1/(year2-year1)) -1;
y[i] <- subset(rgdpl,year==year2 & country==countryList[i]);
savings[i] <- mean(subset(saveRate, year>=year1 & year <= year2 & country==countryList[i]) );
gamma_y[i] <- subset(grgdpch,year==year1 & country==countryList[i]);
ouverture[i] <-mean(subset(openk,year>=year1 & year <= year2 & country==countryList[i]) );
}
alpha<-1/3
delta<-0.03
ySCE<-(savings/(n+delta))^(alpha/(1-alpha))
devSCE<-(y-ySCE)/ySCE
# devSCE
# Constructing the full dataset for the graphics (for the list of countries)
# total contains PWT 7 without row names
#extracting the raw data per country in countryList (see above)
mydata<-subset(total,subset=( year==year2 & is.element(country,countryList) ),select=c(country,isocode,rgdpl))
row.names(mydata)<-NULL
#Adding the computed variables
mydata2<- cbind(mydata,gamma_y,n,savings,ouverture,y,ySCE,devSCE)
pp1<- qplot(savings,rgdpl, geom=c("smooth"),span=1,label=isocode,data=mydata2,main="PIB et taux d'épargne (Tout PWT 7)",xlab=paste("Taux d'épargne moyen (",year1,"-",year2,") (%)",sep=""),ylab=paste("PIB/tête (",year2,", rgdpl)"))
pp1 + geom_text(cex=4,alpha=0.5)
# Exporter le graphique en PDF
ggsave("pib-s-all.pdf",height=4,width=6)
pp<-qplot(n,rgdpl, geom=c("smooth"),span=1,label=isocode,data=mydata2,main="PIB et croissance démographique (Tout PWT 7)",xlab=paste("Taux de croissance démo. (",year1,"-",year2,")",sep=""),ylab=paste("PIB/tête (",year2,", rgdpl)"))
pp + geom_text(cex=4,alpha=0.5)
# Exporter le graphique en PDF
ggsave("pib-n-all.pdf",height=4,width=6)
Note : La partie croissante de la courbe précédente correspond aux pays arabes qui bénéficient du pétrole (le coin nord-est correspond au Qatar).
Pour ces dimensions, on n’observe aucune relation globale fiable entre le niveau de PIB et ces facteurs. On observe néanmoins des régularités pour certains sous-ensembles de pays : une relation décroissante pour certains mais aussi une relation croissante pour d’autres.
groupeind<-c("Australia","Austria","Belgium","Canada","Denmark","Finland","France","Germany","Italy","Japan","Netherlands","New Zealand","Norway","Spain","Sweden","Switzerland","United Kingdom","United States of America");
try(detach(total), silent = TRUE)
rm(gamma_y)
rm(year1)
rm(year2)
gamma_y <- numeric()
year1 <- 1980
year2 <- 2000
try(detach(total), silent = TRUE)
attach(total)
# Liste de tous les pays de PWT 7
countryList <- groupeind
#Taux de croissance du PIB/tete entre year 1 et year2 (revient au meme que de prendre la moyenne des grgdpch)
for (i in 1 : length(countryList)){
gamma_y[i] <- (subset(rgdpl,year==year2 & country==countryList[i]) / subset(rgdpl,year==year1 & country==countryList[i]) )^(1/(year2-year1)) -1;
}
#extracting the raw data per country in countryList (see above) for year 2
mydata<-subset(total,subset=( year==year1 & is.element(country,countryList) ),select=c(country,isocode,rgdpl))
#Adding the growth rate of year2
mydata2<- cbind(mydata,gamma_y)
#deleting the row names
row.names(mydata2)<-NULL
pp<-qplot(rgdpl,gamma_y, geom=c("smooth"),span=1,label=isocode,data=mydata2,main="PIB initial et taux de croissance sur la période (Pays Industrialisés)",ylab=paste("Taux de croissance (",year1,"-",year2,")",sep=""),xlab=paste("PIB/tête (",year1,") (rgdpl)"))
pp + geom_text(cex=4,alpha=0.5)
# Exporter le graphique en PDF
ggsave("convergence-pays-ind.pdf",height=4,width=6)
Pour les pays sélectionnés car ils font partie, en fin de parcours, du “club des pays industrialisés” (un échantillon à la Baumol), on observe une relation décroissante mais, même pour eux, elle est loin d’être monotone. Il semble que ces pays soient encore assez différents en termes de SCE.
try(detach(total), silent = TRUE)
rm(gamma_y)
rm(year1)
rm(year2)
gamma_y <- numeric()
year1 <- 1980
year2 <- 2000
try(detach(total), silent = TRUE)
attach(total)
## Liste de tous les pays de PWT 7
countryList <- ocde
#Taux de croissance du PIB/tete entre year 1 et year2 (revient au meme que de prendre la moyenne des grgdpch)
for (i in 1 : length(countryList)){
gamma_y[i] <- (subset(rgdpl,year==year2 & country==countryList[i]) / subset(rgdpl,year==year1 & country==countryList[i]) )^(1/(year2-year1)) -1;
}
#extracting the raw data per country in countryList (see above) for year 2
mydata<-subset(total,subset=( year==year1 & is.element(country,countryList) ),select=c(country,isocode,rgdpl))
#Adding the growth rate of year2
mydata2<- cbind(mydata,gamma_y)
#deleting the row names
row.names(mydata2)<-NULL
pp<-qplot(rgdpl,gamma_y, geom=c("smooth"),span=1,label=isocode,data=mydata2,main="PIB initial et taux de croissance sur la période (Pays OCDE)",ylab=paste("Taux de croissance (",year1,"-",year2,")",sep=""),xlab=paste("PIB/tête (",year1,") (rgdpl)"))
pp + geom_text(cex=4,alpha=0.5)
ggsave("convergence-ocde.pdf",height=4,width=6)
On observe effectivement une relation négative entre le niveau de revenu initial et le taux de croissance pendant la période pour certains pays dans ce groupe de pays structurellement relativement proche, mais ce club étant déjà plus hétérogène, la relation négative est moins marquée.
Qu’en est-il pour un ensemble plus large de pays?
try(detach(total), silent = TRUE)
rm(gamma_y)
rm(year1)
rm(year2)
gamma_y <- numeric()
year1 <- 1980
year2 <- 2000
try(detach(total), silent = TRUE)
attach(total)
## Liste de tous les pays de PWT 7
countryList <- groupe3
# Taux de croissance du PIB/tete entre year 1 et year2 (revient au meme que de prendre la moyenne des grgdpch)
for (i in 1 : length(countryList)){
gamma_y[i] <- (subset(rgdpl,year==year2 & country==countryList[i]) / subset(rgdpl,year==year1 & country==countryList[i]) )^(1/(year2-year1)) -1;
}
length(gamma_y)
[1] 190
year1 <- 1980
year2 <- 2000
countryList <- groupe3
#extracting the raw data per country in countryList (see above) for year 2
mydata<-subset(total,subset=( year==year1 & is.element(country,countryList) ),select=c(country,isocode,rgdpl))
#Adding the growth rate of year2
mydata2<- cbind(mydata,gamma_y)
#deleting the row names
row.names(mydata2)<-NULL
pp<-qplot(rgdpl,gamma_y, geom=c("smooth"),span=1,label=isocode,data=mydata2,main="PIB initial et taux de croissance sur la période (Tout PWT 7)",ylab=paste("Taux de croissance (",year1,"-",year2,")",sep=""),xlab=paste("PIB/tête (",year1,") (rgdpl)"),xlim=c(0,35000))
pp + geom_text(cex=4,alpha=0.5)
ggsave("convergence-all.pdf",height=4,width=6)
Aucune relation négative émerge au niveau global, un ensemble important de pays à très faibles revenus n’ayant pu bénéficier de taux de croissance positive forts malgré un revenu initial faible. On n’observe dons pas de ratrappage des pays riches par ces pays pauvres.
On garde donc le même ensemble de pays que dans la section précédente mais on va changer la période de référence pour avoir une période assez longue et donc nous devons reconstruire l’ensemble des données.
try(detach(total), silent = TRUE)
#Create a local dataset
data0<-NULL
ccountry <- numeric()
iso<- numeric()
n <- numeric()
y <- numeric()
coeff <- numeric()
techA <- numeric()
ySCE<-numeric()
devSCE<-numeric()
devSCE2<-numeric()
savings <- numeric()
gamma_y <- numeric()
ouverture <- numeric()
year1 <- 1960
year2 <- 2000
total$saveRate<-(100 - total$cc)/100
try(detach(total), silent = TRUE)
attach(total)
## Liste de tous les pays de PWT 7
countryList <- groupe3
alpha<-1/3
delta<-0.03
for (i in 1 : length(countryList)){
ccountry[[i]] <-countryList[[i]]
iso[[i]]<-as.character(subset(isocode,year==year1 & country==countryList[[i]]))
n[[i]] <- (subset(pop,year==(year1 + 1) & country==countryList[[i]]) - subset(pop,year==(year1) & country==countryList[[i]])) / subset(pop,year==(year1) & country==countryList[[i]]);
y[[i]] <- subset(rgdpl,year==year1 & country==countryList[[i]]);
savings[[i]] <- subset(saveRate, year==year1 & country==countryList[[i]]);
gamma_y[[i]] <- mean(subset(grgdpch,year >= year1 & year <= year2 & country == countryList[[i]]) );
coeff[[i]]<-(savings[[i]]/(n[[i]]+delta))
techA[[i]]<-y[[i]]/coeff[[i]]^(1/(alpha-1))
ySCE[[i]]<-techA[[i]]*(savings[[i]]/(n[[i]]+delta))^(alpha/(1-alpha))*1000
devSCE[[i]]<-as.numeric((y[[i]]-ySCE[[i]])/ySCE[[i]])
devSCE2[[i]]<-as.numeric(log(y[[i]])-log(ySCE[[i]]))
}
data0<-NULL
data0<-data.frame(ccountry,iso,savings,n,y,ySCE,devSCE,devSCE2,gamma_y)
data0<-subset(data0,subset=(iso !="JOR" & iso !="NGA"))
# summary(data0$gamma_y)
data0<-na.omit(data0)
row.names(data0)<-NULL
devSCEUSA<-as.numeric(subset(data0,iso=="USA",devSCE2))
data0$devSCE3<-(data0$devSCE2 - devSCEUSA)
Nous avons calculé la déviation relative (par rapport aux E.U.) de son SCE pour chaque pays et nous pouvons regarder la corrélation entre les taux de croissance des pays et leur déviation.
cor.test(data0$devSCE3,data0$gamma_y)
Pearson's product-moment correlation
data: data0$devSCE3 and data0$gamma_y
t = -2.9958, df = 71, p-value = 0.003767
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.5246306 -0.1136929
sample estimates:
cor
-0.3349976
Cette valeur négative et statistiquement significative confirme la présence d’une convergence conditionnelle pour ces pays. Ce que nous pouvons observer graphiquement :
pp<-qplot(devSCE3,gamma_y, geom=c("smooth"),label=iso,span=1,data=data0,main=paste("Convergence conditionnelle (",year1,"-",year2,", tout PWT7)"),ylab=paste("Taux de croissance moyen (",year1,"-",year2,")",sep=""),xlab=paste("devSCE (%) (en logs, USA=0",year1,")"))
pp + geom_text(cex=4,alpha=0.5)
ggsave("convergence-cond-pays-all.pdf",height=4,width=6)
On observe néanmoins certains pays ont été capables de bénéficier de taux de croissance élevés même s’ils n’étaitent pas très loin de leur SCE en début de période. Il s’agit notamment de Taiwan et de la Malaisie qui font partie des Tigres asiatiques qui ont été capables de déplacer vers le haut leur SCE sur une grande partie de cette période via des réformes structurelles.
# Distribution PIB/tête
year1 <- 1960
year2 <- 1980
year3 <- 2000
year4 <- 2008
pp<-qplot(rgdpl, geom=c("density"),data=subset(total,subset=(year %in% c(year1,year2,year3,year4)),select=c(rgdpl,pop,year)),main="Distribution y (PWT7)",xlim=c(0,50000),color=as.factor(year),fill=as.factor(year),group=year,alpha=I(0.1),size=I(1.2))
pp+scale_colour_brewer(palette="PuOr")+scale_fill_brewer(palette="PuOr")
ggsave("density-pib-all.pdf",height=4,width=6)
On voit une amélioration du sort des pays les plus “pauvres” dans la mesure où la proportion des pays correspondant à des niveaux de PIB/tête très faible diminue dans l’ensemble des pays et donc celle des pays avec des revenus plus importants augmente. Mais on ne peut vraiment parler de rattrapage pour autant car la distance entre les pays les plus pauvres et les plus riches ne diminue pas vraiment, ces derniers augmentant encore plus leur richesse (la borne supérieure à droite avance plus vite que le mode correspondant aux pays les plus pauvres.
Qu’en est-il si on tient compte du poids de chaque pays en termes de population, pour avoir une idée de la distribution de la population mondiale entre ces différents niveaux de PIB/tête?
pp<-qplot(rgdpl, geom=c("density"),weight=pop,data=subset(total,subset=(year %in% c(year1,year2,year3,year4)),select=c(rgdpl,pop,year)),main="Distribution y (PWT7) pondérée par la population",xlim=c(0,50000),color=as.factor(year),fill=as.factor(year),group=year,alpha=I(0.1),size=I(1.2))
pp+scale_colour_brewer(palette="PuOr")+scale_fill_brewer(palette="PuOr")
ggsave("density-pib-pop-all.pdf",height=4,width=6)
On voit qu’initialement la part de la poluation vivant dans des pays avec les niveaux de PIB/tête les plus faibles étaient très élevée. Mais aussi, l’amélioration du sort de ces populations apparaît plus clairement sur cette représentation.
year1 <- 1960
year2 <- 1980
year3 <- 2000
year4 <- 2008
# Distribution gamma_y
pp<-qplot(grgdpch, geom=c("density"),data=subset(total,subset=(year %in% c(year1,year2,year3,year4)),select=c(grgdpch,pop,year)),main="Distribution gamma_y (PWT7)",xlim=c(-20,20),color=as.factor(year),fill=as.factor(year),group=year,alpha=I(0.1),size=I(1.2))
pp+scale_colour_brewer(palette="PuOr")+scale_fill_brewer(palette="PuOr")
ggsave("density-grtpib-all.pdf",height=4,width=6)
On observe un mouvement de va et de vient : d’abord une augmentation du mode vers des taux de croissance positive jusqu’à 1980 et ensuite un mouvement de recul à nouveau. Mais en parallèle on voit une diminution de la part des taux de croissance négatifs à partir 1980.
# Distribution gamma_y pondérére par la population
pp<-qplot(grgdpch, geom=c("density"),data=subset(total,subset=(year %in% c(year1,year2,year3,year4)),select=c(grgdpch,pop,year)),weight=pop,main="Distribution gamma_y (PWT7)",ylab="Densité ponderée par la population du pays",xlim=c(-20,20),color=as.factor(year),fill=as.factor(year),group=year,alpha=I(0.1),size=I(1.2))
pp+scale_colour_brewer(palette="PuOr")+scale_fill_brewer(palette="PuOr")
ggsave("density-grtpib-pop-all.pdf",height=4,width=6)
En termes de la dynamique de la distribution des populations, l’interprétation purement graphique est difficile, sans faire de tests supplémentaires de dominance stochastique.
Trois exemples : l’India, le Japon, l’Argentine
datagrtrt<-subset(total,subset=(country %in% c("India","Japan","Argentina")),select=c(country,year,grgdpch))
datagrtrt<-subset(total,country %in% c("India","Japan","Argentina"),select=c(country,year,grgdpch))
datagrtrt$country<-as.factor(as.character(datagrtrt$country))
pp<-qplot(year,grgdpch, geom=c("line","smooth"),span=1,data=datagrtrt,main="Evolution de gamma_y (PWT7)",size=I(0.6),xlab="Années")
pp+facet_grid(. ~ country)
ggsave("gammay-evol-exemples.pdf",height=4,width=8)
####################################################################
# Tous les pays
####################################################################
attach(total)
groupe1=c("FRA", "USA", "FIN", "JPN", "NLD")
groupe2=c("FRA", "USA", "FIN", "JPN", "NLD", "ARG", "GRC", "ITA", "SWE","ESP")
groupe3=levels(isocode);
rm(country)
rm(n)
rm(y)
rm(savings)
rm(gamma_y)
rm(ouverture)
rm(tmp)
rm(year1)
rm(year2)
country <- numeric()
n <- numeric()
y <- numeric()
saveRate <- numeric()
savings <- numeric()
gamma_y <- numeric()
ouverture <- numeric()
tmp <- numeric()
year1 <- 1975
year2 <- 1985
for (i in 1 : length(groupe3)){
country[i] <- groupe3[i];
n[i] <- (1/(year2-year1))*(log(pop[year==year2 & isocode==groupe3[i]])-log(pop[year==year1 & isocode==groupe3[i]]));
y[i] <- rgdpch[year==year2 & isocode==groupe3[i]];
saveRate[i] <- 100 - cc
savings[i] <- mean(saveRate[year>=year1 & year <= year2 & isocode==groupe3[i]]);
gamma_y[i] <- grgdpch[year==year2 & isocode==groupe3[i]];
ouverture[i] <-mean(openk[year>=year1 & year <= year2 & isocode==groupe3[i]]);
}
library(lattice)
# fig-dist-pib-tete
par(mfrow=c(1,4))
hist(cgdp[year==1974],xlab="y",main="Distribution y, 1974",breaks=20)
hist(cgdp[year==1984],xlab="y",main="Distribution y, 1984",breaks=20)
hist(cgdp[year==1994],xlab="y",main="Distribution y, 1994",breaks=20)
hist(cgdp[year==2004],xlab="y",main="Distribution y, 2004",breaks=20)
Comparaison Etats-Unis et France
#fig-sce-usa-fr
par(mfrow=c(1,2))
plot(log10(rgdpch[isocode=="USA"])~year[isocode=="USA"],xlab="Annees", ylab="log(PIB/tete)", main="Etats-Unis",type='l')
abline(lm(log10(rgdpch[isocode=="USA"])~year[isocode=="USA"]))
plot(log10(rgdpch[isocode=="FRA"])~year[isocode=="FRA"],xlab="Annees",ylab="log(PIB/tete)", main="France",,type='l')
abline(lm(log10(rgdpch[isocode=="FRA"])~year[isocode=="FRA"]))
Il s’agit de la base de données de l’article :
Mankiw N.G., Davisd Romer, David N. Weil, A Contribution to the Empirics of Economic Growth, QJE, 1992
Nous utiliserons la base de données que nous avions obtenue par le passé. Vous pouvez la télécharger en suivant le lien et l’utiliser après l’avoir déposé dans le répertoire de travail.
Voir aussi : Replicating Mankiw, Romer and Weil 1992
mrw <- read.table("mrw.csv",header=TRUE,sep=",",na.strings="NA",dec=".",strip.white=TRUE)
try(detach(total), silent = TRUE)
attach(mrw)
# names(mrw)
plot(log(gdp85)~school,type='n',xlab="Average school years",ylab="log(y) (1985)",main="Education et croissance")
text(school,log(gdp85),toupper(substr(obs,1,3)),col="black")
zz <- lm(log(gdp85)~school)
abline(zz,col="red")
summary(zz)
Call:
lm(formula = log(gdp85) ~ school)
Residuals:
Min 1Q Median 3Q Max
-1.70182 -0.43501 -0.05209 0.42907 2.95551
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.87072 0.12562 54.69 <2e-16 ***
school 0.23670 0.02005 11.80 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.7229 on 106 degrees of freedom
(13 observations deleted due to missingness)
Multiple R-squared: 0.568, Adjusted R-squared: 0.5639
F-statistic: 139.3 on 1 and 106 DF, p-value: < 2.2e-16
plot(log(gdp85)~inv,type='n',xlab="Taux d'investissement (%)",ylab="log(y) (1985)",main="Investissement et croissance")
text(inv,log(gdp85),toupper(substr(obs,1,3)),col="black")
zz <- lm(log(gdp85)~inv)
abline(zz,col="red")
summary(zz)
Call:
lm(formula = log(gdp85) ~ inv)
Residuals:
Min 1Q Median 3Q Max
-2.37141 -0.49748 -0.04234 0.57931 2.82323
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.40969 0.19361 33.106 < 2e-16 ***
inv 0.09671 0.01012 9.559 5.51e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.806 on 106 degrees of freedom
(13 observations deleted due to missingness)
Multiple R-squared: 0.463, Adjusted R-squared: 0.4579
F-statistic: 91.38 on 1 and 106 DF, p-value: 5.508e-16
plot(log(gdp85)~popgrow,type='n',xlab="Taux de croissance démographique (%)",ylab="log(y) (1985)",main="Démographie et croissance")
text(popgrow,log(gdp85),toupper(substr(obs,1,3)),col="black")
zz <- lm(log(gdp85)~popgrow)
abline(zz,col="red")
summary(zz)
Call:
lm(formula = log(gdp85) ~ popgrow)
Residuals:
Min 1Q Median 3Q Max
-2.0428 -1.0217 0.1464 0.8533 3.0220
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.5734 0.2590 33.096 <2e-16 ***
popgrow -0.2123 0.1042 -2.038 0.0441 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.071 on 105 degrees of freedom
(14 observations deleted due to missingness)
Multiple R-squared: 0.03805, Adjusted R-squared: 0.02889
F-statistic: 4.153 on 1 and 105 DF, p-value: 0.04407
Source et mode d’emploi : https://vincentarelbundock.github.io/WDI/
“The WDI package allows users to search and download data from over 40 datasets hosted by the World Bank, including the World Development Indicators (‘WDI’), International Debt Statistics, Doing Business, Human Capital Index, and Sub-national Poverty indicators.” (Vincent Arenbundock)
Charger la librairie qui permet d’accéder et à selectionner ces données en ligne : library(WDI)
help(‘WDI’) : pour obtenir de l’aide sur cette base
Pour la liste et les codes des indicateurs de WDI, lire le fichier wdi-indicators.csv (il peut être nécessaire de l’actualiser).
Pour chercher un indicateur :
WDIsearch(string=“gdp”, field=“name”,short=TRUE,cache = NULL)
Donne toutes les variables qui contiennent le mot-clé gdp
-> “NY.GDP.PCAP.KD” : “GDP per capita (constant 2000 US$)”
Nécessite une connection internet et peut prendre un certain temps…
WDIsearch(string=“consumption”, field=“name”,short=TRUE,cache = NULL) -> “NE.CON.PRVT.PC.KD” “Household final consumption expenditure per capita (constant 2000 US$)”
Exemple : Estimation de la relation entre le PIB et le commerce international
# Pour récupérer des données du WDI :
# # World Development Indicators (WDI) of World Bank
library(WDI)
# On crée un nouveau cache pour la liste actualisée des noms des indicateurs disponibles sur internet
# new_cache = WDIcache()
WDIsearch('gdp')[1:10,] # Les dix premières lignes du résultat
indicator name
712 5.51.01.10.gdp Per capita GDP growth
714 6.0.GDP_current GDP (current $)
715 6.0.GDP_growth GDP growth (annual %)
716 6.0.GDP_usd GDP (constant 2005 $)
717 6.0.GDPpc_constant GDP per capita, PPP (constant 2011 international $)
1557 BG.GSR.NFSV.GD.ZS Trade in services (% of GDP)
1558 BG.KAC.FNEI.GD.PP.ZS Gross private capital flows (% of GDP, PPP)
1559 BG.KAC.FNEI.GD.ZS Gross private capital flows (% of GDP)
1560 BG.KLT.DINV.GD.PP.ZS Gross foreign direct investment (% of GDP, PPP)
1561 BG.KLT.DINV.GD.ZS Gross foreign direct investment (% of GDP)
# Lister la gamme des années disponibles dans la base (à partir du cache actualisé)
# summary(year,cache=new_cache)
# Liste des indicateurs qu'on veut obtenir
ind <- c('NY.GDP.PCAP.CD', 'NE.TRD.GNFS.ZS', 'IS.ROD.DNST.K2')
# On veut obtenir ces indicateurs pour tous les pays et pour l'année 2002 uniquement
dat <- WDI(country='all', start=2002, end=2002, indicator=ind)
# On renomme les colonnes pour les données obtenues
names(dat) <- c('country', 'iso2c', 'year', 'gdp.per.cap', 'trade.to.gdp', 'roads')
# On utilise ces nouveaux noms pour estimer un petit modèle
mod <- lm(gdp.per.cap ~ trade.to.gdp + roads, dat)
summary(mod)
Call:
lm(formula = gdp.per.cap ~ trade.to.gdp + roads, data = dat)
Residuals:
Min 1Q Median 3Q Max
-7.156e-11 2.500e-13 4.040e-13 4.710e-13 5.480e-13
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.002e+03 6.432e-13 3.112e+15 <2e-16 ***
trade.to.gdp 1.742e-17 3.225e-17 5.400e-01 0.590
roads 1.799e-15 7.215e-15 2.490e-01 0.803
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 4.84e-12 on 220 degrees of freedom
(103 observations deleted due to missingness)
Multiple R-squared: 0.5004, Adjusted R-squared: 0.4959
F-statistic: 110.2 on 2 and 220 DF, p-value: < 2.2e-16
Exemple : Evolution des taux d’intérêt réels entre EU et la Grande Bretagne
dat <- WDI(country=c("US","GB"), start=1960, end=2009, indicator="FR.INR.RINR")
row.names(dat)<-NULL
names(dat) <- c('country', 'iso2c', 'iso3c','year', 'realIntRate')
# Enlever les années sans observations
dat2 = subset(dat,year >1967)
pp <- qplot(data=dat2,year, realIntRate,group=country,color=iso2c)
pp + geom_line()+geom_smooth()
Exemple : Fonction de consommation de la France
dat3 <- WDI(country=c("FR"), start=1970, end=2012, indicator=c("NY.GDP.PCAP.KD","NE.CON.PRVT.PC.KD"))
row.names(dat3)<-NULL
names(dat3) <- c('country', 'iso2c', 'iso3c', 'year', 'percapitaGDP', 'percapitaConsumption')
qplot(percapitaGDP,percapitaConsumption,geom=c("line","smooth"),data=dat3)
Et l’estimation de la relation de consommation
model<-lm(percapitaConsumption~percapitaGDP,data=dat3)
summary(model)
Call:
lm(formula = percapitaConsumption ~ percapitaGDP, data = dat3)
Residuals:
Min 1Q Median 3Q Max
-401.32 -130.86 -16.81 106.67 612.45
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.551e+02 1.776e+02 0.874 0.387
percapitaGDP 5.306e-01 6.165e-03 86.073 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 232.4 on 41 degrees of freedom
Multiple R-squared: 0.9945, Adjusted R-squared: 0.9944
F-statistic: 7409 on 1 and 41 DF, p-value: < 2.2e-16
# Et le résumé directement intégrable en LaTeX
library(Hmisc)
latex(summary(model),file='')
\begin{table}[!tbp]
\begin{center}
\begin{tabular}{llrrrrrlrrrrrrr}
\hline\hline
\multicolumn{1}{c}{call}&\multicolumn{1}{c}{terms}&\multicolumn{1}{c}{residuals}&\multicolumn{1}{c}{coefficients Estimate}&\multicolumn{1}{c}{coefficients Std. Error}&\multicolumn{1}{c}{coefficients t value}&\multicolumn{1}{c}{coefficients Pr(\textgreater |t|)}&\multicolumn{1}{c}{aliased}&\multicolumn{1}{c}{sigma}&\multicolumn{1}{c}{df}&\multicolumn{1}{c}{r.squared}&\multicolumn{1}{c}{adj.r.squared}&\multicolumn{1}{c}{fstatistic}&\multicolumn{1}{c}{cov.unscaled (Intercept)}&\multicolumn{1}{c}{cov.unscaled percapitaGDP}\tabularnewline
\hline
lm&~&$-134.87271189157661$&$155.149855718407849$&$1.77579644999158e+02$&$ 0.873691665050592$&$3.87375006605262e-01$&FALSE&$232.446723467964$&$ 2$&$0.994496380728434$&$0.994362146112055$&$7408.64322147501$&$ 5.83632555598559e-01$&$-1.98526681607302e-05$\tabularnewline
percapitaConsumption ~ percapitaGDP&percapitaConsumption&$-108.85603314814416$&$ 0.530605322198291$&$6.16456251821224e-03$&$86.073475713921397$&$5.98872849273753e-48$&FALSE&$232.446723467964$&$41$&$0.994496380728434$&$0.994362146112055$&$ 1.00000000000$&$-1.98526681607302e-05$&$ 7.03327607678801e-10$\tabularnewline
dat3&percapitaGDP&$ -54.24651222993072$&$155.149855718407849$&$1.77579644999158e+02$&$ 0.873691665050592$&$3.87375006605262e-01$&FALSE&$232.446723467964$&$ 2$&$0.994496380728434$&$0.994362146112055$&$ 41.00000000000$&$ 5.83632555598559e-01$&$-1.98526681607302e-05$\tabularnewline
\hline
\end{tabular}\end{center}
\end{table}
L’héritage d’Angus Maddison qui continue à être actualisé par Groningen Growth and Development Centre.
Référence :
Maddison Project Database, version 2020. Bolt, Jutta and Jan Luiten van Zanden (2020), “Maddison style estimates of the evolution of the world economy. A new 2020 update ”.
Le plus simple est de télécharger la version Stata du site web du projet et ensuite de l’importer dans R-projetc :
library(haven)
mpd2020 <- read_dta("mpd2020.dta")
names(mpd2020)
[1] "countrycode" "country" "year" "gdppc" "pop"
Le nouveau format de cette base est utilisable pour travailler sur les pays comme pour la base de Penn World Tables. Mais cette evrsion semble avoir perdu les données régionales qu’Angus Maddison avait construit. On peut les trouver dans la version Excel de la base mais dans un format assez peu pratique.
En ce qui me concerne, je préfère encore utiliser les vieilles versions, en forme de fichiers CSV séparés que j’aavais téléchargés apparemment (ou créé moi-même à partir du fichier Excel?). Vous pouvez les télécharger en suivant les liens suivants :
PIB - Population - PIB/tête
maddison.population<-read.table("maddison-population.csv",header=TRUE,sep=";",na.strings="",dec=".",strip.white=TRUE)
maddison.gdp<-read.table("maddison-gdp.csv",header=TRUE,sep=";",na.strings="",dec=".",strip.white=TRUE)
maddison.gdp.percapita<-read.table("maddison-gdp-percapita.csv",header=TRUE,sep=";",na.strings="",dec=".",strip.white=TRUE)
names(maddison.gdp)
[1] "year" "Austria."
[3] "Belgium." "Denmark."
[5] "Finland." "France"
[7] "Germany." "Italy."
[9] "Netherlands." "Norway."
[11] "Sweden." "Switzerland."
[13] "UK" "X12.W..Europe"
[15] "Ireland." "Greece."
[17] "Portugal." "Spain."
[19] "X14.small.WEC" "X30.W..Europe."
[21] "Australia." "N..Zealand."
[23] "Canada" "USA"
[25] "W..Offshoots." "Albania."
[27] "Bulgaria." "Czechoslovakia"
[29] "Hungary." "Poland."
[31] "Romania." "Yugoslavia."
[33] "X7.E..Europe" "Bosnia."
[35] "Croatia." "Macedonia."
[37] "Slovenia." "Serbia.Montenegro.Kosovo"
[39] "F..Yugoslavia." "Czech.Rep."
[41] "Slovakia." "F..Czechoslovakia"
[43] "Armenia." "Azerbaijan."
[45] "Belarus." "Estonia."
[47] "Georgia." "Kazakhstan"
[49] "Kyrgyzstan." "Latvia."
[51] "Lithuania." "Moldova."
[53] "Russia" "Tajikistan."
[55] "Turk.menistan." "Ukraine."
[57] "Uzbekistan." "F..USSR."
[59] "Argentina." "Brazil."
[61] "Chile." "Colombia."
[63] "Mexico." "Peru."
[65] "Uruguay" "Venezuela"
[67] "X8.L..America" "Bolivia."
[69] "Costa.Rica" "Cuba"
[71] "Dominican.Rep." "Ecuador."
[73] "El.Salvador" "Guatemala"
[75] "Haiti" "Honduras"
[77] "Jamaica." "Nicaragua"
[79] "Panama" "Paraguay"
[81] "Puerto.Rico." "T....Tobago."
[83] "X15.L..America" "X21.Caribbean"
[85] "L..America" "China."
[87] "India." "Indonesia....Timor.until.99."
[89] "Japan." "Philippines"
[91] "S..Korea." "Thailand."
[93] "Taiwan" "Bangladesh"
[95] "Burma." "Hong.Kong"
[97] "Malaysia." "Nepal."
[99] "Pakistan" "Singapore."
[101] "Sri.Lanka" "X16.E..Asia"
[103] "Afghanistan" "Cambodia."
[105] "Laos" "Mongolia."
[107] "North.Korea." "Vietnam"
[109] "X24.Sm..E..Asia" "X30.E..Asia"
[111] "Bahrain." "Iran"
[113] "Iraq." "Israel."
[115] "Jordan." "Kuwait."
[117] "Lebanon." "Oman"
[119] "Qatar" "Saudi.Arabia."
[121] "Syria." "Turkey."
[123] "UAE" "Yemen."
[125] "W..Bank...Gaza." "X15.W..Asia"
[127] "Asia." "Algeria."
[129] "Angola" "Benin."
[131] "Botswana" "Burkina.Faso"
[133] "Burundi" "Cameroon."
[135] "Cape.Verde." "Centr..Afr..Rep."
[137] "Chad." "Comoro.Islands"
[139] "Congo..Brazzaville." "Cote.d.Ivoire"
[141] "Djibouti" "Egypt."
[143] "Equatorial.Guinea." "Eritrea...Ethiopia."
[145] "Gabon" "Gambia."
[147] "Ghana" "Guinea."
[149] "Guinea.Bissau." "Kenya"
[151] "Lesotho" "Liberia"
[153] "Libya." "Madagascar"
[155] "Malawi" "Mali"
[157] "Mauritania." "Mauritius."
[159] "Morocco." "Mozambique"
[161] "Namibia." "Niger"
[163] "Nigeria" "Rwanda"
[165] "S..Tom...P." "Senegal."
[167] "Seychelles" "Sierra.Leone"
[169] "Somalia." "South.Africa."
[171] "Sudan." "Swaziland"
[173] "Tanzania." "Togo"
[175] "Tunisia." "Uganda."
[177] "Zaire..Congo.Kinshasa." "Zambia."
[179] "Zimbabwe" "X3.Small.Afr.."
[181] "Total.Africa." "X"
[183] "World.Total"
qplot(year,World.Total, geom=c("line","point"),main="World population",data=maddison.population,xlab="Years")
qplot(year,World.Total, geom=c("line","point"),main="World population",data=maddison.gdp,xlab="Years")
qplot(year,World.Total, geom=c("line","point"),main="World population",data=maddison.gdp.percapita,xlab="Years")
qplot(year,log(X12.W..Europe), geom=c("line","point"),main="Croissance en Europe (log PIB / tête)",data=maddison.gdp.percapita,xlab="Years",xlim=c(1820,2008))
Nous allons générer des graphiques et un fichier PDF qui vont montrer la croissance à long terme aux EU, Europe et Japon et illustrer la régularité des sentiers de croissance.
library(grid)
# For putting multiple plots in the same PDF page
vplayout <- function(x,y) viewport(layout.pos.row = x, layout.pos.col = y)
# Fait stylisé sur la régularité des taux de croissance
datemin<-1870
datemax<-2009
plot1<- qplot(year,log(USA), geom=c("line","smooth"),main="Le PIB/tête des E.U. (log)",data=subset(maddison.gdp.percapita,year >= datemin & year <= datemax),xlab=paste("Années (avant ",datemax,")"),ylab="log(y)",xlim=c(datemin-1,datemax+1))
plot2<- qplot(year,log(X12.W..Europe), geom=c("line","smooth"),main="Le PIB/tête de l'Europe à 12 pays (log)",data=subset(maddison.gdp.percapita,year >= datemin & year <= datemax),xlab=paste("Années (avant ",datemax,")"),ylab="log(y)",xlim=c(datemin-1,datemax+1))
plot3<-qplot(year,log(Japan.), geom=c("line","smooth"),main="Le PIB/tête du Japon (log)",data=subset(maddison.gdp.percapita,year >= datemin & year <= datemax),xlab=paste("Années (avant ",datemax,")"),ylab="log(y)",xlim=c(datemin-1,datemax+1))
plot1
On voit bien pourquoi le concept de SCE paraît si évident quand on travaille sur les Etats-Unis : à par les chocs des deux Guerres Mondiales, la croissance dans ce pays s’est globalement faite avec une grande régularité.
plot2
On voit aussi en Europe l’impact des deux Guerres Mondiales, mais aussi l’émergence de trois régimes de croissance distincts : Avant 1945, après 1945 (les Trente Glorieuses!) et un ralentissement assez persistent après la crise de 1070.
plot3
L’évolution est quelque peu plus perturbée au Japon où on observe 4 régimes de croissance distincts. Celui jusqu’à la Seconde Guerre Mondiale est suivie par un régime de croissance fulgurante, avec un taux de croissance moyenne de 10% et un rattrapage impressionnant des pays industrialisés. Mais cette croissane débouche sur un double ralentissement, d’abord avec la crise de 1970 et encore une fois, plus fortement après les années 80.
pdf(paste("maddison-croissance-reguliere",datemin,"-",datemax,".pdf",sep=""),width=12,height=4)
library(grid)
grid.newpage()
pushViewport(viewport(layout=grid.layout(1,3)))
print(plot1,vp=vplayout(1,1))
print(plot2,vp=vplayout(1,2))
print(plot3,vp=vplayout(1,3))
dev.off()
# Séries temporelles à partir de Maddison, avec des taux de croissance
library(tis)
#Growth rate of the per capita GDP
pcgdp<-subset(maddison.gdp.percapita,year >= 1870,c(X12.W..Europe))
pcgdpts<-ts(pcgdp,start=1870,frequency=1)
pcgdpgrwc<-growth.rate(pcgdpts,lag=10,simple=F)
pcgdpgrwc<-pcgdpgrwc/100
tisPlot(pcgdpgrwc,lineWidth = 1.5,head="Europe 12",topMargin=2,cex=1.,xCex=1.1,xSpace=2,yCex=1.5,boxType="o",innerOffset=0.3,tck=0,labelRightTicks=F,labelLeftTicks=T,leftTicks=10,leftAxis=T,xExpandBy=-0.01)
pcgdp<-subset(maddison.gdp.percapita,year >= 1870,c(France))
pcgdpts<-tis(pcgdp,start=1870,frequency=1)
pcgdpgrfr<-growth.rate(pcgdpts,lag=10,simple=F)
pcgdpgrfr<-pcgdpgrfr/100
tisPlot(pcgdpgrfr,lineWidth = 1.5,head="France",topMargin=2,cex=1,xCex=1.1,xSpace=2,yCex=1.5,boxType="o",innerOffset=0.3,tck=0,labelRightTicks=F,labelLeftTicks=T,leftTicks=10,leftAxis=T,xExpandBy=-0.01)
pcgdp<-subset(maddison.gdp.percapita,year >= 1870,c(USA))
pcgdpts<-tis(pcgdp,start=1870,frequency=1)
pcgdpgrus<-growth.rate(pcgdpts,lag=10,simple=F)
pcgdpgrus<-pcgdpgrus/100
tisPlot(pcgdpgrus,lineWidth = 1.5,head="E.U.",topMargin=2,cex=1,xCex=1.1,xSpace=2,yCex=1.5,boxType="o",innerOffset=0.3,tck=0,labelRightTicks=F,labelLeftTicks=T,leftTicks=10,leftAxis=T,xExpandBy=-0.01)
pcgdp<-subset(maddison.gdp.percapita,year >= 1870,c(year,USA,France, Germany.,UK,Japan.))
#names(pcgdp)
row.names(pcgdp)<-NULL
pcgdpts<-ts(pcgdp,start=1870,frequency=1)
# Générer les graphiques et ssérie temporelle pour chaque pays retenus par Baumol
p1<-qplot(year,log(USA),geom="line",data=pcgdp,color=I("red"),size=I(0.8),ylab="log(y) - Source : Maddison" )
p2<-p1+geom_text(aes(1880,10.5,label="USA"),color=I("red"))
p3<- p2+geom_line(aes(x=year,y=log(France)),data=pcgdp,color=I("blue"),size=I(0.8))+ geom_text(aes(1880,10.3,label="France"),color=I("blue"))
p4<-p3+geom_line(aes(x=year,y=log(Germany.)),data=pcgdp,color=I("seagreen4"),size=I(0.8))+ geom_text(aes(1880,10.1,label="Germany"),color=I("seagreen4"))
p5<-p4+geom_line(aes(x=year,y=log(Japan.)),data=pcgdp,color=I("turquoise2"),size=I(0.8))+ geom_text(aes(1880,9.9,label="Japan."),color=I("turquoise2"))
p5
# Exporter le graphique en PDF
ggsave("convergence-baumol.pdf",height=6,width=8)