Python を使用した ICP 購買力平価計算の謎を解く: 世界的な結果
ICP の結果は icp.worldbank.org で入手できます。 Edie Purdie が編集するこのブログ シリーズでは、ICP のあらゆる側面をカバーし、研究者、政策立案者、経済学者、データ サイエンティストなどによるこれらのデータの利用について調査します。 ユーザーには、[email protected] 経由でこのブログ シリーズでデータ アプリケーションと調査結果を共有することをお勧めします。
多くの読者が知っているように、国際比較プログラム (ICP) は、170 以上の参加経済圏ごとに購買力平価 (PPP) と同等の物価水準指数を作成するだけでなく、PPP ベースの国内総生産量と 1 人当たりの指標も作成しています。その支出構成要素。 PPP は、さまざまな通貨を共通の通貨に変換し、変換の過程で経済間の価格水準の違いを制御することで購買力を均等化し、ある経済の現地通貨が別の経済で買えるものの尺度を提供します。
ICP の PPP 生産プロセスには、国、地域、世界レベルでの多段階の計算を含む多くの段階があります。 このブログは、プログラムの結果を生み出す際に利用されたプロセスと手法の透明性に焦点を当てた、継続的な支援活動の一環です。 これは、「Python を使用した ICP 購買力平価計算の謎を解く」シリーズの 2 番目のブログです。 これらのブログを組み合わせることで、計算プロセスの完全に透明な記録が提供されます。
最初のブログでは、ICP 地域実施機関によって計算された、単一地域内の国々の PPP を見積もる手順の概要を説明しました。 この 2 番目のブログでは、地域の PPP をグローバルな PPP セットにリンクする手順に焦点を当てます。 ここでも模擬平均価格と支出データを使用し、無料のオープンソース プログラミング言語である Python を使用して計算を実行します。
地域間の PPP の計算と集計のための方法論的手順の詳細な概要については、ICP Web サイトの方法論セクションおよび ICP 運用ガイドラインの第 26 章「グローバル結果のリンクと計算」および「グローバル結果の測定手順」を参照してください。世界経済の本当の規模。
以下は、Jupyter ノートブックを使用したコードの抜粋です。グローバル ICP PPP がどのように推定されるかを理解するために、順番に整理されています。 各タブをクリックすると、各ステップで適用された Python コードが表示されます。 実行可能なオンライン環境で設定されたコード全体を含む完全なノートブックは、ここから入手できます (インストールは必要ありませんが、最初の数回の読み込みに時間がかかる場合があります)。
まず、計算に必要な入力データセットを読み込みます。 これらには、年間の全国平均価格データ、支出データ、地域の PPP が含まれます。 PPP の推定に必要な価格と支出データのレビューは、世界銀行データ ブログで提供されています。ICP は世界中の価格レベルをどのように測定しますか?
## ライブラリをロードします import pandas as pd import numpy as npimport statsmodels.api as sm
#価格データのロード
#地域の PPP データをロードする
ICP データを頻繁に使用する人は、ICP 支出分類が最終財およびサービスへの支出をさまざまなレベルに分類し、参加経済国が明示的な支出を見積もることができる最低レベルとして 155 の基本項目を定義していることを思い出されるでしょう。 各基本見出しは、類似の明確に定義された商品またはサービスのグループで構成され、PPP が計算される最低レベルです。 前回のブログと同様に、計算の例として 3 つの基本的な見出し (「bh」)、衣料品、米、豚肉に焦点を当てます。
さらに、この例では 11 か国を使用しており、それぞれが 3 つの異なる地域のいずれかに属しています。 ICP フレームワーク内では、地域は国をまたいだ比較のプロセスにおける最初の構成要素を表します。 地域実施機関は、参加国が提供する価格と国民経済計算支出に基づいて地域 PPP を計算する責任を負います。 各地域は、その地域内の 1 か国を数値として指定し、地域の PPP はこの地域の数値に関連して計算されます。 以下に示す例では、地域 A の番号は国 2、地域 B の番号は国 6、地域 C の番号は国 11 です。
地域間の PPP を推定するために、世界の代表的な国を特定します。 ICP では、アメリカ合衆国が世界基準国として機能します。 この例では、国 11 がグローバル番号として機能し、地域 C が参照地域として機能します。 以下で説明するように、現在の PPP 手法では推定値が基準国に依存しないことが保証されているため、基準国の選択が結果にどのように影響しないかは注目に値します。
番号 = 'C'
numeraire_c = 'country11'
地域の PPP は、いわゆる「リンク要素」を介して世界規模の数値に関連付けられます。 これらは、「加重領域積ダミー」(RPD-W) として知られる回帰手法によって各領域について推定されたスカラーです。
RPD-W メソッドは、観察された国の品目価格の対数を回帰することによって各基本品目内で実行され、その国の地域の基本品目 PPP を使用して、品目ダミー (品目ごとに 1 つ) と地域ダミー (品目ごとに 1 つ) および地域ダミー (グローバル数値の領域以外の各領域に 1 つずつ)。
RPD-W 手法には、国が報告する品目レベルの重要度指標も組み込まれており、計算中に代表性の低い項目を「重み付けを下げる」という考えが組み込まれています(重要度指標の導出方法の詳細な概要については、運用ガイドラインの第 20 章を参照してください)および世界経済レポートの実際の規模を測定する手順)。
price.bh.unique() の bh の場合:
temppdf=prices[prices.bh == bh]
X=tempdf.loc[:, [x for x in temppdf.columns if x.startswith(('r_', 'i_'))]]y=np.log(tempdf['price']/tempdf['ppp_reg '])
wts=tempdf['imp']
wts_cpd=sm.WLS(y, X,weights=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) #X の列見出しをリストとして保存します
coef[coef == 1] = np.nan #%% exp(0)=1 だった PPP を 'np.nan' に置き換えます
print("\n","リンク要素:", "\n") print(df_bhppp ,"\n")
ふーん
地域
もし
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'], axis= 1)
ppp_regLF=ppp_regLF.pivot(index="bh",
ppp_regLF=ppp_regLF.pivot(index="bh",
列 = "国"、
値 = "ppp_linked").reset_index()
#numeraire を列 1 として列を並べ替えて出力します
print("\n","グローバル基本見出し PPP:", "\n") print(ppp_regLF ,"\n")
ふーん
国11
国1
国10
国2
国3
国4
ふーん
国5
国6
国7
国8
国9
地域の基本見出し PPP にリンク係数を乗じてグローバルにリンクされた基本見出し PPP が得られると、各国の現地通貨単位の国民経済計算支出値をウェイトまたは量として使用して集計されます。
#基本的な見出し支出値をロードします
#bh とプレフィックス c が付いた国を含める必要があります
code="bhdata_exp.csv" df_bh=pd.read_csv(code,index_col="icp_bh")
グローバル集約方法は、前のブログで説明したように、地域レベルでの PPP の集約と同じ手順に従います。 まず、基本的な見出しレベルの国民経済計算支出値を各国の重みとして順番に使用して、国のペアごとに二国間 PPP を構築します。 ラスパイレス型の二国間 PPP が各国ペアごとに計算され、その後にパーシェ型の二国間 PPP が計算されます。 ラスパイレス型およびパーシェ型の二国間 PPP の幾何平均により、データセット内の各国のペア間のフィッシャー型の二国間 PPP が得られます。
##ラスパイレスの二国間 PPP を計算する
形状 = (len(df_bh.columns),len(df_bh.columns))
lp = np.zeros(shape)#正方行列: country x countrynrow=len(lp) # 行数を取得 ncol=len(lp[0])
範囲(nrow)内の行の場合:
範囲内の列(ncol)の場合:
#weighted は、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(データ = lp_ppp、インデックス = df_bh.columns、列 =df_bh.columns
#Paasche の二国間 PPP を計算する
pa = np.transpose(np.reciprocal(lp))
pa_ppp = pd.DataFrame(データ = pa、インデックス = df_bh.columns、列 =df_bh.columns)
形状 = (len(df_bh.columns),len(df_bh.columns))
fi = np.zeros(shape)#正方行列: country x countrynrow=len(fi) # 行数を取得 ncol=len(fi[0])
範囲(nrow)内の行の場合:
範囲内の列(ncol)の場合:
fi[行][列]= nangmean([lp[行][列],pa[行][列]])
fi_ppp = pd.DataFrame(データ = fi、インデックス = df_bh.columns、列 =df_bh.columns)
次に、Gini-Eltető-Köves-Szulc (GEKS) 法がフィッシャー型の双方向 PPP のマトリックスに適用されます。 GEKS PPP は、数値または基準国を基準として各国間で計算されます。 GEKS 手続きでは直接 PPP と間接 PPP の両方が使用され、グループとしてすべての国間の相対価格が計算されるため、GEKS PPP は「多国間」とみなされます。
#GEKS 多国間 ppps の計算##以前の nangmean 関数が必要です
geks = np.zeros(shape) # ゼロの「国 x 国」行列 nrow=len(geks) # 行数を取得 ncol=len(geks[0])
範囲(nrow)内の行の場合:
範囲内の列(ncol)の場合:
geks[行][列]= nangmean(fi[行]/fi[列])
geks_vec = np.zeros(shape=(1,len(df_bhexp.columns)))# 行列ではなく ppps のベクトルが必要なので
j=len(geks_vec[0])
range(j) の列:#..国ごとに 1 つの PPP、または bhexp df の列
クレイジー_vec[:,col]=nangmean(geks[col,0]/geks[0,0]) #ge-
各行の平均値、各列はcol1の国にリベースされる
geks_ppp = np.array(geks_vec)
geks_ppp = pd.DataFrame(geks_ppp)
geks_ppp.columns = df_bh.columns
#グローバル GEKS データ フレームの再形成
クレイジー_ppp = クレイジー_ppp.melt(var_name="国",value_name="geks"
print("\n","GEKS 多国間 PPP:", "\n") print(geks_ppp ,"\n")
国
クレイジー
GEKS メソッドは、フィッシャー タイプの二国間 PPP を推移的かつ基本国不変にするために必要です。 推移性とは、任意の 2 国間の PPP が直接計算されるか、第三国を介して間接的に計算されるかに関係なく、同じである必要があることを意味します。 基準国不変とは、基準国または基準国の選択に関係なく、任意の 2 か国間の PPP が同じである必要があることを意味します。
世界的な PPP 推定プロセスの最後のステップは、再分配を伴う国別集計 (CAR) 手順の適用で構成されます。 このステップは、固定性の原則を保証するために行われます。 固定性は、特定の地域に属する国のペア間のグローバル比較における相対ボリュームが、それらが属する地域比較で確立された 2 つの国の相対ボリュームと同一である必要があることを意味します。
この原則を遵守するために、グローバル比較における地域別のボリュームの合計は、各地域の各国の GEKS 調整後のボリュームを合計することによって得られます。 これらの合計金額は、地域比較における各国の支出シェアを使用して除算されます。 最後に、各国の世界数値における PPP は、各国の名目支出をボリュームシェア調整後の支出で割ることによって間接的に導出されます。
#支出とグローバル Geks データフレームのマージ
car_df = pd.merge(volshare_df, geks_ppp, how = 'inner', on= ('country'))
#グローバルgeksを使用した総経験値の変換
car_df['inner'] =car_df['total_exp']/car_df['geks']
##geks 調整単位での地域支出総額の計算
car_df['exp_gek_reg'] =car_df['exp_gek'].groupby(volshare_df['region']).transform('sum')
地域のボリュームシェアを総支出に適用し、PPP の数値に基づいて再計算する
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:", "\n") print(car_df.PPPglobal_num ,"\n")
国
PPP
上の例では、グローバル PPP を計算するための主な手順を紹介しました。 ICP 方法論全体に関する情報は、ICP Web サイトで提供されます。 さらに詳しい議論が必要な場合は、[email protected] までご連絡ください。
世界銀行開発データグループ (DECDG) リサーチアナリスト