経済統計の使い方
統計初心者の社会人向けに、経済データの解説をしています。「まとめページ」をご覧くだされば、全体的な内容がわかると思います。
経済学

python 無差別曲線を立体グラフで描くーmatplotlib,Axes3D

無差別曲線の理解を深める

無差別曲線は通常、真上からみたものをみることが多いですが、本来は立体的で、ゼロから離れるにつれて、効用が高くなっています。

それを実感するために、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()

まとめのページ このサイトでは、経済指標や経済分析に関する記事をアップしています。現在はさまざまなジャンルの記事を随時更新しているので、全体像が分かり...
効用最大化をエクセルで実感する 2財の効用最大化問題を無差別曲線と予算線から求める問題です。通常は、計算して求めますが、エクセルを使って解いてみます。 (問)...

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA