核心模型
核心模型涵盖平滑偏好、折点与线性偏好,以及具有收入或参考点效应的偏好。 先选择模型分组,再用选项卡切换并比较模型。
平滑偏好
这组模型会产生平滑的无差异曲线;价格与收入为正时,通常会得到内点解。
Cobb-Douglas 是描述平滑、严格凸偏好的标准模型。
指数决定两种商品在效用中的相对权重。无差异曲线会接近两轴,但不会接触两轴。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
alpha |
0.5 |
商品 \(x\) 的权重 |
beta |
0.5 |
商品 \(y\) 的权重 |
代码
from econ_viz import Canvas, levels, solve
from econ_viz.models import CobbDouglas
model = CobbDouglas(alpha=0.5, beta=0.5)
eq = solve(model, px=2.0, py=3.0, income=30.0)
(
Canvas(x_max=20, y_max=15, title="Cobb-Douglas")
.add_utility(model, levels=levels.around(eq.utility, n=5))
.add_budget(2.0, 3.0, 30.0, fill=True)
.add_equilibrium(eq, show_ray=True)
.save("cobb_douglas.png")
)

CES 能在保持平滑偏好的同时,调整两种商品的替代难易度。
替代弹性是 \(\sigma=1/(1-\rho)\)。改变 \(\rho\) 时,CES 会接近 Cobb-Douglas、完全互补或完全替代。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
alpha |
0.5 |
商品 \(x\) 的权重 |
beta |
0.5 |
商品 \(y\) 的权重 |
rho |
0.5 |
替代参数,且 \(\rho\ne1\) |
代码
from econ_viz import Canvas, levels, solve
from econ_viz.models import CES
model = CES(alpha=0.5, beta=0.5, rho=-0.5)
eq = solve(model, px=2.0, py=3.0, income=30.0)
(
Canvas(x_max=20, y_max=15, title="CES")
.add_utility(model, levels=levels.around(eq.utility, n=5))
.add_budget(2.0, 3.0, 30.0)
.add_equilibrium(eq)
.save("ces.png")
)

Translog 是描述平滑偏好的灵活对数二次模型。
二次项与交叉项让曲率能随消费束改变。所有 \(\beta\) 系数都设为零时, 会得到类似 Cobb-Douglas 的对数线性形式。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
alpha_0 |
0.0 |
对数效用截距 |
alpha_x |
0.5 |
\(\ln x\) 的一次项权重 |
alpha_y |
0.5 |
\(\ln y\) 的一次项权重 |
beta_xx |
0.0 |
\(x\) 方向的曲率 |
beta_yy |
0.0 |
\(y\) 方向的曲率 |
beta_xy |
0.0 |
\(x\) 与 \(y\) 的交叉效应 |
代码
from econ_viz import Canvas, levels, solve
from econ_viz.models import Translog
model = Translog(alpha_x=0.6, alpha_y=0.4, beta_xy=0.12)
eq = solve(model, px=2.0, py=3.0, income=30.0)
(
Canvas(x_max=18, y_max=12, title="Translog")
.add_utility(model, levels=levels.around(eq.utility, n=4))
.add_budget(2.0, 3.0, 30.0)
.add_equilibrium(eq)
.save("translog.png")
)

折点与角点
这组模型体现非光滑或线性偏好如何改变最优点的位置。
完全互补偏好描述以固定比例搭配消费的商品。
无差异曲线呈 L 型。最优点位于两个加权数量相等的折点。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
a |
1.0 |
商品 \(x\) 的权重 |
b |
1.0 |
商品 \(y\) 的权重 |
代码
from econ_viz import Canvas, levels, solve
from econ_viz.models import Leontief
model = Leontief(a=1.0, b=1.0)
eq = solve(model, px=2.0, py=3.0, income=30.0)
(
Canvas(x_max=20, y_max=15, title="完全互补")
.add_utility(
model,
levels=levels.around(eq.utility, n=5),
show_rays=True,
show_kinks=True,
)
.add_budget(2.0, 3.0, 30.0)
.add_equilibrium(eq)
.save("leontief.png")
)

完全替代偏好让两种商品之间的效用交换比例保持固定。
无差异曲线是直线。消费者通常只选择每元边际效用较高的商品,因此形成角点解。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
a |
1.0 |
商品 \(x\) 的边际效用 |
b |
1.0 |
商品 \(y\) 的边际效用 |
代码
from econ_viz import Canvas, levels, solve
from econ_viz.models import PerfectSubstitutes
model = PerfectSubstitutes(a=1.0, b=2.0)
eq = solve(model, px=2.0, py=3.0, income=30.0)
(
Canvas(x_max=20, y_max=15, title="Perfect Substitutes")
.add_utility(model, levels=levels.around(eq.utility, n=5))
.add_budget(2.0, 3.0, 30.0)
.add_equilibrium(eq)
.save("perfect_substitutes.png")
)

最大值效用只取每个消费组合中较大的加权数量。
每条无差异曲线有两条朝坐标轴延伸的直角线段,因此偏好不是凸的。在 线性预算约束下,最优选择通常落在加权效用较高的轴截距。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
a |
1.0 |
商品 \(x\) 的权重 |
b |
1.0 |
商品 \(y\) 的权重 |
代码
import numpy as np
from econ_viz import Canvas, levels, solve
from econ_viz.models import CustomUtility
a, b = 1.0, 1.0
model = CustomUtility(
func=lambda x, y: np.maximum(a * x, b * y),
name="maximum",
)
eq = solve(model, px=2.0, py=3.0, income=30.0)
(
Canvas(x_max=25, y_max=20, title="最大值效用")
.add_utility(model, levels=levels.around(eq.utility, n=5))
.add_budget(2.0, 3.0, 30.0)
.add_equilibrium(eq)
.save("maximum.png")
)

收入与参考点
这组模型加入特殊收入效应、最低消费量或偏好的消费参考点。
拟线性偏好让其中一种商品以线性方式进入效用。
得到内点解后,非线性商品没有收入效应。linear_in 可以对调 \(x\) 与 \(y\)
的角色。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
v_func |
numpy.log |
递增且凹的函数 \(f\) |
linear_in |
"y" |
线性进入的商品 |
代码
import numpy as np
from econ_viz import Canvas, levels, solve
from econ_viz.models import QuasiLinear
model = QuasiLinear(v_func=np.log, linear_in="y")
eq = solve(model, px=2.0, py=1.0, income=20.0)
(
Canvas(x_max=15, y_max=15, title="Quasi-Linear")
.add_utility(model, levels=levels.around(eq.utility, n=5))
.add_budget(2.0, 1.0, 20.0)
.add_equilibrium(eq)
.save("quasi_linear.png")
)

Stone-Geary 在 Cobb-Douglas 中加入最低消费需求。
消费者先满足最低消费量 \(\bar{x}\) 与 \(\bar{y}\),再像 Cobb-Douglas 消费者 一样分配剩余收入。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
alpha |
0.5 |
超额 \(x\) 的权重 |
beta |
0.5 |
超额 \(y\) 的权重 |
bar_x |
1.0 |
最低消费量 \(\bar{x}\) |
bar_y |
1.0 |
最低消费量 \(\bar{y}\) |
代码
from econ_viz import Canvas, levels, solve
from econ_viz.models import StoneGeary
model = StoneGeary(alpha=0.5, beta=0.5, bar_x=2.0, bar_y=2.0)
eq = solve(model, px=2.0, py=3.0, income=30.0)
(
Canvas(x_max=20, y_max=15, title="Stone-Geary")
.add_utility(model, levels=levels.around(eq.utility, n=5))
.add_budget(2.0, 3.0, 30.0, fill=True)
.add_equilibrium(eq)
.save("stone_geary.png")
)

饱和偏好有一个使效用达到最高的极乐点。
离开 \((x^*,y^*)\) 后,效用往任何方向都会下降,因此无差异曲线是封闭椭圆, 且偏好不具单调性。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
bliss_x |
5.0 |
极乐点坐标 \(x^*\) |
bliss_y |
5.0 |
极乐点坐标 \(y^*\) |
a |
1.0 |
\(x\) 轴方向的曲率 |
b |
1.0 |
\(y\) 轴方向的曲率 |
代码
import numpy as np
from econ_viz import Canvas, levels
from econ_viz.models import Satiation
model = Satiation(bliss_x=6.0, bliss_y=4.0)
x = np.linspace(0.1, 12.0, 300)
y = np.linspace(0.1, 10.0, 300)
X, Y = np.meshgrid(x, y)
(
Canvas(x_max=12, y_max=10, title="Satiation")
.add_utility(model, levels=levels.percentile(model(X, Y), n=5))
.save("satiation.png")
)

自定义函数与多商品 Cobb-Douglas 模型请参阅高级模型。