Desmitificación de los cálculos de paridad del poder adquisitivo del PCI con Python: resultados globales
HogarHogar > Blog > Desmitificación de los cálculos de paridad del poder adquisitivo del PCI con Python: resultados globales

Desmitificación de los cálculos de paridad del poder adquisitivo del PCI con Python: resultados globales

Dec 23, 2023

Los resultados del PCI están disponibles en icp.worldbank.org. Esta serie de blogs, editada por Edie Purdie, cubre todos los aspectos del PCI y explora el uso que hacen de estos datos investigadores, legisladores, economistas, científicos de datos y otros. Alentamos a los usuarios a compartir sus aplicaciones de datos y hallazgos en esta serie de blogs a través de [email protected].

Como muchos lectores saben, el Programa de Comparación Internacional (ICP) produce paridades de poder adquisitivo (PPA) e índices de nivel de precios comparables para cada una de sus más de 170 economías participantes, así como volúmenes basados ​​en PPA y medidas per cápita del producto interno bruto y sus componentes de gasto. Las PPA convierten diferentes monedas a una moneda común y, en el proceso de conversión, igualan su poder adquisitivo controlando las diferencias en los niveles de precios entre economías y brindan una medida de lo que la moneda local de una economía puede comprar en otra economía.

Hay muchas fases en el proceso de producción de PPP del ICP, incluidos los cálculos de varias etapas a nivel nacional, regional y mundial. Este blog es parte de nuestros esfuerzos continuos de divulgación que se enfocan en la transparencia del proceso y los métodos utilizados para producir los resultados del programa. Es el segundo blog de la serie Desmitificación de los cálculos de la paridad del poder adquisitivo del PCI mediante Python. Juntos, estos blogs proporcionan un registro totalmente transparente del proceso de cálculo.

El primer blog describió los pasos para estimar las PPA para los países dentro de una sola región, según lo calculado por las Agencias de Implementación Regionales del PCI. Este segundo blog se centra en el procedimiento para vincular las APP regionales en un conjunto global de APP. Usamos nuevamente datos de gastos y precios promedio simulados y llevamos a cabo el cálculo usando Python, un lenguaje de programación gratuito y de código abierto.

Para obtener una descripción general detallada de los pasos metodológicos para el cálculo y la agregación de las PPA entre regiones, consulte la sección de metodología del sitio web del PCI y el Capítulo 26 "Vinculación y cálculo de resultados globales" de las Directrices operativas y procedimientos para medir el PCI del PCI. Tamaño Real de la Economía Mundial.

Lo que sigue son extractos de código, utilizando un cuaderno Jupyter, que se organizan secuencialmente para comprender cómo se estiman las PPA de ICP globales. Haga clic en cada pestaña para ver el código de Python aplicado en cada paso. El cuaderno completo con el conjunto de códigos completo en un entorno ejecutable en línea está disponible aquí (no se requieren instalaciones, pero puede llevar algún tiempo cargar las primeras veces).

Comenzamos cargando los conjuntos de datos de entrada necesarios para los cálculos. Estos incluyen datos de precios promedio nacionales anuales, datos de gastos y PPA regionales. En el blog de datos del Banco Mundial, se proporciona una revisión de los datos de precios y gastos necesarios para estimar las PPA. ¿Cómo mide el PCI los niveles de precios en todo el mundo?

## Cargar bibliotecas importar pandas como pd importar numpy como npimport statsmodels.api como sm

#Cargar datos de precios

#Cargar datos de PPA regionales

Los usuarios frecuentes de los datos del PCI recordarán que la Clasificación de gastos del PCI desglosa el gasto en bienes y servicios finales en diferentes niveles y define 155 encabezados básicos como el nivel más bajo en el que las economías participantes pueden estimar los gastos explícitos. Cada encabezado básico consta de un grupo de bienes o servicios similares bien definidos y es el nivel más bajo para el cual se calculan las PPA. Como en nuestro blog anterior, nos enfocamos en tres encabezados básicos ("bh") como ejemplos para nuestro cálculo: prendas de vestir, arroz y carne de cerdo.

Además, usamos 11 países en nuestro ejemplo, cada uno perteneciente a una de tres regiones diferentes. En el marco del PCI, las regiones representan el primer bloque de construcción en el proceso de comparaciones entre países. Los Organismos de Ejecución Regionales son responsables de calcular las PPA regionales en función de los precios y los gastos de las cuentas nacionales proporcionados por las economías participantes. Cada región designa un país dentro de su región como numerario y las PPA regionales se calculan en relación con este numerario regional. En nuestro ejemplo ilustrado a continuación, el país 2 es el numerario de la región A, el país 6 de la región B y el país 11 de la región C.

Para estimar las PPA entre regiones identificamos un país numerario global. En el PCI, Estados Unidos de América actúa como país de referencia mundial. En nuestro ejemplo, el País 11 actúa como el numerario global y la región C como la región de referencia. Vale la pena señalar cómo la elección del país base no influye en los resultados, ya que la metodología actual de PPA garantiza que las estimaciones sean invariantes con el país base, como se explica a continuación.

numerario = 'C'

numerario_c = 'país11'

Luego, las PPA regionales se vinculan al numerario global a través de los llamados "factores de enlace". Estos son escalares estimados para cada región a través de un método de regresión conocido como "dummy de producto de región ponderada" (RPD-W).

El método RPD-W se lleva a cabo dentro de cada encabezado básico mediante la regresión del logaritmo de los precios observados de los artículos del país, convertidos en un numerario regional común utilizando las PPA del encabezado básico regional del país, en dummies de ítem (uno para cada artículo) y dummies de región ( uno para cada región que no sea la región del numerario global).

El método RPD-W también incorpora los indicadores de importancia a nivel de elemento informados por el país con la idea de "reducir la ponderación" de los elementos menos representativos durante el cálculo (para obtener una descripción detallada de cómo se derivan los indicadores de importancia, consulte el Capítulo 20 de las Directrices prácticas). y Procedimientos para medir el tamaño real del informe de la economía mundial).

para bh en precios.bh.unique():

temppdf=precios[precios.bh == bh]

X=tempdf.loc[:, [x para x en tempdf.columns if x.startswith(('r_', 'i_'))]]y=np.log(tempdf['price']/tempdf['ppp_reg '])

wts=tempdf['imp']

wts_cpd=sm.WLS(y, X,pesos=peso)

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) #almacenar encabezados de columna de X como una lista

coef[coef == 1] = np.nan #%% reemplaza las PPA que fueron exp(0)=1 con 'np.nan'

print("\n","Factores de enlace:", "\n") print(df_bhppp ,"\n")

bh

región

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'], eje= 1)

ppp_regLF=ppp_regLF.pivot(index="bh",

ppp_regLF=ppp_regLF.pivot(index="bh",

columnas="país",

valores="ppp_linked").reset_index()

#Ordenar columnas con numerario como columna1 e imprimir

print("\n","Encabezado Básico Global PPP:", "\n") print(ppp_regLF ,"\n")

bh

pais11

pais1

pais10

pais2

pais3

pais4

bh

pais5

país6

pais7

país8

país9

Una vez que se obtienen las PPA de los encabezados básicos vinculados a nivel mundial multiplicando las PPA de los encabezados básicos regionales por los factores de vinculación, se agregan utilizando los valores de gasto de las cuentas nacionales en unidades monetarias locales para cada país como pesos o volúmenes.

#Cargar valores de gasto de encabezado básico

#Debe contener bh y países con prefijo c

código="bhdata_exp.csv" df_bh=pd.read_csv(código,index_col="icp_bh")

El método de agregación global sigue los mismos pasos para la agregación de PPA a nivel regional, como se describe en el blog anterior. En primer lugar, construimos PPA bilaterales para cada par de países, usando valores básicos de gastos de cuentas nacionales a nivel de encabezado como ponderaciones de cada país por turno. Se calcula una PPA bilateral tipo Laspeyres entre cada par de países seguida de una PPA bilateral tipo Paasche. La media geométrica de las PPA bilaterales tipo Laspeyres y Paasche nos da la PPA bilateral tipo Fisher entre cada par de países en el conjunto de datos.

##Calcular las PPA bilaterales de Laspeyres

forma = (len(df_bh.columnas),len(df_bh.columnas))

lp = np.zeros(shape)#square matrix: country x countrynrow=len(lp) # obtiene el número de filas ncol=len(lp[0])

para fila en rango (nfila):

para col en rango (ncol):

#medios ponderados recorriendo las filas df

lp[fila][columna]= np.promedio((ppp_regLF.iloc[:,fila]/ppp_regLF.iloc[:,columna]),pesos= df_bh.iloc[:,columna])

lp_ppp = lp

lp_ppp = pd.DataFrame(datos = lp_ppp, índice = df_bh.columns, columnas =df_bh.columns

#Calcular las PPA bilaterales de Paasche

pa = np.transponer(np.recíproco(lp))

pa_ppp = pd.DataFrame(datos = pa, índice = df_bh.columnas, columnas =df_bh.columnas)

forma = (len(df_bh.columnas),len(df_bh.columnas))

fi = np.zeros(shape)#square matrix: country x countrynrow=len(fi) # obtiene el número de filas ncol=len(fi[0])

para fila en rango (nfila):

para col en rango (ncol):

fi[fila][columna]= nangmean([lp[fila][columna],pa[fila][columna]])

fi_ppp = pd.DataFrame(datos = fi, índice = df_bh.columns, columnas =df_bh.columns)

A continuación, se aplica el método Gini-Éltető-Köves-Szulc (GEKS) a la matriz de PPA bilaterales tipo Fisher. Las PPA de GEKS se calculan entre cada país en relación con el numerario o país base. Las PPA GEKS se consideran "multilaterales" porque el procedimiento GEKS utiliza PPA tanto directas como indirectas y, por lo tanto, da cuenta de los precios relativos entre todos los países como grupo.

#Calcular GEKS ppps multilaterales##requiere la función nangmean anterior

geks = np.zeros(shape) # matriz cero 'país x país' nrow=len(geks) # obtiene el número de filas ncol=len(geks[0])

para fila en rango (nfila):

para col en rango (ncol):

geks[row][col]= nangmean(fi[row]/fi[col])

geks_vec = np.zeros(shape=(1,len(df_bhexp.columns)))# ya que necesitamos un vector de ppps, no una matriz

j=len(geks_vec[0])

para columna en rango(j):#..una PPA por país, o columna de bhexp df

loco_vec[:,col]=nangmean(loco[col,0]/loco[0,0]) #ge-

omean sobre cada fila, con cada columna rebasada al país en col1

crazy_ppp = np.array(crazy_vec)

crazy_ppp = pd.DataFrame(crazy_ppp)

geks_ppp.columnas = df_bh.columnas

#Remodelación del marco de datos GEKS global

crazy_ppp = crazy_ppp.melt(var_name="país",value_name="loco"

print("\n","APP multilaterales GEKS:", "\n") print(geks_ppp ,"\n")

país

loco

El método GEKS es necesario para hacer que las PPA bilaterales de tipo Fisher sean transitivas e invariantes del país base. La transitividad significa que la PPA entre dos países debe ser la misma ya sea que se calcule directa o indirectamente a través de un tercer país. Invariante del país base significa que las PPA entre dos países cualesquiera deben ser las mismas independientemente de la elección del país base o numerario.

El último paso en el proceso de estimación de las PPA globales consiste en aplicar el procedimiento de Agregación de Países con Redistribución (CAR). Este paso se realiza para garantizar el principio de fijeza. La fijeza implica que los volúmenes relativos en las comparaciones globales entre cualquier par de países pertenecientes a una región determinada deben ser idénticos a los volúmenes relativos de los dos países establecidos en las comparaciones regionales a las que pertenecen.

Para cumplir con este principio, los totales de volumen regional en la comparación global se obtienen sumando los volúmenes ajustados por GEKS para países individuales en cada región. Luego, estos totales de volumen se dividen utilizando las proporciones de gasto de los países en la comparación regional. Finalmente, las PPA en numerario mundial para cada país se obtienen indirectamente al dividir los gastos nominales de los países por los gastos ajustados por volumen de participación.

#Fusionar el marco de datos de gastos y geks globales

car_df = pd.merge(volshare_df, geks_ppp, how = 'inner', on= ('country'))

#Convertir la experiencia total usando los geks globales

car_df['inner'] =car_df['total_exp']/car_df['geks']

##Cálculo del gasto regional total en unidades ajustadas geks

car_df['exp_gek_reg'] =car_df['exp_gek'].groupby(volshare_df['region']).transform('sum')

Aplicando el porcentaje de volumen regional al gasto total y rebasándolo en el numerario PPA

car_df['exp_adj']=car_df['exp_gek_reg']*car_df['volshare']

car_df['PPPglobal']=car_df['total_exp']/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 enlazados globales:", "\n") print(car_df.PPPglobal_num ,"\n")

país

APP

En el ejemplo anterior, mostramos los pasos principales para calcular las PPA globales. La información sobre la metodología general de ICP se proporciona en el sitio web de ICP. Póngase en contacto con nosotros en [email protected] para más información.

Analista de investigación, Grupo de Datos de Desarrollo (DECDG), Banco Mundial