一物一価と購買力平価#

in English or the language of your choice.

import japanize_matplotlib
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import py4macro
import statsmodels.formula.api as smf

# numpy v1の表示を使用
np.set_printoptions(legacy='1.21')
# 警告メッセージを非表示
import warnings
warnings.filterwarnings("ignore")

はじめに#

通常,経済の生活水準の指標には一人当たりGDPが使われる。データはそれぞれの国が集めており,日本では内閣府がGDP関連のデータを公表している。当たり前だが,GDPなどの変数はその経済の貨幣単位で表される。自国通貨建てのデータは国内で使うには十分だが,他国と比較する場合は共通の貨幣で表す必要がある。例えば,日本と米国の生活水準や政府の教育関連支出額の違いを知るためには,両国のデータを円もしくは米ドルに返還する必要がある。また,変数の水準だけではなく成長率を考える際も同様である。

では,ある通貨を他の通貨単位に換算する際,新聞やインターネットで見る市場為替レートを使えば良いのだろうか。答えは否である。その理由を理解するのが本章の1つの目的となる。異なる経済のデータを比べる際は購買力平価(PPP; Purchasing Power Parity)と呼ばれる「為替レート」を使う必要がある。実際,py4macroモジュールに含まれるデータセットpwt(Penn World Table)はPPPで換算したマクロデータを使っている。

以下では、まずPPPと関連が深い一物一価の法則について国内のデータを使い考える。その後,経済間のデータとしてビッグマック(マクドナルドのハンバーガー)のデータを使い経済間での一物一価を考察する。また一般物価水準についても考察し,経済間で一般物価水準が異なる要因として所得水準を考え,所得水準の影響が大きいことを明らかにする。特に,所得水準の影響により,市場為替レートを使い計算した一人当たりGDPの比較をおこなうと,経済間の所得格差が歪められることになる。そのような歪みを排除して経済間の生活水準を比べるためには,PPPレートを使う必要があることを示す。

Note

私たちの周りには価格が法的に定められたものがある。例えば,

  • 鉄道運賃(JR,通学定期,JR西日本,幹線,高校,20km):38,650円(2023年4月)

この価格は鉄道事業法(昭和61年法律第92号)に基づいている。以下では,法律ではなく市場によって価格が決まる財・サービスを考える。

国内での一物一価#

説明#

一物一価の法則とは,市場の働きにより同質財・サービスは同じ価格で販売される,ということを意味する。直感的に説明するために,A市とB市で同質財が販売されているとしよう(A市を1つの市場,B市をもう1つの市場と考えると良いだろう)。話を簡単にするために,輸送費用,取引費用や価格の硬直性など市場の「摩擦」が無い理想的な状況の下,A市では80円で,B市では100円で販売されているとしよう。B市で高値で商品が売れるのであれば,A市で安く購入してB市で80円<価格<100円の価格で売れば利潤を得ることができる。例えば,ある企業はA市で財をX個仕入れて,それをB市で販売する場合,利潤\(\pi\)は次式となる。

(56)#\[ \pi=p_BX-p_AX=\left(p_B-p_A\right)X>0 \]

ここで\(p_BX\)が総収入であり,\(p_AX\)が総費用である。\(p_B<p_A\)が成立する限り\(\pi>0\)となる。一方で,利潤があれば,同様のことをする企業が参入する。この様な裁定取引により,A市での需要が増加し価格が上昇する。一方,B市では供給が増えるので価格は下落する。参入は利潤がなくなるまで続くことになり,最終的には財の価格は収斂することになる。即ち,

(57)#\[ \pi=0\quad\Rightarrow\quad p_B=p_A \]

このように,一物一価は非常に直感的な概念である。では,データではどのようになっているのだろうか。以下では小売物価統計調査(動向編)のデータを用いる。使うデータはチョコレート,アイスクリーム,ガソリンの2022年平均価格であり,pandasを使ってe-Stat(政府統計の総合窓口)から直接ダウンロードする。

Note

手動でダウンロードする場合は,次の順番でリンクを辿っていけば良いだろう。

  • 小売物価統計調査(動向編)調査の結果をクリック → 全品目:平成13年(2001年)~2022年をクリック → 2022年報をクリック → 統計表をクリック → 2022年をクリック

    • チョコレートとアイスクリームのデータは【09】「1701 ようかん」 「1784 ゼリー」の右側にあるEXCELをクリックするとダウンロードできる。

    • ガソリンは【26】「7691 鉄道運賃」 「7413 通信料」の右側にあるEXCELをクリックするとダウンロードできる。

チョコレート#

板チョコレート,50~55g,「明治ミルクチョコレート」,「ロッテガーナミルクチョコレート」又は「森永ミルクチョコレート」

このチョコレートの定義に従って作成されたデータをダウンロードし,変数chocoDateFrameとして割り当てる。

url_choco = 'https://www.e-stat.go.jp/stat-search/file-download?statInfId=000040047298&fileKind=0'
choco = pd.read_excel(url_choco, sheet_name='1761チョコレート',
                      skiprows=15, usecols=[8,10])

最初の5行を表示してみよう。

choco.head()
地域 年平均
0 札幌市 227
1 函館市 211
2 旭川市 209
3 青森市 220
4 八戸市 225

列ラベルが全角になっている。そのままでも良いが,ここでは次の様に半角に変更する。

choco.columns = ['area', 'price']

次にデータ型や欠損値を調べてみよう。

choco.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 81 entries, 0 to 80
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   area    81 non-null     object
 1   price   81 non-null     int64 
dtypes: int64(1), object(1)
memory usage: 1.4+ KB

どのような地域が含まれているか確認してみよう。

choco['area'].tolist()
['札幌市',
 '函館市',
 '旭川市',
 '青森市',
 '八戸市',
 '盛岡市',
 '仙台市',
 '秋田市',
 '山形市',
 '福島市',
 '郡山市',
 '水戸市',
 '日立市',
 '宇都宮市',
 '小山市',
 '前橋市',
 'さいたま市',
 '熊谷市',
 '川口市',
 '所沢市',
 '千葉市',
 '佐倉市',
 '浦安市',
 '東京都区部',
 '八王子市',
 '立川市',
 '府中市',
 '横浜市',
 '川崎市',
 '相模原市',
 '横須賀市',
 '新潟市',
 '長岡市',
 '富山市',
 '金沢市',
 '福井市',
 '甲府市',
 '長野市',
 '松本市',
 '岐阜市',
 '静岡市',
 '浜松市',
 '富士市',
 '名古屋市',
 '岡崎市',
 '津市',
 '松阪市',
 '大津市',
 '京都市',
 '大阪市',
 '堺市',
 '枚方市',
 '東大阪市',
 '神戸市',
 '姫路市',
 '西宮市',
 '伊丹市',
 '奈良市',
 '和歌山市',
 '鳥取市',
 '松江市',
 '岡山市',
 '広島市',
 '福山市',
 '山口市',
 '宇部市',
 '徳島市',
 '高松市',
 '松山市',
 '今治市',
 '高知市',
 '福岡市',
 '北九州市',
 '佐賀市',
 '長崎市',
 '佐世保市',
 '熊本市',
 '大分市',
 '宮崎市',
 '鹿児島市',
 '那覇市']

兵庫県からは神戸市,姫路市,西宮市,伊丹市が含まれている。

記述統計も確認しよう。

choco['price'].describe()
count     81.000000
mean     217.604938
std        8.204692
min      192.000000
25%      212.000000
50%      218.000000
75%      223.000000
max      242.000000
Name: price, dtype: float64

最安値は192円,最高値は242円であり,その差は50円!

価格の分布を調べるために,平均からの乖離率を計算しよう。

(58)#\[ \pi_i =\frac{P_i}{\overline{P}}-1 \]

ここで\(i\)は地域を表しており,\(\overline{P}\)\(P_i\)の平均である。新たな列mean_deviationとして追加しよう。

choco['mean_deviation'] =  choco['price'] / choco['price'].mean() - 1
choco.plot.hist(y='mean_deviation', bins=12, ec='white')
pass
_images/53993ed8ed40783df0e598458122beb991703b157ed95ad8efe7d840ac064376.png

0は平均と等しいという意味である。0.10は平均より10%高い価格であり,-0.10は平均より10%安いチョコレートである。明らかに一物一価は成立していない。

価格のばらつき具合を確認するために標準偏差を計算しよう。

print(
    choco['mean_deviation'].std()
)
0.03770453161138014

乖離率(58)の標準偏差は次式で定義される変動係数(Coefficient of Variation)と等しい。

(59)#\[ P_iの変動係数=\frac{P_iの標準偏差}{P_iの平均} \]

試しに変動係数を直接計算してみよう。

print( 
    choco['price'].std() / choco['price'].mean() 
)
0.03770453161138012

同じ値である。変動係数の利点は,変数の平均で除している為,単位(ここでは,円)や平均の大小に関係なく,異なるデータのばらつき具合を比べることができることである。

最後に,チョコレートが最安値の地域はどこか確認してみよう。

cond = ( choco['price']==choco['price'].min() )
choco.loc[cond,:]
area price mean_deviation
7 秋田市 192 -0.117667

秋田市ではチョコレートが平均よりも約11.8%も安い。(甘党の楽園かも!?)

アイスクリーム#

アイスクリームの定義

バニラアイスクリーム,カップ入り(110mL入り),「ハーゲンダッツ バニラ」

データをダウンロードして,変数iceに割り当てよう。

url_ice = 'https://www.e-stat.go.jp/stat-search/file-download?statInfId=000040047298&fileKind=0'
ice = pd.read_excel(url_ice, sheet_name='1782アイスクリーム', 
                    skiprows=15, usecols=[8,10])

最初の5行の表示

ice.head()
地域 年平均
0 札幌市 296
1 函館市 286
2 旭川市 281
3 青森市 260
4 八戸市 258

列ラベルの変更

ice.columns = ['area', 'price']

データの確認

ice.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 81 entries, 0 to 80
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   area    81 non-null     object
 1   price   81 non-null     int64 
dtypes: int64(1), object(1)
memory usage: 1.4+ KB

記述統計

ice['price'].describe()
count     81.000000
mean     263.888889
std       18.672172
min      210.000000
25%      258.000000
50%      267.000000
75%      276.000000
max      300.000000
Name: price, dtype: float64

最安値は210円,最高値は300円であり,その差は90円!(著者のように)ハーゲンダッツ好きにとっては無視できない価格差である。

ice['mean_deviation'] =  ice['price'] / ice['price'].mean() - 1

ice.plot.hist(y='mean_deviation', bins=16, ec='white')
pass
_images/5c6d332074ce25d1c467170d27c118cb6eb7a00d1b0c4306e29a3e7f5db4ccb8.png

安いところは平均よりも約20%もお得!いずれにしろ,一物一価は成立していない。

価格のばらつき具合を確認するために標準偏差(変動係数)を計算してみよう。

print(
    ice['mean_deviation'].std()
)
0.0707577036906862

チョコレートと比較すると価格のばらつきが大きい。

安い地域と高い地域を確認してみよう。

ice.sort_values(by='price', ascending=False)
area price mean_deviation
80 那覇市 300 0.136842
0 札幌市 296 0.121684
35 福井市 289 0.095158
60 松江市 288 0.091368
1 函館市 286 0.083789
... ... ... ...
15 前橋市 232 -0.120842
21 佐倉市 223 -0.154947
22 浦安市 216 -0.181474
37 長野市 211 -0.200421
38 松本市 210 -0.204211

81 rows × 3 columns

この順番を見て何か言えることがあるだろうか。考えてみよう!

ガソリン#

ガソリンの定義

レギュラー・ガソリン1L

変数gasDataFrameとして割り当てよう。

url_gas = 'https://www.e-stat.go.jp/stat-search/file-download?statInfId=000040047335&fileKind=0'
gas = pd.read_excel(url_gas, sheet_name='7301ガソリン', 
                    skiprows=15, usecols=[8,10])

最初の5行の表示

gas.head()
地域 年平均
0 札幌市 167
1 函館市 167
2 旭川市 169
3 青森市 166
4 八戸市 164

列ラベルの変更

gas.columns = ['area', 'price']

データの詳細

gas.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 81 entries, 0 to 80
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   area    81 non-null     object
 1   price   81 non-null     int64 
dtypes: int64(1), object(1)
memory usage: 1.4+ KB

記述統計

gas['price'].describe()
count     81.000000
mean     170.604938
std        4.718790
min      160.000000
25%      168.000000
50%      170.000000
75%      174.000000
max      184.000000
Name: price, dtype: float64

最安値は160円,最高値は184円であり,その差は24円。平均からの乖離のヒストグラムをプロットしよう。

gas['mean_deviation'] = gas['price'] / gas['price'].mean() - 1

gas.plot.hist(y='mean_deviation', ec='white')
pass
_images/f49b633f4424ef7ffc06c0c654b51cf0fe6ac677a1c2839d5638480e53f6c158.png

平均から高くても約7.9%,安くても約6.2%程しか違わない。標準偏差(変動係数)を計算してみよう。

print(
    gas['mean_deviation'].std()
)
0.02765916186178425

アイスクリームよりも価格のばらつきは小さい。直感的に,ガソリンスタンドへは車やバイクで行くことになり,消費者が価格を比較し少しでも安いスタンドへ行く費用が安いためかも知れない。

最高値の地域は?

cond = ( gas['price']==gas['price'].max() )
gas.loc[cond,:]
area price mean_deviation
77 大分市 184 0.078515

結論#

データを見る限り一物一価の法則は成立していない。主な理由は,前提となっている条件が満たされていないためである。冒頭でA市とB市の例を挙げたが,離れている場合は輸送費用がかかる。また,距離が遠くなれば情報の収集にもコストが掛かることになるだろうし,市場が異なれば取引費用も違ってくるかも知れない。このような費用を財1単位当たりで\(\tau\)と表すと,利潤(56)は次式となる。

(60)#\[ \pi=p_BX-p_AX-\tau X=\left(p_B-p_A-\tau\right)X \]

ここで,\(\tau X\)が輸送費用などを捉えている。利潤がゼロになるまで企業が参入したとしても,

(61)#\[ \pi=0\quad\Rightarrow\quad p_B=p_A+\tau \]

となり,A市の財ががB市よりも安いままの状態が続くことになる。

経済間での一物一価:Big Mac#

はじめに#

国内市場では一物一価の法則は成立しないことが分かった。では,経済間ではどうだろうか。国際貿易の輸送費用は更に高く,国境を跨ぐ情報伝達も時間がかかり,ビジネス慣例が違うことにより取引費用もかさむだろう。更には,そもそも貿易されない財・サービス(例えば,理髪)が存在し,裁定取引が成立しない。このように考えると,経済間でも一物一価の法則が成り立たないことは明らかだろう。

しかし,2つ疑問点が残る。第1に,経済間における価格の散らばりの程度はどれくらいなのだろうか。国内市場よりも経済間の価格差の方が大きいと推測できるが,変動係数で考えるとどれほどの差が存在するのだろうか。2倍もしくは10倍だろうか?第2に,経済間の所得格差は大きく,日本の一人当たりGDPの5%に満たない国も存在する(発展会計を参照)。所得格差は財・サービスの需要の大きさに反映される。正常財であれば,所得が高い経済の需要は高くなり,価格は高くなるのではないかと想像できる。また所得が高い国では生産性も高い。実際,生産性が高く(従って,所得が高い)経済では価格が高い傾向になることが知られている。この節では,世界中で概ね同質財と考えられるマクドナルドのハンバーガーBig Macを取り上げ,これらの問いを考察する。

Big Macの違い

国毎にBig Macは多少の違いがあるようだ。このリンクを参照

データ#

py4etricsに含まれるデータ・セットbigmacを使って議論を進める。まず含まれる変数の定義を表示してみよう。

py4macro.data('bigmac', description=True)
    | `year`:          年(2000年〜)
    | `country`:       国名
    | `iso`:           ISO国コード
    | `currency_code`: 通貨コード
    | `price_local`:   Big Macの価格(自国通貨単位)
    | `exr`:           名目為替レート(自国通貨単位/米ドル)
    | `gdppc_local`:   名目一人当たりGDP(自国通貨単位)
    |
    | * 年次データ
    |
    | <出典>
    | https://github.com/TheEconomist/big-mac-data (Copyright The Economist)

データセットを変数bigmacに割り当てて,最初の5行を表示してみる。

bigmac = py4macro.data('bigmac')
bigmac.head()
year country iso currency_code price_local exr gdppc_local
0 2000 Argentina ARG ARS 2.50 1.00 9283.18
1 2000 Australia AUS AUD 2.59 1.68 32394.17
2 2000 Brazil BRA BRL 2.95 1.79 6029.89
3 2000 Canada CAN CAD 2.85 1.47 31222.68
4 2000 Switzerland CHE CHF 5.90 1.70 61942.36

このでは2023年のデータを使う。2023年のデータだけを抽出しbigmacに再割り当てしよう。

cond = ( bigmac['year']==2023 )
bigmac = bigmac.loc[cond,:].copy()

それぞれの変数のデータ型と欠損値を確認しよう。

bigmac.info()
<class 'pandas.core.frame.DataFrame'>
Index: 72 entries, 1159 to 1230
Data columns (total 7 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   year           72 non-null     int64  
 1   country        72 non-null     object 
 2   iso            72 non-null     object 
 3   currency_code  72 non-null     object 
 4   price_local    72 non-null     float64
 5   exr            72 non-null     float64
 6   gdppc_local    72 non-null     float64
dtypes: float64(3), int64(1), object(3)
memory usage: 4.5+ KB

一物一価#

これから行う作業を説明するために変数を定義しよう。

  • \(P_i=\) \(i\)国のBig Macの価格(自国通貨)

    • \(P_{\text{JP}}=\) 日本のBig Macの価格(円)

    • \(P_{\text{US}}=\) 米国のBig Macの価格(米ドル)

    • bigmacの列price_localに対応

  • \(e_i=\) 名目為替レート(\(i\)国通貨/米ドル)

    • \(e_{\text{JP}}=\) 名目為替レート(円/米ドル)

    • \(e_{\text{US}}=1\)

    • bigmacの列exrに対応

これらの変数を使うと,\(i\)国のBig Macの米ドル表示価格は次式で計算できる。

(62)#\[ i\text{国のBig Macのドル価格:}\;\dfrac{P_i}{e_i} \]

一物一価が成立する場合は\(\dfrac{P_i}{e_i}\)\(P_{\text{US}}\)(ドル表示)が等しくなる。

Hint

単位を確認することで為替レートが入る数式を簡単に理解できる。例えは,\(c_i\)\(i\)国の通貨単位として,(62)の右辺を単位で表してみよう。

\[\dfrac{c_i}{c_i/\$}=\$\]

となり,単位が米ドルになっているのが分かる。また,式(64)の右辺を考えてみよう。

\[e_{i\text{JP}}=\dfrac{c_i/\$}{¥/\$}=\frac{c_i}{¥}\]

1円に対する\(i\)国の貨幣単位になっている。次に,実質為替レート(73)の右辺を単位で表してみよう。

\[\dfrac{\dfrac{c_i}{\$}$}{c_i}\]

となり,貨幣単位がキャンセルされて無くなってしまう。実質為替レートは,実質変数であり貨幣単位から独立しているためである。

このまま\(i\)国と米国を考えて議論を進めることもできるが,以下では円を基準に置いて分析を進めよう。その場合,\(i\)国のBig Macの円表示価格は次式で計算できる。

(63)#\[ i\text{国のBig Macの円価格} =\dfrac{P_i}{e_{i\text{JP}}} \]

ここで

(64)#\[ e_{i\text{JP}}\equiv\frac{e_i}{e_{\text{JP}}} \qquad\left(\text{単位:} \dfrac{i\text{国の通貨}/\text{米ドル}}{\text{円}/\text{米ドル}} =\dfrac{i\text{国の通貨}}{\text{円}} \right) \]

\(i\)国通貨/円の市場為替レートである。\(\dfrac{P_i}{e_{iJP}}\)\(P_{\text{JP}}\)(円表示)が等しくなると一物一価の成立となるが,そうならないことをデータで確認することになる。

国内財と同様に,平均価格を基準にし乖離率を考えることもできるが,日本と比べてどれだけ違うかを計算するために,ここでは日本のBig Macの価格に対しての乖離率を考える。

(65)#\[ i\text{国価格の日本価格からの乖離率(円)}=\dfrac{P_i/e_{i\text{JP}}}{P_{\text{JP}}}-1 \]

まず式(65)を計算するために,変数ejpに円/ドル為替レートを割り当てよう。

cond = ( bigmac['iso']=='JPN' )
ejp = bigmac.loc[cond,'exr'].iloc[0]
print(ejp)
142.08

ejplocal_priceexrを使い各国のBig Macを円表示に変換し,新たな列yen_priceとしてbigmacに追加しよう。

bigmac['price_yen'] = ( bigmac['price_local']/bigmac['exr'] )*ejp

日本の価格を確認してみよう。

cond = ( bigmac['iso']=='JPN' )
bigmac.loc[cond,['price_local','price_yen']]
price_local price_yen
1195 450.0 450.0

米国の価格はどうだろう。

cond = ( bigmac['iso']=='USA' )
bigmac.loc[cond,['price_local','price_yen']]
price_local price_yen
1227 5.58 792.8064

日本の価格450円と比べると,米国でのBig Macの価格は少し高く感じる。記述統計を確認してみよう。

bigmac['price_yen'].describe()
count      72.000000
mean      647.093073
std       169.651670
min       339.076894
25%       505.350594
50%       666.820588
75%       767.585089
max      1098.155390
Name: price_yen, dtype: float64

最安値339と最高値1098には大きな差(759円)があることが分かる。平均価格647円は日本の価格450円を上回っている。

次に,日本の価格からの乖離率を計算しよう。

# 日本の価格
cond = ( bigmac['iso']=='JPN')
yen_price_jpn = bigmac.loc[cond,'price_yen'].iloc[0]

# 米国の価格に対してi国の価格の乖離率
bigmac['price_yen_deviation'] = bigmac['price_yen'] / yen_price_jpn - 1

ヒストグラムをプロットする。

bigmac.plot.hist(y='price_yen_deviation', ec='white')
pass
_images/bf820e4d476f49a71253ed9cc3823f735d9ae0e7a220496869ffcb69312f4d9b.png

0.0が日本となる。一番高い国を調べてみよう。

cond = ( bigmac['price_yen'] == bigmac['price_yen'].max() )
bigmac.loc[cond,['country','price_yen','price_yen_deviation']]
country price_yen price_yen_deviation
1168 Switzerland 1098.15539 1.440345

Switzerlandの価格は約1098円となっている。次に,価格が最も低い国を表示してみよう。

cond = ( bigmac['price_yen']==bigmac['price_yen'].min() )
bigmac.loc[cond,['country','price_yen','price_yen_deviation']]
country price_yen price_yen_deviation
1224 Taiwan 339.076894 -0.246496

Taiwanが一番安く,日本より約24.6%も安価である。

明らかにBig Macの一物一価は成立していない。

価格のばらつき具合を確認し,上で確認した国内財の価格と比較するために,変動係数(平均からの乖離の標準偏差と同じ)を計算しよう。

print(
    bigmac['price_yen'].std() / bigmac['price_yen'].mean()
)
0.26217506693057535

国内のチョコレート,アイスクリーム,ガソリン価格の標準偏差よりも非常に大きな値となっている。

理由として次のことが言えるだろう。

  • Big Macは消耗財であり,貿易されずに生産された地域で消費される。言い換えると,消耗財が故に輸送費用は非常に高い非貿易財である。

  • 非貿易財の場合,国境を超えた競争が妨げられる。神戸のマクドナルドは,ロンドンやシンガポールのマクドナルドと価格競争をしているとは言い難い。

所得の影響#

価格が最も高い15カ国国をリストアップしてみよう。

bigmac_sorted = (
                 bigmac.sort_values('price_yen',ascending=False)
                    .loc[:,['country','price_yen','price_yen_deviation']]
)
bigmac_sorted.head(15)
country price_yen price_yen_deviation
1168 Switzerland 1098.155390 1.440345
1207 Norway 983.106806 1.184682
1226 Uruguay 974.413346 1.165363
1193 Italy 908.570106 1.019045
1180 Finland 900.737605 1.001639
1160 Argentina 851.628372 0.892507
1174 Germany 836.511097 0.858914
1206 Netherlands 834.944597 0.855432
1181 France 830.245096 0.844989
1179 Euro area 827.112096 0.838027
1221 Sweden 814.957088 0.811016
1177 Spain 814.580095 0.810178
1175 Denmark 802.961253 0.784358
1191 Ireland 798.915093 0.775367
1227 United States 792.806400 0.761792

全て所得が高い先進国となっている。価格が最も安い10カ国を確認してみよう。

bigmac_sorted.tail(10)
country price_yen price_yen_deviation
1185 Hong Kong 419.023683 -0.068836
1204 Malaysia 414.360612 -0.079199
1225 Ukraine 403.948396 -0.102337
1212 Philippines 400.954028 -0.108991
1230 South Africa 398.666873 -0.114074
1228 Venezuela 386.278992 -0.141602
1176 Egypt 372.141633 -0.173019
1190 India 361.035298 -0.197699
1189 Indonesia 358.026525 -0.204385
1224 Taiwan 339.076894 -0.246496

貧しい国が並んでいる。実は,この結果は偶然ではない。Big Macの価格と所得の散布図を使い相関関係を確かめてみるために,円表示の一人当たりGDPを計算しよう。新たな列gdppc_yenを作成する

bigmac['gdppc_yen'] = ( bigmac['gdppc_local']/bigmac['exr'] )*ejp

散布図をプロットしよう。

ax = bigmac.plot.scatter(x='gdppc_yen', y='price_yen', logx=True)
ax.set_xlabel('一人当たり実質GDP(円,常用対数)', fontsize=15)
ax.set_ylabel('Big Mac価格(円)', fontsize=15)
pass
_images/eec88622cdd4dc65220bf4aa9a3823cbd8942f088efe9dabefd4bcc5e8cf5844.png

明らかに所得が高い国ではBig Macの価格は高くなっている。理由は,市場為替レートを使い円に変換していることに起因する。この現象の経済学的な含意については後ほど議論することにする。

Note

価格水準と所得の正の関係は経済間だけではなく,国内のデータでも観測されている。Cheung and Fujii (2014)は日本のデータを使い,都道府県の価格と所得の間に正の相関があることを報告している。

購買力平価と物価水準の分布#

PPPとは#

前節の分析から分かったことは,市場為替レートで各国のBig Macの価格を共通貨幣単位(上の例では円)で表し価格を比べてみると,一物一価は成立していないということである。また,国内財と比較して分布の幅は大きいことも確認できた。今度は逆に,Big Macの一物一価が成立する場合の交換レートはどのように定義されるかを考えてみよう。

(66)#\[ \frac{P_i}{e_{i}^{\text{BM}}}=P_{\text{US}} \]

\(e_{i}^{\text{BM}}\)がBig Macの一物一価レートであり,単位は「\(i\)国通貨/米ドル」である。左辺では\(e_{i}^{\text{BM}}\)により\(i\)国通貨表示の価格\(P_i\)が米ドルに換算され,右辺の\(P_{\text{US}}\)と等価となっている。この式を書き換えると

(67)#\[ e_{i}^{\text{BM}}=\frac{P_i}{P_{\text{US}}} \]

となる。

Big Macだけではなく財・サービスの種類を大幅に広げて,上述の考えを適用したのが購買力平価(PPP, Purchasing Power Parity)レートである。それぞれの経済で消費される同じような典型的な共通の財・サービスを集めて大きなバスケット(大きな籠)に入れることを想像しよう。多くの財・サービスが入ったバスケットを1つの財(合成財)として考え,バスケット財と呼ぶことにしよう。バスケット財に含まれる様々な財の価格は各経済で異なることになり,その結果,バスケット財の価格も異なる。バスケット財には多種多様の財・サービスが含まれているため,その価格を各国の一般物価水準と考えることができる。購買力平価(PPP)レートとは,バスケット財が等価となる為替レートとして算出される。次式は\(i\)国の対米国PPPレートである。

(68)#\[ \varepsilon_i=\frac{P_i}{P_{\text{US}}} \]
  • \(P_i\)\(i\)国の自国通貨価格で表した一般物価水準(バスケット財の価格)

  • \(P_{\text{US}}\):米国の自国通貨価格(米ドル)で表した一般物価水準(バスケット財の価格)

  • \(\varepsilon_i\)\(i\)国のPPPレート(\(i\)国通貨/米ドル)

(68)について4つ説明を加える。

  1. 右辺の単位は\(i\)国の通貨/ドルとなり,\(e_i^{\text{BM}}\)と同じ単位である。実際,\(\varepsilon_i\)は為替レートの一種であり,市場為替レートと異なるため特別な呼称「購買力平価レート」が付いている。

  2. 上の式は\(P_i/\varepsilon_i=P_{\text{US}}\)と書くことができる。この式の右辺は米国のバスケット財の価格,即ち,一般物価水準であり,左辺は\(i\)国のバスケット財,即ち,一般物価水準を米ドルに換算した価格である。等号は,それらが等しいことを意味しており,その意味では,バスケット財の一物一価が成立する場合の為替レートということになる。まとめると,PPPレートは次のように解釈することができる。

    購買力平価レート\(\varepsilon_i\)は,バスケット財の一物一価が成立する(一般物価水準が同じになる)ために必要な為替レート(注意:バスケット財に含まれる個々の財・サービスの価格が全て等しいとは限らない。)

  3. 次の変数を考えよう。

    • \(Q_i\)\(Q_{\text{US}}\)\(i\)国と米国でのバスケット財の数量

    • \(P_i\)\(P_{\text{US}}\)\(i\)国と米国でのバスケット財の価格

    • \(M_i\)\(i\)国の自国通貨の数量

    • \(M_{\text{US}}\):米ドルの数量

    それぞれの通貨はバスケット財の支出に使われる場合を考えると次の関係になる。

    (69)#\[ M_i=P_iQ_i,\qquad M_{\text{US}}=P_{\text{US}}Q_{\text{US}} \]

    またバスケット財で測ったそれぞれの通貨の購買力は次式で表される。

    (70)#\[ \frac{M_i}{P_i}=Q_i,\qquad \frac{M_{\text{US}}}{P_{\text{US}}}=Q_{\text{US}} \]

    それぞれの通貨の購買力が等しくなる場合,\(Q_i=Q_{\text{US}}\)が成立する。即ち,

    (71)#\[ \frac{M_i}{P_i}=\frac{M_{\text{US}}}{P_{\text{US}}} \qquad\Rightarrow\qquad \frac{M_i}{M_{\text{US}}}=\frac{P_i}{P_{\text{US}}} \]

    となる。右の式の左辺は,1米ドルと\(i\)国通貨の交換レート(単位は\(i\)国通貨/1米ドル)を表している。それを\(\varepsilon_i\)と置き換えるとPPPレート

    (72)#\[ \varepsilon_i=\frac{P_i}{P_{\text{US}}} \]

    となる。このことから次のように解釈できる。

    購買力平価レート\(\varepsilon_i\)は2つの通貨の購買力を等しくする交換レート

  4. 実質為替レートは次式で与えられる。

    (73)#\[ \eta_i=\frac{e_iP_{\text{US}}}{P_i}=\frac{e_i}{\varepsilon_i} \]

    ここで\(\varepsilon_i\)は式(68)で与えられるPPPレートであり,\(e_i\)は市場為替レートである。更に,

    (74)#\[ \eta_i=1 \quad\Leftrightarrow\quad e_i=\varepsilon_i \]

    が成立することになる。即ち,実質為替レートが1の場合に\(e_i=\varepsilon_i\)となり,「購買力平価が成立した」という。

Note

PPPレートは次のようにも解釈できる。式(73)(73)から,PPPの下では次式が成立する。

(75)#\[ 1=\frac{P_i/\varepsilon_i}{P_{\text{US}}} \]

分子の\(P_i\)の単位は「\(i\)国の通貨」であり,\(\varepsilon_i\)の単位は「\(i\)国の通貨/ドル」となるため,分子の単位はドルとなることが分かる(\(i\)国の通貨単位がキャンセルされる)。分母の単位はもちろん米ドルである。更に,次のように書き換えよう。

(76)#\[ 1=\frac{1万ドル/P_{\text{US}}}{1万ドル/(P_i/\varepsilon_i)} \]

分子は1万ドルで米国のバスケット財をいくつ購入できるかを表しており,それが米ドルの購買力である。同様に,分母は1万ドルで購入できる\(i\)国のバスケット財の数量を表し,\(i\)国のバスケット財で測った米ドルの購買力となる。即ち,右辺は1万ドルの米国での購買力と\(i\)国での購買力の割合となる。右辺が1と等しいということは,1万ドルの米国での購買力と\(i\)国での購買力は同じだということを意味する。

以上の説明から,一物一価の法則と購買力平価が密接に関係していることは直感的に理解できるだろう。以下では,バスケット財の価格は経済間で大きく異なり,購買力平価は成立していないことを示す。更には,その原因と含意についても考察することにする。

PPPレートと市場為替レートのデータ#

使用するデータ#

経済間のバスケット財の価格の違いを確認するために,py4macroモジュールに含まれるPenn World Tableのデータセットを使う。

pwt = py4macro.data('pwt')

変数の定義を確認しておこう。

py4macro.data('pwt', description=True)
Variable definition
Identifier variables NaN
countrycode 3-letter ISO country code
country Country name
currency_unit Currency unit
year Year
Real GDP, employment and population levels NaN
rgdpe Expenditure-side real GDP at chained PPPs (in mil. 2017US$)
rgdpo Output-side real GDP at chained PPPs (in mil. 2017US$)
pop Population (in millions)
emp Number of persons engaged (in millions)
avh Average annual hours worked by persons engaged
hc Human capital index, based on years of schooling and returns to education; see Human capital in PWT9.
Current price GDP, capital and TFP NaN
ccon Real consumption of households and government, at current PPPs (in mil. 2017US$)
cda Real domestic absorption, (real consumption plus investment), at current PPPs (in mil. 2017US$)
cgdpe Expenditure-side real GDP at current PPPs (in mil. 2017US$)
cgdpo Output-side real GDP at current PPPs (in mil. 2017US$)
cn Capital stock at current PPPs (in mil. 2017US$)
ck Capital services levels at current PPPs (USA=1)
ctfp TFP level at current PPPs (USA=1)
cwtfp Welfare-relevant TFP levels at current PPPs (USA=1)
National accounts-based variables NaN
rgdpna Real GDP at constant 2017 national prices (in mil. 2017US$)
rconna Real consumption at constant 2017 national prices (in mil. 2017US$)
rdana Real domestic absorption at constant 2017 national prices (in mil. 2017US$)
rnna Capital stock at constant 2017 national prices (in mil. 2017US$)
rkna Capital services at constant 2017 national prices (2017=1)
rtfpna TFP at constant national prices (2017=1)
rwtfpna Welfare-relevant TFP at constant national prices (2017=1)
labsh Share of labour compensation in GDP at current national prices
irr Real internal rate of return
delta Average depreciation rate of the capital stock
Exchange rates and GDP price levels NaN
xr Exchange rate, national currency/USD (market+estimated)
pl_con Price level of CCON (PPP/XR), price level of USA GDPo in 2017=1
pl_da Price level of CDA (PPP/XR), price level of USA GDPo in 2017=1
pl_gdpo Price level of CGDPo (PPP/XR), price level of USA GDPo in 2017=1
Data information variables NaN
i_cig 0/1/2/3/4: relative price data for consumption, investment and government is extrapolated (0), benchmark (1), interpolated (2), ICP PPP timeseries: benchmark or interpolated (3) or ICP PPP timeseries: extrapolated (4)
i_xm 0/1/2: relative price data for exports and imports is extrapolated (0), benchmark (1) or interpolated (2)
i_xr 0/1: the exchange rate is market-based (0) or estimated (1)
i_outlier 0/1: the observation on pl_gdpe or pl_gdpo is not an outlier (0) or an outlier (1)
i_irr 0/1/2/3: the observation for irr is not an outlier (0), may be biased due to a low capital share (1), hit the lower bound of 1 percent (2), or is an outlier (3)
cor_exp Correlation between expenditure shares of the country and the US (benchmark observations only)
statcap Statistical capacity indicator (source: World Bank, developing countries only)
Shares in CGDPo NaN
csh_c Share of household consumption at current PPPs
csh_i Share of gross capital formation at current PPPs
csh_g Share of government consumption at current PPPs
csh_x Share of merchandise exports at current PPPs
csh_m Share of merchandise imports at current PPPs
csh_r Share of residual trade and GDP statistical discrepancy at current PPPs
Price levels, expenditure categories and capital NaN
pl_c Price level of household consumption, price level of USA GDPo in 2017=1
pl_i Price level of capital formation, price level of USA GDPo in 2017=1
pl_g Price level of government consumption, price level of USA GDPo in 2017=1
pl_x Price level of exports, price level of USA GDPo in 2017=1
pl_m Price level of imports, price level of USA GDPo in 2017=1
pl_n Price level of the capital stock, price level of USA in 2017=1
pl_k Price level of the capital services, price level of USA=1

以下の分析では次の変数を使う。

  • xr:市場為替レート(名目,\(i\)国通貨/米ドル)

  • pl_gdpocgdpoの計算に使った相対物価水準(米ドル,2017年の米国の値=1

  • cgdpo:産出データに基づいGDP(2017年百万米ドル)

    • 時系列的には名目(ある年での経済間の生産能力(水準)の比較に適している)

    • pl_gdpoを使って計算している

Note

cgdpoは産出データに基づいたGDPだが,その代わりに支出データに基づいたcgdpeを使うこともできる。その場合,相対物価水準の変数にはpl_daを使う必要がある。試してみよう!

pwtの中にはPPPレートのデータは含まれていないが,xrpl_gdpoを使い次のように計算することができる。pl_gdpoは次式に従い計算されている。

(77)#\[ \text{(列 pl_gdpo)}=\frac{\epsilon_i}{e_i} =\frac{P_i}{P_{\text{US}}e_i} \]

ここで\(\epsilon_i\)は式(68)で与えられるPPPレートであり,\(e_i\)は市場為替レートとなる。従って,\(e_i\)に列xrを使い次式でPPPレートを計算することができる。

(78)#\[ \epsilon_i=\text{(列 pl_gdpo)}\times\text{(列 xr)} \]

この式に従って,新たな列ppppwtに追加しよう。

pwt['ppp'] = pwt['pl_gdpo'] * pwt['xr']

例:日本#

まず,PPPレートと市場為替レートがどれほど違うかを日本の時系列データで確認するために,日本のデータのみを抽出する。日本のPPPと市場為替レートをプロットしてみよう。

cond = ( pwt['countrycode']=='JPN' )
ax = pwt.loc[cond,:].plot(x='year', y=['ppp','xr'], label=['PPP','市場為替レート'])
ax.set_ylabel('円/米ドル\n'+
              r'強い(増価)$\longleftarrow\quad\longrightarrow$弱い(減価)', fontsize=13)
pass
_images/3b5131dce8ac9b0a247510596195d403dc38c4446f534b9ee358d37aad52eadb.png

Note

上のプロットの縦軸は円/米ドルであり,値が低く(高く)なると円は強く(弱く)なる。増価,減価とも表現される。分かりにくいようであれば,次のように考えてみてはどうだろう。

  • 為替レートが100円/ドルということは,100円で1ドルを買うことができる。

  • 為替レートが80円/ドルの場合は,80円で1ドルを買うことができる。即ち,より安くドルを買うことができるので,円の購買力は高くなる。そういう意味で,円は強くなった(増価した)と言える。

  • 為替レートが120円/ドルの場合は,120円で1ドルを買うことになる。即ち,より高い価格でドルを買うことになるので,円の購買力は低下している。そういう意味で,円は弱くなった(減価した)と言える。

このプロットから次のことが言える。市場為替レートは1973年2月14日に変動相場制へ移行するまで360円/1米ドルで固定されていた。1980年代半ば頃までは,PPPレートと比べて市場為替レートは高い値となっている。従って,PPPレートを基準とすると円はドルに対して弱すぎる,即ち,過小評価されていたことが分かる。長期的にはPPPレートと為替レートは収斂したことが確認できる。しかし,1980年代半ば以降,市場為替レートはPPPレートの周りを上下していおり,ある程度の乖離は解消されていない。

このように,PPPレートと市場為替レートは乖離することが常であり,異なる要因によって決定されるためである。PPPは式(68)が示すように財・サービスの価格の比率であり,一般物価水準そしてその変化率(インフレ率)も持続性が高い(粘着生)ためPPPの動きは緩やかである。一方,市場為替レートは貨幣単位の比率であり,国際収支の状況にも大きく依存する。国際収支には(1)経常収支(財・サービスの収支など),(2)資本移転等収支(例えば,特許権などの知的財産権),(3)金融収支(直接投資,証券投資,金融派生商品など金融資産に伴う取引)があるが,特に(2)と(3)は一般物価水準との関係は少なくとも短期的には弱い。従って,市場為替レートは経済情報や政治状況,更には,中央銀行総裁や政治家の発言で影響を受け大きく瞬時に変動することがある。しかし,上の日本のレートのプロットが示すように,長期的には乖離が持続的に拡大するような発散は起きていない。1980年代半ばまでの時系列データが示すように,お互いに時間をかけて収束する経済メカニズムが裏で働いていると考えられる。

上のプロットではPPPレートと市場為替レートを別々にプロットしたが,一つの指標としてまとめる方が分かりやすい場合もある。式(73)を使い日本の実質為替レート\(\eta_{\text{JP}}\)を考えてみよ。

(79)#\[ \eta_{\text{JP}} =\frac{e_{\text{JP}}P_{\text{US}}}{P_{\text{JP}}} =\frac{e_{\text{JP}}}{\varepsilon_{\text{JP}}} \]

ここで\(e_{\text{JP}}\)は市場為替レート(円/米ドル)であり,\(\varepsilon_{\text{JP}}\)はPPPレートである。この式から次のことが分かる。

  • \(\eta_{\text{JP}}=1\quad\Rightarrow\quad e_{\text{JP}}=\varepsilon_{\text{JP}}\)

    • 購買力平価の成立

    • 日本のバスケット財1単位で米国のバスケット財1単位を購入できる(等価で交換できる)。

  • \(\eta_{\text{JP}}<1\quad\Rightarrow\quad e_{\text{JP}}<\varepsilon_{\text{JP}}\)

    • PPPレートと比較しては強すぎる(過大評価)

    • 例えば,\(\eta_{\text{JP}}=1/2\)の場合,日本のバスケット財1単位で米国のバスケット財2単位も購入できる(交換できる)。そういう意味で,円の購買力は高過ぎる(強過ぎる)。

  • \(\eta_{\text{JP}}>1\quad\Rightarrow\quad e_{\text{JP}}>\varepsilon_{\text{JP}}\)

    • PPPレートと比較して円は弱すぎる(過小評価)

    • 例えば,\(\eta_{\text{JP}}=2\)の場合,日本のバスケット財1単位で米国のバスケット財1/2単位しか購入できない(交換できない)。そういう意味で,円の購買力は低過ぎる(弱過ぎる)

(77)(79)を比べると,\(\eta_{\text{JP}}\)pl_gdpoの逆数となることがわかる。実質為替レートを新たな列real_xrとしてpwtに追加しよう。

pwt['real_xr'] = 1 / pwt['pl_gdpo']

1980年以降のデータをプロットしよう。

cond_jp = ( pwt['countrycode']=='JPN' )
cond_yr = ( pwt['year']>=1980 )
cond = cond_jp & cond_yr
ax = pwt.loc[cond,:].plot(x='year', y='real_xr', legend=False)
ax.axhline(1, color='red')
ax.set_title('実質為替レート(円/米ドル)', fontsize=20)
pass
_images/13171a68d0b46cfef65988b6bb214d332ad4ad8e59f23e404102d08199b94763.png

この図は,上の図の情報を実質為替レート(円/ドル)としてまとめている。実質為替レートでも,縦軸での円安・円高の方向は同じとなることに注意しよう。1980年代半ばまで円高に動いていること(増価)が分かる。

Note

国際通貨研究所では円(対米ドル)の購買力平価を公表しているが,pwtのデータとは大きく異なる。理由は,それぞれの目的とアプローチが違うためである。Penn World Tableで使うPPPは,共通の財・サービスの分類に基づいた国際比較プログラム(International Comparison Programme:省略ICP)により計算された情報を使っており,参加国(2017年には176カ国)のGDPや支出項目が比較可能になるPPPの算出を目的としている。従って,大掛かりな作業が必要であり,毎年ではなく数年に一度公表される(1970年, 1973年, 1975年, 1980年, 1985, 1993年, 2005年, 2011年, 2017年)。Penn World Tableのデータでは,それ以外の年は内挿(interpolate)もしくは外挿(extrapolate)することによりPPPを計算している。一方,国際通貨研究所で公表しているPPPは,1973年を基準としてシンプルに日米の消費者物価指数などを使って算出されており,指数の計算に使われる財・サービスは厳密に共通化されている訳ではない。後者は円ドル市場為替相場の予測や日本経済の国際競争力を知る上では有用な情報となるだろう。

相対一般物価水準の分布#

Big Macは世界中で消費され,世界中のBig Macは概ね同質と考えることができる。そのような財でさえ一物一価が成立していないことを考えると,バスケット財の一物一価の成立を疑いたくなる。実際,以下で示すように,データは一般物価の等価は成立しない。では,

バスケット財の価格(一般物価水準)はどのような分布になっているのだろうか。

この問を考察するために,米国を基準とする米ドル表示の相対一般物価水準考えることにする。相対価格で考える利点は,その分布をPPPレートと市場為替レートを使うことにより簡単に計算できることである。

(77)から列pl_gdpoの定義は次のようになっている。

(80)#\[\begin{split} \begin{align*} \text{列 pl_gdpo} &= \frac{P_i/e_i}{P_{\text{US}}}= \frac{i\text{国のバスケット財のドル価格}}{\text{米国のバスケット財のドル価格(2017年)}}\\ &=\text{米国(2017年)を基準とした}i\text{国のバスケット財の相対価格(一般物価水準の比率)} \end{align*} \end{split}\]

相対一般物価水準の分布を調べるためにはpl_gdpoを使えば良いということだ。まず2019年のデータを抽出してpwt19に割り当てよう。

cond = ( pwt['year']==2019 )
pwt19 = pwt.loc[cond,:].copy()

pl_gdpoが欠損値ではない国の数を確認しておこう。

pwt19['pl_gdpo'].notna().sum()
183

このデータを使い相対価格のヒストグラムをプロットするが,視覚的に確認し易いように対数化した列を作成し図示する。(試しに,対数を使う目的を理解するためにpl_gdpoのヒストグラムと比べてみてはどうだろう。)

pwt19['pl_gdpo_log'] = np.log( pwt19['pl_gdpo'] )

pwt19.plot.hist(y='pl_gdpo_log', ec='white')
pass
_images/366611206e72713c4eefe8818bc2a16a5cae31f5f01f42f24c421a8e7a4f2a2e.png

次のような解釈となる。

  • 0と等しい場合:米国の2017年の物価水準と同じ

  • 0を上回る場合:米国の2017年の物価水準を上回る

  • 0を下回る場合:米国の2017年の物価水準を下回る

その内訳を確認してみよう。

cond = ( pwt19['pl_gdpo_log']>=0 )
print(f'相対一般物価水準が1以上の国の数:{pwt19.loc[cond,:].shape[0]:>3}')
print(f'相対一般物価水準が1未満の国の数:{pwt19.loc[~cond,:].shape[0]:>3}')
相対一般物価水準が1以上の国の数: 22
相対一般物価水準が1未満の国の数:161

一般物価水準の相対価格の分布には大きな偏りが確認できる。pl_gdpo(対数ではない)の記述統計を表示してみよう。

pwt19['pl_gdpo'].describe()
count    183.000000
mean       0.691109
std        1.385720
min        0.139218
25%        0.395466
50%        0.490066
75%        0.741123
max       18.842592
Name: pl_gdpo, dtype: float64

価格水準が最も低い国は米国(2017年)の物価水準の約13.9%しかなく,最も高い国は米国(2017年)の約18.8倍も高い。上位5カ国を表示してみよう。

pwt19.sort_values('pl_gdpo',ascending=False)[['country','pl_gdpo']].head()
country pl_gdpo
12389 Venezuela (Bolivarian Republic of) 18.842592
1609 Bermuda 2.309026
11199 Turks and Caicos Islands 1.894385
209 Anguilla 1.572530
3079 Cayman Islands 1.491452

ベネズエラのpl_gdpoの値は突出している。ベネズエラの2018年のインフレは1,700,000%(年率)のハイパーインフレが発生しており,その影響かもしれないが,他の経済の傾向と大きく異なる「外れ値」の可能性を払拭できない。以下ではベネズエラを除外して分析を進めることにする。

cond = ~( pwt19['countrycode']=='VEN' )
pwt19 = pwt19.loc[cond,:].copy()

ベネズエラを除いたデータでpl_gdpoの変動係数を計算してみよう。

print(
    pwt19['pl_gdpo'].std() / pwt19['pl_gdpo'].mean()
)
0.536110862365616

この値をBig Macの値と比べてみよう。Big Macの変動係数は0.262であり,0.3にも満たない。バスケット財に含まれる財・サービスはBig Mac程規格が統一されていないことを考えると一般物価水準の変動係数が大きいことは理解できるのではないだろうか。

Note

上で計算したBig Mac価格の変動係数は,相対価格ではなくBig Mac価格(円表示)の変動係数である。米国のBig Mac価格に対する相対価格の変動係数を次のコードで計算することができるが,同じ値を返すことになる。

bigmac['price_dollar'] = bigmac['price_local'] / bigmac['exr']
cond = ( bigmac['iso']=='USA' )
bigmac['relative_price_dollar'] = bigmac['price_dollar'] / bigmac.loc[cond,'price_dollar'].iloc[0]
bigmac['relative_price_dollar'].std() /bigmac['relative_price_dollar'].mean()

物価水準に対する所得の影響#

所得の影響#

相対物価水準のヒストグラムをプロットしたが,どのような国がどのような順番並んでいるか表示してみよう。表示するリストを見やすくするために,183カ国全てを表示せずに,行avh(人的資本ストック)に欠損値がない国だけを表示しよう。このルールに特別な意味はないが,国の数を減らすには丁度良いだろう。

#1
pwt19_dropped = pwt19.dropna(subset=['avh']).sort_values('pl_gdpo_log')

fig, ax = plt.subplots(figsize=(6,13))
ax.stem('country', 'pl_gdpo_log',      #2
        orientation='horizontal',      #3
        bottom=0,                      #4
        data=pwt19_dropped)            #5
ax.set_xlim(-1.5,0.5)                  #6
ax.set_title('米国の2017年の物価水準と比較して\n'+
             r'低い $\longleftarrow\quad$2019年の物価水準$\quad\longrightarrow$ 高い',
             size=17)
ax.axhline('Japan', linestyle=':')     #7

#8
print(f'このプロットには{pwt19_dropped.shape[0]}カ国が含まれる。')
このプロットには66カ国が含まれる。
_images/185d7550d29a50af15febf7c2946eacc17a33c6d75397c15c4c9f7bdf0991c78.png

リストの上には所得が高い国が列挙されており,所得が低い国はリストの下の方にある。この傾向はBig Macの場合と同じである。

物価水準と所得の関係を散布図を使って確認するために,一人当たりGDPとその対数値を新たな列cgdpo_pccgdpo_pc_logを追加しよう。

pwt19['cgdpo_pc'] = pwt19['cgdpo']/pwt19['pop']
pwt19['cgdpo_pc_log'] = np.log( pwt19['cgdpo_pc'] )

またpl_gdpoの対数の値を新たな列pl_gdpo_logとして追加しよう。

pwt19['pl_gdpo_log'] = np.log( pwt19['pl_gdpo'] )

cgdpo_pc_logを横軸にしてpl_gdpo_logの散布図を表示しよう。

ax = pwt19.plot.scatter(x='cgdpo_pc_log', y='pl_gdpo_log')
ax.set_xlabel('一人当たりGDP(対数,百万米ドル)', fontsize=15)
ax.set_ylabel('米国の2017年価格を基準とした\n2019年相対価格(対数)', fontsize=15)
pass
_images/900f224cc81106dadf149746ab9bdd0993823c48e5603f8f93a69b633ca2e7e2.png

直線トレンドを想像してみよう。明らかに右上がりであり,所得が高い経済ほど物価水準が高いことが確認できる。これはバラッサ・サミュエルソン効果と呼ばれる。直感的には,所得が高い経済の生産性と価格は高く,多くが貿易財である。一方,所得が低い国の非貿易財(例えば,不動産)やサービス(例えば,散髪)は比較的に安い。右上がりの直線トレンドはそれらの反映と考えられる。

しかし,非線形のトレンドを想像するとどうだろう。U字のトレンドを描くことができないだろうか。所得が高い経済では右上がりとなるが,所得が低い経済では逆に緩やかな右下がりとなり,U字の底が一人当たりGDP(対数)が8.8辺りだろうか。この場合,バラッサ・サミュエルソン効果は所得が比較的高い経済では強く現れるが,所得が低い経済では弱いと解釈できる。

このような非線形の相関を考慮して,次節では所得の効果の推定をおこなうことにする。

所得効果の分離#

ここで考える問題は

  1. 所得効果を他の影響からどのように分離することができるだろうか。

  2. 所得効果は価格の散らばりの何%を説明できるだろうか。

ここでは,まず問題1について考える。相対価格の決定要因は次式に従って分解できると仮定しよう。

(81)#\[\begin{split} p_i= D_i^{\text{所得}}D_i^{\text{その他}}\\ \end{split}\]
  • \(p_i\equiv\dfrac{P_{i}/e_i}{P_{\text{US}}}\):相対価格

  • \(D_i^{\text{所得}}\):所得効果の部分

  • \(D_i^{\text{その他}}\):所得以外の要因によって決まる部分

2つの項については次の仮定を置く。

(82)#\[ D_i^{\text{所得}}=x_i^{b+c\log(x_i)}, \qquad D_i^{\text{その他}}=e^{a+u_i} \]
  • \(x_i=\dfrac{i\text{国の一人当たりGDP(米ドル)}}{\text{米国の一人当たりGDP(米ドル)}}\)

  • \(b\):所得効果の強さを捉えるパラメーター

  • \(c\):所得効果の非線形の効果を捉えるパラメーター

  • \(a\):その他の要因によって決定される定数

  • \(u_i\):その他のランダムな要因(誤差項)

(注意) \(D_i^{\text{所得}}\)の右辺にある\(x_i\)の指数は\(b+c\log(x_i)\)となっているが,\(c\log(x_i)\)が上述のU字型の相関関係を捉える項となる。

(81)に対数を取ると次式となる。

(83)#\[ \log\left(p_i\right)=d_i^{\text{所得}}+d_i^{\text{その他}} \]
  • \(d_i^{\text{所得}}\equiv\log\left(D_i^{\text{所得}}\right) =\left[b+c\log\left(x_i\right)\right]\log\left(x_i\right) =b\log(x_i)+c\left[\log\left(x_i\right)\right]^2\)

  • \(d_i^{\text{その他}}\equiv\log\left(D_i^{\text{その他}}\right)=a+u_i\)

(83)を回帰式として次のようにまとめることができる。

(84)#\[ \log\left(p_i\right)=a+b\log\left(x_i\right)+c\left[\log\left(x_i\right)\right]^2+u_i \]

(84)をOLS推定し,\(\hat{a}\)\(\hat{b}\)\(\hat{c}\)をパラメーターの推定値,\(\hat{u}_i\)を残差とすると,次式が成立する。

(85)#\[ \log\left(p_i\right)=\hat{a}+\hat{b}\log\left(x_i\right) +\hat{c}\left[\log\left(x_i\right)\right]^2+\hat{u}_i \]

これらの推定値を使い,次のように\(\log\left(p_i\right)\)を2つの要因にに分解することができる。

(86)#\[ \log\left(p_i\right)= \hat{d}_i^{\text{所得}} +\hat{d}_i^{\text{その他}} \]

ここで

  • \(\hat{d}_i^{\text{所得}}=\hat{b}\log\left(x_i\right)+\hat{c}\left[\log\left(x_i\right)\right]^2\)

  • \(\hat{d}_i^{\text{その他}}=\hat{a}+\hat{u}_i\)

以下では\(\hat{d}_i^{\text{所得}}\)\(\hat{d}_i^{\text{その他}}\)を計算し,それぞれの要因によって発生する相対価格の対数\(\log\left(p_i\right)\)のばらつき具合(具体的には,分散)を確認することにする。

Note

なぜ\(\hat{a}\)\(\hat{D}_i^{\text{その他}}\)に含まれるか考えてみよう。式(84)の代わりに次の定数項のみの推定式を使って\(a\)を推定したとしよう。

\[ \log\left(p_i\right)=a+u_i \]

Pythonで学ぶ計量経済学で説明しているように,この場合の推定値\(\overline{a}\)\(\log\left(y_i\right)\)の平均と等しい。ここで重要な点は,\(\overline{a}\)は所得効果を含んだ\(y_i\)の平均値だということである。一方,推定式(84)には\(x_i\)が入っているため,定数項の推定値\(\hat{a}\)は,所得効果を取り除いた後の\(y_i\)の平均値という解釈が成り立つ。この考え方に従うと,\(\log\left(y_i\right)\)の平均値\(\overline{a}\)は次の2つに分解することができる。

  • \(\overline{a}-\hat{a}\)\(y_i\)の平均値における所得効果の部分

  • \(\hat{a}\)\(y_i\)の平均値におけるその他の部分

この解釈に基づき,\(\hat{a}\)\(\hat{D}_i^{\text{その他}}\)に含めている。

推定#

OLSを使って式(84)を推定するが,まず\(\log\left(x_i\right)\)\([\log\left(x_i\right)]^2\)の変数に使う値を作成する。

cond = ( pwt19['countrycode']=='USA' )
pwt19['cgdpo_pc_ratio_log'] = ( pwt19['cgdpo_pc_log'] -
                                pwt19.loc[cond,'cgdpo_pc_log'].iloc[0] )
pwt19['cgdpo_pc_ratio_log_2'] = pwt19['cgdpo_pc_ratio_log']**2

この2変数を使い回帰式を推定する。

formula = 'pl_gdpo_log ~ cgdpo_pc_ratio_log + cgdpo_pc_ratio_log_2'
res = smf.ols(formula, data=pwt19).fit()
print(res.summary(slim=True))
                            OLS Regression Results                            
==============================================================================
Dep. Variable:            pl_gdpo_log   R-squared:                       0.390
Model:                            OLS   Adj. R-squared:                  0.384
No. Observations:                 182   F-statistic:                     57.32
Covariance Type:            nonrobust   Prob (F-statistic):           5.76e-20
========================================================================================
                           coef    std err          t      P>|t|      [0.025      0.975]
----------------------------------------------------------------------------------------
Intercept               -0.1121      0.059     -1.889      0.060      -0.229       0.005
cgdpo_pc_ratio_log       0.5386      0.073      7.346      0.000       0.394       0.683
cgdpo_pc_ratio_log_2     0.0838      0.019      4.362      0.000       0.046       0.122
========================================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

\(\hat{b}\)\(\hat{c}\)の統計的な優位性は非常に高い。また\(\hat{c}>0\)はU字型のトレンドを示している。

データの散布図に回帰線を重ねて表示して当てはまり具合を視覚的に確認してみることにしよう。式(81)から予測値は

\[ \log\left(\hat{p}_i\right)=\hat{a}+\hat{b}\log\left(x_i\right) +\hat{c}\left[\log\left(x_i\right)\right]^2 \]

となる。この式を使い,予測値の値を新たな列としてpwt19に追加しよう。

# パラメーターの推定値
ahat = res.params.iloc[0]
bhat = res.params.iloc[1]
chat = res.params.iloc[2]

# 予測値
pwt19['fitted'] = ( ahat+
                    bhat*pwt19['cgdpo_pc_ratio_log']+
                    chat*pwt19['cgdpo_pc_ratio_log_2']
                  )

プロットしてみよう。

# 散布図
ax = pwt19.plot.scatter(x='cgdpo_pc_ratio_log', y='pl_gdpo_log')
ax.set_xlabel('米国を基準とした一人当たりGDP(対数,2019年)', fontsize=15)
ax.set_ylabel('米国の2017年価格を基準とした\n2019年相対価格(対数)', fontsize=15)

# 回帰曲線
pwt19.sort_values('cgdpo_pc_ratio_log').plot(x='cgdpo_pc_ratio_log',  #1
                                             y='fitted',
                                             color='red',
                                             ax=ax)
pass
_images/4768cb3b3536c316e5967a278c434f3c97a8c01bb07d795160b5db35e7564ca5.png

ヒストグラムの比較#

(86)にある3つの項\(\log\left(p_i\right)\)\(\hat{d}_i^{\text{所得}}\)\(\hat{d}_i^{\text{その他}}\)のヒストグラムを比較してみよう。まず,\(\hat{d}_i^{\text{所得}}\)\(\hat{d}_i^{\text{その他}}\)の定義に基づいてpwt19に新たな列を作成しよう。

# 所得の影響
pwt19['income_effect'] = ( bhat*pwt19['cgdpo_pc_ratio_log']+
                           chat*pwt19['cgdpo_pc_ratio_log_2']
                         )

# 所得以外の効果
pwt19['other_effect'] = ahat+res.resid

3つの変数のヒストグラムを並べて表示する。

col_lst = ['pl_gdpo_log','income_effect','other_effect']
title_lst = ['相対価格(対数)','所得効果(対数)','その他の効果(対数)']

ax = pwt19[col_lst].plot.hist(bins=20,
                              ec='white',
                              subplots=True,
                              legend=False,
                              figsize=(6,10))

for i, s in enumerate(title_lst):
    ax[i].set_title(s, fontsize=18)
    ax[i].axvline(0, color='k', linestyle=':')
pass
_images/b3f14965af37e405555f43215e4d45adb9551a08472efebf44c4a52eda44243d.png

0.0(縦の点線)で\(\dfrac{P_i/e_i}{P_{\text{US}}}=1\)となることに注意しよう。次のことが言える。

  • 所得とその他の効果を足し合わせることで一番上の相対価格の分布となる。言い換えると,相対価格の分布から所得効果を取り除くことにより一番下のその他の効果となる。

  • 所得効果の分布の最頻値は負の値となっており,米国の物価水準より低い経済において所得効果が大きいということを意味する。

  • その他の効果は0.0を中心に分布している。若干,相対価格が低い階級に国の数が多いように見える。

所得効果の大きさ#

ここでは次の問いを考察する。

相対価格のばらつきの何割が所得効果に起因するのだろうか。

\(y_i=\log\left(p_i\right)\)として式(81)を再掲する。

(87)#\[\begin{split} y_i= d_i^{\text{所得}}+ d_i^{\text{その他}}\\ \end{split}\]

この式の両辺の分散を次のように計算することにより,所得効果の割合を計算することが可能となる。まず,\(p_i\)の分散を\(d_i^{\text{所得}}\)\(d_i^{\text{その他}}\)の分散に分解しよう。

(88)#\[\begin{split} \begin{align*} \text{Var}(y_i) &=\text{Var}\left(\hat{d}_i^{\text{所得}}+\hat{d}_i^{\text{その他}}\right)\\ &=\text{Var}\left(\hat{d}_i^{\text{所得}}\right)+ \text{Var}\left(\hat{d}_i^{\text{その他}}\right)+ 2\text{Cov}\left(\hat{d}_i^{\text{所得}},\hat{d}_i^{\text{その他}}\right)\\ &=\underbrace{ \text{Var}\left(\hat{d}_i^{\text{所得}}\right)+ \text{Cov}\left(\hat{d}_i^{\text{所得}},\hat{d}_i^{\text{その他}}\right) }_{\text{所得効果}}+ \underbrace{ \text{Var}\left(\hat{d}_i^{\text{その他}}\right)+ \text{Cov}\left(\hat{d}_i^{\text{所得}},\hat{d}_i^{\text{その他}}\right) }_{\text{その他の効果}} \end{align*} \end{split}\]

上の計算では,\(d_i^{\text{所得}}\)\(d_i^{\text{その他}}\)の共分散が存在するため,それを所得とその他に等分している。

更に,この結果を次のように書き直すことができる(「回帰分析」の章を参照)。

(89)#\[\begin{split} \begin{align*} \left( \begin{split} &\text{所得効果}\\ &\text{の割合} \end{split} \right) &=\frac{ \text{Var}\left(\hat{d}_i^{\text{所得}}\right)+ \text{Cov}\left(\hat{d}_i^{\text{所得}},\hat{d}_i^{\text{その他}}\right) }{ \text{Var}(y_i)} =\frac{ \text{Cov}\left(y_i,\hat{d}_i^{\text{所得}}\right) }{ \text{Var}(y_i)} \end{align*} \end{split}\]
(90)#\[\begin{split} \begin{align*} \left( \begin{split} &\text{その他の効果}\\ &\text{の割合} \end{split} \right) &=\frac{ \text{Var}\left(\hat{d}_i^{\text{その他}}\right)+ \text{Cov}\left(\hat{d}_i^{\text{所得}},\hat{d}_i^{\text{その他}}\right) }{ \text{Var}(y_i)} =\frac{ \text{Cov}\left(y_i,\hat{d}_i^{\text{その他}}\right) }{ \text{Var}(y_i)} \end{align*} \end{split}\]

この式に従って計算してみよう。

# 所得効果の割合
income = pwt19[['pl_gdpo_log','income_effect']]
print(
    income.cov().iloc[0,1] / income.cov().iloc[0,0]
)
0.3904160748287651
# 所得以外の効果の割合
other = pwt19[['pl_gdpo_log','other_effect']]
print(
    other.cov().iloc[0,1] / other.cov().iloc[0,0]
)
0.6095839251712349

分散の割合で考えた場合,所得効果は全体の約39%を占めている。一般物価水準の一物一価が成立しない大きな理由が所得の差ということが明らかになった。一方で,所得以外の要因も大きな影響を及ぼしている。「その他」の要因は大きく2つに分けることができる。

  • 財・サービスの貿易(国際収支における貿易・サービス収支に該当)

    • 国境をまたぐ国際貿易での輸送費用は非常に大きく,一物一価の大きな妨げとなっている。

    • Big Macのように非貿易財(例えば,教育,建設,不動産,政府サービス)も存在する。輸送費用は著しく大きいため,貿易されない財と考えることができる。非貿易財の存在は経済間の一物一価の妨げとなっている。

    • 一般物価水準を説明する上でバスケット財という合成財を考えた。しかし,全ての国で全く同じ財がある訳ではない。また,一般物価水準を計算する上で,各国の支出データを使いウェイトを算出し加重平均を計算することになるが,経済によって支出割合は異なるためウェイトも異なることになる。

  • 経済間の金融取引(国際収支における金融収支などに該当)

    • 経済間では財・サービスだけではなく金融資本の取引がおこなわれる。例えば,直接投資,証券投資,金融派生商品などである。長期的な投資だけではなく,短期的な投資や投機も含まれるため,資金が瞬時に動くことになり市場為替レートが大きな影響を受けることになる。

Note

(89)は次のように書き直すことも可能である。

(91)#\[\begin{split}\begin{align*} \left( \begin{split} &\text{所得効果}\\ &\text{の割合} \end{split} \right) &=\frac{ \text{Cov}\left(y_i,\hat{d}_i^{\text{所得}}\right) }{ \text{Var}(y_i)} =\frac{ \text{Cov}\left(y_i-\hat{u}_i+\hat{u}_i,\hat{b}x_i+\hat{a}-\hat{a}\right) }{ \text{Var}(y_i)}\\ &=\frac{ \text{Cov}\left(\hat{p}_i+\hat{u}_i,\hat{y}_i-\hat{a}\right) }{ \text{Var}(y_i)}\\ &=\frac{ \text{Cov}\left(\hat{y}_i,\hat{y}_i\right) -\text{Cov}\left(\hat{y}_i,\hat{a}\right) +\text{Cov}\left(\hat{u}_i,\hat{y}_i\right) -\text{Cov}\left(\hat{u}_i,\hat{a}\right) }{ \text{Var}(y_i)}\\ &=\frac{ \text{Cov}(\hat{y}_i,\hat{y}_i) }{ \text{Var}(y_i)} =\frac{ \text{Var}(\hat{y}_i) }{ \text{Var}(y_i)} =R^2\;\text{(決定係数)} \end{align*}\end{split}\]

回帰分析の結果が含まれるresを使って確認してみよう。

res.rsquared

上で計算した所得効果の割合と等しいことが確認できるはずだ。

所得効果の含意#

PPPレートと市場為替レート:再考#

上の分析で一般物価水準が経済によって大きく異なることを示すために,式(80)を使った。その式を式(77)(73)を使って次のように表すことができる。

(92)#\[\begin{split} \begin{aligned} \text{(列 pl_gdpo)} &= \frac{P_i/e_i}{P_{\text{US}}}\\ &=\text{米国(2017年)を基準とした}i\text{国のバスケット財の相対価格}\\ &=\frac{1}{\eta_i}=\frac{\varepsilon_i}{e_i} \end{aligned} \end{split}\]

即ち,相対一般物価水準はPPPレートと市場為替レートに分解することができるということであり,経済間での相対一般物価水準の違いは,PPPレートと市場為替レートの乖離として現れるということである。この点を踏まえると,次のことが分かる。

  • pl_gdpo\(=1\)\(\varepsilon_{i}=e_{i}\)

    • \(i\)国の物価水準は米国と同じ場合,PPPレートと市場為替レートは同じ。

  • pl_gdpo\(>1\)\(\varepsilon_{i}>e_{i}\)

    • \(i\)国の物価水準は米国よりも高い場合,PPPレートと比較して\(i\)国の通貨は強すぎる。

  • pl_gdpo\(<1\)\(\varepsilon_{i}<e_{i}\)

    • \(i\)国の物価水準は米国よりも低い場合,PPPレートと比較して\(i\)国の通貨は弱すぎる。

更に,相対一般物価水準の違いは所得水準の違いに大きな影響を受けることが明らかになったが,式(92)によると,所得効果はPPPレートと市場為替レートの乖離にも大きな影響を与えることが分かる。次のようにまとめることができる。

所得が高い経済の通貨は強く,所得が低い経済の通貨は弱い傾向となっている。

ペン効果#

PPPレートと市場為替レートの乖離は所得水準に影響されることが明らかになったが,その経済学的な含意は次のようにまとめることができる。

市場為替レートを使いGDPを評価すると,貧しい国の貧しさは誇張される。

これはペン効果と呼ばれる。英語ではPenn Effectと呼ばれ,Pennは本章で使ったデータセットPenn World TableのPennから来ている。

ペン効果を簡単な数値例で説明するために,Big Macだけを生産する2国を考えてみよう。A国は豊かな経済であり,B国は貧しい経済としよう。A国は年間\(Y_A=10\)個のBig Mac,B国は\(Y_B=5\)個のBig Macを生産している。A国の貨幣単位は\(\$_A\)であり,B国の貨幣は\(\$_B\)とし,価格は\(P_A=\$_A10\)\(P_B=\$_B10\)としよう。それぞれの自国通貨で評価すると,A国のGDPは\(10\times\$_A10=\$_A100\)であり,A国のGDPは\(5\times\$_B10=\$_B50\)である。

この場合,PPPレートは

(93)#\[ \varepsilon_{B/A}=\frac{P_B}{P_A}=\frac{10}{10}=1 \quad\text{(単位:$\$_B/\$_A$)} \]

となる。まず,一物一価が成立したとしよう。この場合,市場為替レートを\(e_{B/A}\)(単位:\(\$_B/\$_A\))とすると,\(\varepsilon_{B/A}=e_{B/A}=1\)が成立することになり,A国の通貨\(\$_A\)で表した相対価格は

(94)#\[ \frac{P_B/e_{B/A}}{P_A}=\frac{10/1}{10}=1 \]

となる。購買力平価が成立する場合のGDPの比率は次のようになる。

(95)#\[ \frac{Y_BP_B/e_{B/A}}{Y_AP_A}=\frac{5\times10/1}{10\times10}=\frac{50}{100}=\frac{1}{2} \]

B国のGDPはA国の半分ということだ。

次に,ペン効果を導入する。所得の影響により為替レートは\(e_{B/A}=2\)と仮定しよう。即ち,B国は比較的に貧しいため,B国の通貨は弱いという仮定である。この場合,A国の通貨\(\$_A\)で表した相対価格は

(96)#\[ \frac{P_B/e_{B/A}}{P_A}=\frac{10/2}{10}=\frac{5}{10}=\frac{1}{2}<1 \]

となり,A国の価格がB国よりも高く一物一価は成立しない。上述のデータと合致したパターン(豊かな国の価格が高い)となっている。相対的なGDPを計算してみよう。

(97)#\[ \frac{Y_BP_B/e_{B/A}}{Y_AP_A}=\frac{5\times10/2}{10\times10}=\frac{25}{100}=\frac{1}{4} \]

B国のGDPはA国の25%しかない。所得効果がない購買力平価が成立する場合の50%と対照的であり,ペン効果により所得格差が誇張されている。

一人当たりGDPの分布#

上の数値例をデータを使って確認してみよう。ここではpwt19を使い,PPPレートで計算された一人当たりGDPと市場為替レートに基づいた一人当たりGDPを計算し比較する。

変数cgdpo_pcはPPPレートで計算した一人当たりGDP(2017年米ドル)である。具体的に説明するために,次の変数を定義しよう。

  • \(Y_i\)\(i\)国の産出量

  • \(P_i\)\(i\)国の貨幣表示の物価水準

  • \(L_i\)\(i\)国の人口

  • \(\varepsilon_i\):1米ドル当たりの\(i\)国のPPPレート

cgdpo_pcは次のように計算されている。

(98)#\[ \text{(列 cgdpo_pc)}=\frac{P_iY_i/L_i}{\varepsilon_i} \]

pwt19に市場為替レートのGDPを新たな列cgdpo_pc_xrとして追加するとしよう。cgdpo_pcを使うと次の計算となる。

(99)#\[ \text{(列 cgdpo_pc_xr)} =\frac{P_iY_i/L_i}{\varepsilon_i}\times\frac{\varepsilon_i}{e_i} =\text{(列 cgdpo_pc)}\times\frac{\text{(列 ppp)}}{\text{(列 xr)}} \]

cgdpo_pc_xrを追加する。

pwt19['cgdpo_pc_xr'] = pwt19['cgdpo_pc'] * pwt19['ppp'] / pwt19['xr']

対数値も作成しておこう。

pwt19['cgdpo_pc_xr_log'] = np.log( pwt19['cgdpo_pc_xr'] )

まず散布図を使ってペン効果を確かめてみる。

ax = pwt19.plot.scatter(x='cgdpo_pc_log', y='cgdpo_pc_xr_log')
ax.axline((9, 9), (10, 10), color='red', label='45度線')  #1
ax.set_xlabel('一人当たりGDP(PPPレート)', fontsize=13)
ax.set_ylabel('一人当たりGDP(市場為替レート)', fontsize=13)
ax.legend()
pass
_images/2efc868a6790f064ea27239b85f802ce4f0f3c5443de435fb6582ea1daff6535.png

横軸はPPPレートで計算した一人当たりGDPであり,縦軸には市場為替レートに基づく一人当たりGDPとなっている。それぞれのレートで計算した一人当たりGDPが等しければ45度線(赤線)上に観測値は並んでいるはずである。しかし,観測値は45度線よりも下に位置する傾向があり,特に所得が低い経済においては顕著である。即ち,市場為替レートを使い計算した一人当たりGDPは低く算出される傾向にあり,所得が低い経済においてその傾向は強い。

一人当たりGDPの分布を図示するためにカーネル密度推定をプロットしよう。(直感的には,カーネル密度推定とはヒストグラムの情報を使い,そのサンプルを生成した連続的な分布を推定する方法と考えれば良いだろう。)

ax = pwt19.plot.kde(y=['cgdpo_pc_log','cgdpo_pc_xr_log'])
ax.legend(['PPPレート','市場為替レート'], fontsize=13)
ax.set_title('一人当たりGDP(米ドル,対数)', fontsize=20)
pass
_images/fe1cb9cb7ca7150a47ed3fde8a3f3e84cc22746547955d2455ba141813123f77.png

PPPレートGDPと比べて市場為替レートGDPは全体的に左(小さい値)にシフトしている。所得が中程度の国が減少し,所得が低い国が増加している。

記述統計を比べてみよう。

#1
stats_ppp = pwt19['cgdpo_pc_log'].describe().to_frame('PPPレートGDP')
stats_xr = pwt19['cgdpo_pc_xr_log'].describe().to_frame('市場為替レートGDP')

pd.concat([stats_xr,stats_ppp], axis='columns')  #2
市場為替レートGDP PPPレートGDP
count 182.000000 182.000000
mean 8.837957 9.479314
std 1.459575 1.137809
min 5.562148 6.678289
25% 7.733357 8.665637
50% 8.898444 9.585708
75% 10.056103 10.372745
max 11.676471 11.611350

上の結果をまとめると次のようになる。市場為替レートを使うことにより,

  • GDPの平均,最小値,25%分位数,中央値,75%分位数は減少している。

  • GDPの標準偏差と最大値は増加している。

これらは市場為替レートにより経済間の不平等が大きく計測されていることを示唆する。不平等の一つに変動係数(Coefficient of Variation)があるが(式(59)を参照),それを使って比較してみよ。

変動係数が大きければ,所得不平等は大きいことを意味する。

cc_ppp = pwt19['cgdpo_pc_log'].std() / pwt19['cgdpo_pc_log'].mean()
cc_xr = pwt19['cgdpo_pc_xr_log'].std() / pwt19['cgdpo_pc_xr_log'].mean()

print('--- GDPの変動係数 ---')
print(f'PPPレート:{cc_ppp:>8.3f}')
print(f'市場為替レート:{cc_xr:.3f}')
--- GDPの変動係数 ---
PPPレート:   0.120
市場為替レート:0.165

市場為替レートに含まれる所得の影響がペン効果として現れていることが確認できる。

まとめ#

  • 国内市場で財・サービスの一物一価は成立していない。

  • 経済間でBig Macの価格の一物一価は成立していない。

  • 経済間で一般物価水準は異なる。

  • 購買力平価レートは2つの通貨の購買力を等しくする交換レート。

  • 所得が高い(低い)経済の一般物価水準は高い(低い)傾向にある(所得効果)。

  • 所得効果により,所得が低い経済の通貨は購買力平価レートと比べて弱い傾向にある。

  • 市場為替レートを使い共通通貨で一人当たりGDPを比較すると,所得が低い経済の貧しさは誇張される。