サブルーチン駅前4時29分集合

プログラミングと散歩と数学に興味のある男のブログです。基本的に知識は浅いです。

エッジワースボックスをLaTeXで表示する方法

おはようございます。最近は専ら昼夜逆転しているたねろうです。

学部が盛大にバレそうな話題ですが、皆さん、エッジワースボックス描いてますか!

エッジワースボックスとは、一般均衡理論などでよく登場するx軸とy軸をそれぞれ2つ、逆方向にとった図のことです。説明だけだと多分わからないと思いますが、↓の図のやつです。経済学部生なら見たことがあるのではないでしょうか。

f:id:zenkashiki011:20211210164541p:plain

1か月くらい前にレポートでこの図を描く機会があったのですが、描き方がわからない!!!

非常に特殊なグラフなので、LaTeXだと当然すぐには描き方が見つかりません。Google先生に聞いても、日本語だとやり方がなかなか出てきません。結局レポートの問題を解く時間をグラフの書き方を検索する時間が大きく上回ってしまいました。別に手書きのやつをスキャンしてもOKだったのですが、なんとなくLaTeXで書きたくなってしまい、時間をとられました。

そこで、未来の経済学部生の時間の節約と備忘録のために、Latexでの簡単な出し方を記しておきます。

執筆にあたり、一部のコードなどThomas de Graaff氏の"Drawing Edgeworth boxes with LaTeX"のページを参考にしました。ありがとうございました。より詳細な情報をお求めの方はご参照ください。 thomasdegraaff.nl

コード

↓のコードを入れるとその下の画像のように出力されます。

\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{amsmath}

\begin{document}


\def\XMAX{3} %x軸の最大値
\def\YMAX{3} %y軸の最大値
\def\U{1} %効用の値
\def\Calpha{0.5} %コブダグラス関数の指数
\def\Cbeta{0.5} %別のコブダグラス関数の指数

\begin{tikzpicture}
    \begin{axis}[
            restrict y to domain=0:\YMAX,
            samples = 1000,
            xmin = 0, xmax = \XMAX, %x軸の幅を決める
            ymin = 0, ymax = \YMAX, %y軸の幅を決める
            xlabel=$x_{1A}$,
            ylabel=$x_{1B}$,
            axis y line=left, %y軸を左に寄せる
            axis x line=bottom, %x軸を下に寄せる
            y axis line style={->}, %軸の先端を矢印にする
            x axis line style={->}  %軸の先端を矢印にする
        ]

        % オレンジ色の曲線の式を表示
        \addplot[orange,samples = 1000]{\U^(1/(1-\Calpha))/x^(\Calpha/(1-\Calpha))};

        %点を打つ
        \node[label={180:{($\bar{x}_{1A},\bar{x}_{1B}$)}},circle,fill,inner sep=2pt] at (axis cs:2,1) {};

        %右下がりの点線を表示
        \addplot[domain=0.5:2.5,dotted]{-x+3};

        % 右上がりの青色の線を表示
        \addplot[blue,domain=0.5:2.5]{x};

    \end{axis}

    %x軸が左方向に伸び、y軸が下方向に伸びるように設定
    \begin{axis}[
            restrict y to domain=0:\YMAX,
            xlabel=$x_{2A}$,
            ylabel=$x_{2B}$,
            xmin = 0, xmax = \XMAX,
            ymin = 0, ymax = \YMAX,
            axis y line=right, %y軸を右に寄せる
            axis x line=top, %x軸を上に寄せる
            x dir=reverse, %軸の向きを反対にする
            y dir=reverse, %軸の向きを反対にする
            y axis line style={->},
            x axis line style={->}
        ]

        % 緑色の曲線の式を表示
        \addplot[green,samples = 1000]{\U^(1/(1-\Cbeta))/x^(\Cbeta/(1-\Cbeta))};

    \end{axis}
\end{tikzpicture}

\end{document}

f:id:zenkashiki011:20211210165446p:plain

このグラフは、まず普通の向きの軸でオレンジ色の曲線のグラフを描いたあと、そのグラフの上に逆向きにしたx軸とy軸とその軸の向きにしたがって描いた緑色の曲線のグラフを重ねて描いています。オレンジ色の曲線と緑色の曲線は関数として同じですが、軸の向きが逆なので180°回転しています。

使い方

一つ目の\begin{axis}~\end{axis}内にaddplotで指定したグラフは普通の方向に、2つ目の\begin{axis}~\end{axis}内に指定したグラフは180°逆方向に描画されます。

曲線の式は、30行目などのaddplotコマンドの{}内に{f(x)}の形で書きます。今回の例では、コブダグラス型の効用関数を入れています。陰関数の場合は必ず陽関数に直す必要があります。

例えば、コブダグラス型効用関数は通常、以下の(1)のように表されます。これは陰関数の形です。

\displaystyle{
x^{\alpha}_{a} x^{1-\alpha}_{b}=\bar{U}\tag{1}
}

{}内に入れる際は(2)の形に変形する必要があります。これは\displaystyle{
x _ {b}=(x _ {a}の式)
}の形なので、陽関数です。

\displaystyle{
x_{b}=\frac{\bar{U}^{\frac{1}{1-\alpha}}}{x_{a}^{\frac{\alpha}{1-\alpha}}}\tag{2}
}


addplotの{}内はこの形で式を書いてあります。この形ではαが式にたくさん出てくるので、値の変更を簡便にするために\defを使い変数を定義しています。αの値を変更したいときは、12行目の{}内の数字を変更すれば簡単に変更できます。 {}内にxを入れれば、y=xのグラフが描画できますし、いろいろな関数が表示可能です。まあ、エッジワースボックスならコブダグラス関数の出番が多いと思います。

x軸やy軸の最大値も、9,10行目の{}内の数字を変えて\XMAXと\YMAXの値を変更することで変更可能です。


みなさんもぜひこれを使ってグリグリとエッジワースしてみてください。
ああ、均衡均衡♡