無差別曲線は通常、真上からみたものをみることが多いですが、本来は立体的で、ゼロから離れるにつれて、効用が高くなっています。
それを実感するために、pythonを使って、立体グラフを作ってみることにします。
経済統計の使い方では、統計データの入手法から分析法まで解説しています。
無差別曲線とは
無差別曲線は、ミクロ経済学の家計の効用最大化の議論に出てきます。予算制約があるなかで、効用を最大化する家計が2つの財をどのように選ぶかを考える際に使います。
X財、Y財の2つを想定し、2つの購入数量を様々に変えます。さまざまな組み合わせが考えられますが、このうち効用が等しい財の組み合わせを結んだ曲線が無差別曲線です。
無差別曲線のグラフ
ミクロ経済学の教科書には下記のような形で描かれていることが多いです。横軸がX財の購入量、縦軸がY財の購入量です。例えば、X財を60、Y財を80購入した時の効用とX財を80、Y財を60購入した時の効用は等しいので、無差別曲線で結ばれています(立体グラフを上から見ているので多少ずれていますが…)。
立体的に描いた場合
それぞれの無差別曲線は効用が異なります。多く購入すればするほど、効用は大きくなるので、右上にある無差別曲線ほど効用が大きくなります。
z軸に効用の大きさをとってグラフを描くと以下のようなグラフになります。
同じデータですが、効用関数を曲面で表すと以下のグラフになります。
このように、立体的に描くことにより、無差別曲線への理解が深まるのではないでしょうか。
プログラムの解説
プログラムは「コブダグラス型生産関数(効用関数)の可視化」(https://qiita.com/leisurely/items/b67cf2cd058a2a01295b)を参考させていただきました。効用関数と数値は同じものを使っています。
X財とY財を購入することとし、効用関数は以下のコブ・ダグラス型関数を想定します。
$U=X^{0.5}Y^{0.5}$
以下のプログラムをpythonで走らせれば、上記の無差別曲線が描け、様々な角度からみることができます。
無差別曲線のプログラム
#jupyter notebook 上でグラフを動かせるようにする
%matplotlib notebook
#matplotlib,Axes3D,numpy を使えるようにする。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
#x(x財の購入量),y(y財の購入量),z(効用) のデータを作成
#効用関数
def f(x, y):
return x**(1/2) * y**(1/2)
#xとyのデータ:0から99まで1刻み
x = np.arange(0, 100, 1)
y = np.arange(0, 100, 1)
#x,yのすべての組み合わせについて効用を計算する
x, y = np.meshgrid(x, y)
U = f(x, y)
#立体グラフの設定
fig = plt.figure()
ax = Axes3D(fig)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("U")
#等高線グラフの作成
ax.contour(x, y, U, 15)
#グラフの表示
plt.show()
効用関数のプログラム
グラフの作成コマンドを等高線から、ワイヤーフレームに変更すると、効用関数のグラフになります。あとは同じプログラムです。
- 等高線 ax.contour(x, y, U, 15)
- ワイヤーフレーム ax.plot_wireframe(x, y, U)
#jupyter notebook 上でグラフを動かせるようにする
%matplotlib notebook
#matplotlib,Axes3D,numpy を使えるようにする。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
#x(x財の購入量),y(y財の購入量),z(効用) のデータを作成
#効用関数
def f(x, y):
return x**(1/2) * y**(1/2)
#xとyのデータ:0から99まで1刻み
x = np.arange(0, 100, 1)
y = np.arange(0, 100, 1)
#x,yのすべての組み合わせについて効用を計算する
x, y = np.meshgrid(x, y)
U = f(x, y)
#立体グラフの設定
fig = plt.figure()
ax = Axes3D(fig)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("U")
#効用関数グラフの作成
ax.plot_wireframe(x, y, U)
#グラフの表示
plt.show()
- 分析ツールの紹介
- 【Python】Pythonの基本操作
- 経済学Q&A(試験編)
- 【経済統計】消費をみるために必要な月次指標ベスト3|消費総合指数、商業動態統計、家計調査
- 経済統計チャットボット マホナ