Démystifier les calculs de parité de pouvoir d'achat ICP à l'aide de Python : résultats globaux
Les résultats de l'ICP sont disponibles sur icp.worldbank.org. Cette série de blogs, éditée par Edie Purdie, couvre tous les aspects de l'ICP et explore l'utilisation faite de ces données par les chercheurs, les décideurs, les économistes, les data scientists et autres. Nous encourageons les utilisateurs à partager leurs applications de données et leurs découvertes dans cette série de blogs via [email protected].
Comme de nombreux lecteurs le savent, le Programme de comparaison internationale (PCI) produit des parités de pouvoir d'achat (PPA) et des indices de niveau de prix comparables pour chacune de ses plus de 170 économies participantes, ainsi que des volumes basés sur la PPA et une mesure par habitant du produit intérieur brut et ses composantes de dépenses. Les PPA convertissent différentes monnaies en une monnaie commune et, au cours du processus de conversion, égalisent leur pouvoir d'achat en contrôlant les différences de niveaux de prix entre les économies et fournissent une mesure de ce que la monnaie locale d'une économie peut acheter dans une autre économie.
Le processus de production de PPP de l'ICP comporte de nombreuses phases, y compris des calculs en plusieurs étapes aux niveaux national, régional et mondial. Ce blog fait partie de nos efforts de sensibilisation continus axés sur la transparence du processus et des méthodes utilisées pour produire les résultats du programme. Il s'agit du deuxième blog de la série Démystifier les calculs de parité de pouvoir d'achat ICP à l'aide de Python. Ensemble, ces blogs fournissent un enregistrement entièrement transparent du processus de calcul
Le premier blog décrivait les étapes d'estimation des PPA pour les pays d'une même région, telles que calculées par les agences régionales de mise en œuvre du PCI. Ce deuxième blog se concentre sur la procédure pour relier les PPP régionaux dans un ensemble mondial de PPP. Nous utilisons à nouveau des données de prix moyens et de dépenses fictives et effectuons le calcul à l'aide de Python, un langage de programmation gratuit et open source.
Pour un aperçu détaillé des étapes méthodologiques pour le calcul et l'agrégation des PPA entre les régions, veuillez vous référer à la section méthodologie du site Web du PCI et au chapitre 26 « Liaison et calcul des résultats globaux » des directives et procédures opérationnelles du PCI pour mesurer la Taille réelle de l'économie mondiale.
Ce qui suit sont des extraits de code, utilisant un bloc-notes Jupyter, qui sont organisés de manière séquentielle pour comprendre comment les PPP ICP mondiaux sont estimés. Cliquez sur chaque onglet pour voir le code Python appliqué à chaque étape. Le bloc-notes complet avec l'ensemble du code défini dans un environnement en ligne exécutable est disponible ici (aucune installation n'est requise, mais le chargement peut prendre un certain temps les premières fois).
Nous commençons par charger les jeux de données d'entrée nécessaires aux calculs. Il s'agit notamment des données nationales annuelles sur les prix moyens, des données sur les dépenses et des PPA régionales. Un examen des données sur les prix et les dépenses nécessaires pour estimer les PPA est fourni dans le blog de données de la Banque mondiale. Comment l'ICP mesure-t-il les niveaux de prix dans le monde ?
## Charger les bibliothèques importer des pandas en tant que pd importer numpy en tant que npimport statsmodels.api en tant que sm
#Charger les données de prix
#Charger les données régionales sur les PPP
Les utilisateurs fréquents des données du PCI se souviendront que la classification des dépenses du PCI ventile les dépenses en biens et services finaux en différents niveaux et définit 155 rubriques de base comme le niveau le plus bas auquel les économies participantes peuvent estimer les dépenses explicites. Chaque position de base se compose d'un groupe de biens ou de services similaires bien définis et constitue le niveau le plus bas pour lequel les PPA sont calculées. Comme dans notre blog précédent, nous nous concentrons sur trois rubriques de base ("bh") comme exemples pour notre calcul : les vêtements, le riz et le porc.
De plus, nous utilisons 11 pays dans notre exemple, chacun appartenant à l'une des trois régions différentes. Dans le cadre du PCI, les régions représentent le premier élément constitutif du processus de comparaisons entre pays. Les agences régionales d'exécution sont responsables du calcul des PPA régionales sur la base des prix et des dépenses des comptes nationaux fournis par les économies participantes. Chaque région désigne un pays au sein de sa région comme numéraire et les PPA régionales sont calculées par rapport à ce numéraire régional. Dans notre exemple illustré ci-dessous, Pays 2 est le numéraire de la région A, Pays 6 de la région B et Pays 11 de la région C.
Afin d'estimer les PPA entre les régions, nous identifions un pays numéraire global. Dans le PCI, les États-Unis d'Amérique servent de pays de référence mondial. Dans notre exemple, le pays 11 sert de numéraire global et la région C de région de référence. Il convient de noter que le choix du pays de base n'influence pas les résultats, car la méthodologie PPA actuelle garantit que les estimations sont invariantes pour le pays de base, comme expliqué ci-dessous.
numeraire = 'C'
numéraire_c = 'pays11'
Les PPA régionales sont ensuite liées au numéraire mondial via ce que l'on appelle des "facteurs de liaison". Ce sont des scalaires estimés pour chaque région via une méthode de régression connue sous le nom de "dummy de produit de région pondérée" (RPD-W).
La méthode RPD-W est réalisée au sein de chaque position élémentaire en régressant le logarithme des prix des articles pays observés, convertis en un numéraire régional commun à partir des PPA de la position élémentaire régionale du pays, sur des indicatrices article (une pour chaque article) et des indicatrices région ( un pour chaque région autre que la région du numéraire global).
La méthode RPD-W intègre également les indicateurs d'importance au niveau des éléments communiqués par les pays avec l'idée de « sous-pondérer » les éléments les moins représentatifs lors du calcul (pour un aperçu détaillé de la manière dont les indicateurs d'importance sont dérivés, voir le chapitre 20 des Orientations et procédures de mesure de la taille réelle du rapport sur l'économie mondiale).
pour bh dans price.bh.unique() :
tempdf=prix[prix.bh == bh]
X=tempdf.loc[:, [x for x in tempdf.columns if x.startswith(('r_', 'i_'))]]y=np.log(tempdf['price']/tempdf['ppp_reg '])
wts=temppdf['imp']
wts_cpd=sm.WLS(y, X, poids=wts)
res=wts_cpd.fit()
res_eparams=np.exp(res.params)
l_coef.append(res_eparams)l_bh.append(bh)
coef = np.array(l_coef, dtype=float)
cols = list(X) #stocke les têtes de colonne de X sous forme de liste
coef[coef == 1] = np.nan #%% remplacer les PPP qui étaient exp(0)=1 par 'np.nan'
print("\n","Facteurs de liaison :", "\n") print(df_bhppp ,"\n")
bh
région
Si
ppp_regLF=pd.merge(ppp_reg, df_bhppp, how=:'inner', on=( 'bh','region'))
ppp_regLF['ppp_linked']=ppp_regLF[ 'ppp_reg']*ppp_regLF['lf']
ppp_regLF = ppp_regLF.drop(['ppp_reg'], axe= 1)
ppp_regLF=ppp_regLF.pivot(index="bh",
ppp_regLF=ppp_regLF.pivot(index="bh",
colonnes="pays",
valeurs="ppp_linked").reset_index()
# Trier les cols avec le numéraire comme colonne1 et imprimer
print("\n","Global Basic Heading PPPs :", "\n") print(ppp_regLF ,"\n")
bh
pays11
pays1
pays10
pays2
pays3
pays4
bh
pays5
pays6
pays7
pays8
pays9
Une fois que les PPA des rubriques de base mondiales liées sont obtenues en multipliant les PPA des rubriques de base régionales par des facteurs de liaison, elles sont ensuite agrégées à l'aide des valeurs de dépenses des comptes nationaux en unités de monnaie locale pour chaque pays sous forme de pondérations ou de volumes.
#Charger les valeurs de dépenses de la rubrique de base
#Doit contenir bh et les pays avec le préfixe c
code="bhdata_exp.csv" df_bh=pd.read_csv(code,index_col="icp_bh")
La méthode d'agrégation globale suit les mêmes étapes pour l'agrégation des PPP au niveau régional, comme décrit dans le blog précédent. Premièrement, nous construisons des PPA bilatérales pour chaque paire de pays, en utilisant les valeurs de dépenses des comptes nationaux au niveau de la rubrique de base comme pondérations de chaque pays à tour de rôle. Une PPA bilatérale de type Laspeyres est calculée entre chaque paire de pays suivie d'une PPA bilatérale de type Paasche. La moyenne géométrique des PPA bilatérales de type Laspeyres et Paasche nous donne la PPA bilatérale de type Fisher entre chaque paire de pays dans l'ensemble de données.
##Calculer les PPA bilatérales de Laspeyres
forme = (len(df_bh.columns),len(df_bh.columns))
lp = np.zeros(shape)#matrice carrée : country x countrynrow=len(lp) # obtient le nombre de lignes ncol=len(lp[0])
pour la ligne dans la plage (nrow):
pour col dans la plage (ncol):
#weighted signifie en bouclant sur les lignes df
lp[row][col]= np.average((ppp_regLF.iloc[:,row]/ppp_regLF.iloc[:,col]),weights= df_bh.iloc[:,col])
lp_ppp = lp
lp_ppp = pd.DataFrame(données = lp_ppp, index = df_bh.columns, colonnes =df_bh.columns
#Calculer les PPA bilatérales de Paasche
pa = np.transpose(np.réciproque(lp))
pa_ppp = pd.DataFrame(données = pa, index = df_bh.columns, colonnes =df_bh.columns)
forme = (len(df_bh.columns),len(df_bh.columns))
fi = np.zeros(shape)#matrice carrée : country x countrynrow=len(fi) # obtient le nombre de lignes ncol=len(fi[0])
pour la ligne dans la plage (nrow):
pour col dans la plage (ncol):
fi[row][col]= nangmean([lp[row][col],pa[row][col]])
fi_ppp = pd.DataFrame(données = fi, index = df_bh.columns, colonnes =df_bh.columns)
Ensuite, la méthode de Gini-Éltető-Köves-Szulc (GEKS) est appliquée à la matrice des PPA bilatérales de type Fisher. Les PPA GEKS sont calculées entre chaque pays par rapport au numéraire ou pays de base. Les PPA GEKS sont considérées comme "multilatérales" parce que la procédure GEKS utilise à la fois des PPA directes et indirectes et tient ainsi compte des prix relatifs entre tous les pays en tant que groupe.
#Calculer les ppps multilatéraux GEKS##nécessite l'ancienne fonction nangmean
geks = np.zeros(shape) # zéro matrice 'pays x pays' nrow=len(geks) # obtient le nombre de lignes ncol=len(geks[0])
pour la ligne dans la plage (nrow):
pour col dans la plage (ncol):
geks[ligne][col]= nangmean(fi[ligne]/fi[col])
geks_vec = np.zeros(shape=(1,len(df_bhexp.columns)))# car nous avons besoin d'un vecteur de ppps, pas d'une matrice
j=len(geks_vec[0])
for col in range(j):#..one PPP per country, or col of bhexp df
crazy_vec[:,col]=nangmean(crazy[col,0]/crazy[0,0]) #ge-
omoyenne sur chaque ligne, avec chaque col rebasé sur le pays dans col1
crazy_ppp = np.array(crazy_vec)
crazy_ppp = pd.DataFrame(crazy_ppp)
geks_ppp.columns = df_bh.columns
#Remodelage de la trame de données globale GEKS
crazy_ppp = crazy_ppp.melt(var_name="pays",value_name="fou"
print("\n","PPM multilatéraux GEKS :", "\n") print(geks_ppp ,"\n")
pays
fou
La méthode GEKS est nécessaire pour rendre les PPA bilatérales de type Fisher transitives et invariantes pour le pays de base. La transitivité signifie que la PPA entre deux pays doit être la même, qu'elle soit calculée directement ou indirectement par l'intermédiaire d'un pays tiers. Invariant du pays de base signifie que les PPA entre deux pays doivent être les mêmes quel que soit le choix du pays de base ou du numéraire.
La dernière étape du processus d'estimation des PPA globales consiste à appliquer la procédure d'agrégation par pays avec redistribution (CAR). Cette étape est entreprise pour garantir le principe de fixité. La fixité implique que les volumes relatifs dans les comparaisons globales entre n'importe quelle paire de pays appartenant à une région donnée doivent être identiques aux volumes relatifs des deux pays établis dans les comparaisons régionales auxquelles ils appartiennent.
Afin de respecter ce principe, les totaux des volumes régionaux dans la comparaison mondiale sont obtenus en additionnant les volumes ajustés GEKS pour les pays individuels de chaque région. Ces volumes totaux sont ensuite divisés en utilisant les parts de dépenses des pays dans une comparaison régionale. Enfin, les PPA dans le numéraire mondial pour chaque pays sont obtenues indirectement en divisant les dépenses nominales des pays par les dépenses ajustées en fonction du volume.
#Fusionner les données des dépenses et du geks global
car_df = pd.merge(volshare_df, geks_ppp, how = 'inner', on= ('pays'))
#Convertir l'exp total en utilisant les geks globaux
car_df['inner'] =car_df['total_exp']/car_df['geks']
##Calcul des dépenses régionales totales en unités ajustées en geks
car_df['exp_gek_reg'] =car_df['exp_gek'].groupby(volshare_df['region']).transform('sum')
Application de la part régionale en volume aux dépenses totales et rebasage sur le numéraire PPA
car_df['exp_adj']=car_df['exp_gek_reg']*car_df['volshare']
car_df['PPPglobal']=car_df['exp_total']/car_df['exp_adj']
car_df.set_index(car_df['country'], drop=True, append=False, inplace=True)
car_df['PPPglobal_num']=car_df['PPPglobal']/car_df.at['country11','PPPglobal']
print("\n","PPP liés globaux :", "\n") print(car_df.PPPglobal_num ,"\n")
pays
PPP
Dans l'exemple ci-dessus, nous avons présenté les principales étapes du calcul des PPA mondiales. Des informations sur la méthodologie globale du PCI sont fournies sur le site Web du PCI. Veuillez nous contacter à [email protected] pour une discussion plus approfondie.
Analyste de recherche, Development Data Group (DECDG), Banque mondiale