Skip to content

Behavioural Economics 中文导航

原文: Behavioural Economics Experiment Analysis
分类: 行为经济学实验分析
大小: 课程项目
语言: Python + Jupyter


📚 项目简介

Behavioural Economics 是阿姆斯特丹大学 (University of Amsterdam) 行为经济学课程 (2018-2019) 的实验分析项目。该项目复现了 Nagel (1995) 的经典"猜数字"博弈实验,并添加了一个创新的处理组:三人小组 vs 个人竞争。

GitHub: https://github.com/juangesino/BehaviouralEconomics

原始实验

  • Nagel, R. (1995). "Unraveling in guessing games: An experimental study." The American Economic Review, 85(5), 1313-1326.

🔧 实验设计

实验类型:猜数字博弈 (Guessing Game)

游戏规则:

1. 每个参与者选择一个 0-100 之间的数字
2. 计算所有参与者选择的平均值
3. 获胜者:选择的数字最接近平均值的 2/3
4. 目标:预测其他人的选择并调整策略

创新处理组

组别 设置 研究问题
对照组 个人独立参与 基准行为
处理组 3 人小组,先独立填写→讨论→达成共识 群体决策 vs 个人决策

实验流程:

每轮/阶段:
1. 小组成员各自记录个人选择 (独立)
2. 小组成员讨论
3. 提交小组最终选择 (共识)
4. 市场竞争:5 个小组 (或个人) 竞争


📁 目录结构

BehaviouralEconomics/
├── data/                   # 数据目录
│   ├── raw/               # 原始实验数据
│   ├── cleaned/           # 清洗后数据
│   └── final/             # 最终分析数据
├── notebooks/              # Jupyter 分析笔记
│   ├── 01_data_exploration.ipynb
│   ├── 02_individual_analysis.ipynb
│   ├── 03_group_analysis.ipynb
│   └── 04_comparison.ipynb
├── src/                   # 源代码
│   ├── data_cleaning.py
│   ├── analysis.py
│   └── visualization.py
├── figures/               # 输出图表
├── requirements.txt       # 依赖
├── LICENSE                # 许可证 (GPL v3)
└── README.md              # 主文档

🚀 快速开始

安装

# 克隆仓库
cd /workspace/code-examples/BehaviouralEconomics

# 环境要求
# - JupyterLab
# - Python 3.7+

# 安装依赖
pip install -r requirements.txt

# 主要依赖:
# - numpy
# - pandas
# - matplotlib
# - scipy
# - statsmodels

运行分析

# 启动 Jupyter
jupyter lab

# 按顺序运行笔记:
# 1. 01_data_exploration.ipynb → 数据探索
# 2. 02_individual_analysis.ipynb → 个人分析
# 3. 03_group_analysis.ipynb → 小组分析
# 4. 04_comparison.ipynb → 组间对比

📊 数据分析

1. 数据探索

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('data/final/experiment_data.csv')

# 基本信息
print(f"参与者数量:{df['subject_id'].nunique()}")
print(f"总轮数:{df['round'].max()}")
print(f"组别分布:{df['group_type'].value_counts()}")

# 选择数字的分布
plt.hist(df['choice'], bins=20, edgecolor='black')
plt.xlabel('选择的数字')
plt.ylabel('频数')
plt.title('猜数字选择分布')
plt.axvline(df['choice'].mean(), color='red', linestyle='--')
plt.text(df['choice'].mean(), plt.ylim()[1]*0.9, 
         f'均值:{df["choice"].mean():.1f}')
plt.show()

2. 学习效应分析

# 分析随轮次的学习效应
import numpy as np

# 按轮次计算平均选择
round_means = df.groupby('round')['choice'].mean()

plt.plot(round_means.index, round_means.values, 'o-', linewidth=2)
plt.xlabel('轮次')
plt.ylabel('平均选择')
plt.title('学习效应:随轮次的选择变化')
plt.grid(alpha=0.3)

# 理论均衡值 (纳什均衡 = 0)
plt.axhline(y=0, color='red', linestyle='--', label='纳什均衡')
plt.legend()
plt.show()

# 预期模式:
# 早期轮次:选择较高 (如 50-70)
# 后期轮次:逐渐降低 (接近 0)

3. 群体 vs 个人对比

# 比较个人组和小组的选择
individual = df[df['group_type'] == 'individual']['choice']
group = df[df['group_type'] == 'group']['choice']

# 箱线图对比
plt.boxplot([individual, group], labels=['个人', '小组'])
plt.ylabel('选择的数字')
plt.title('个人决策 vs 群体决策')
plt.grid(alpha=0.3)
plt.show()

# 统计检验
from scipy import stats
t_stat, p_value = stats.ttest_ind(individual, group)
print(f"t 统计量:{t_stat:.3f}")
print(f"p 值:{p_value:.4f}")
print(f"结论:{'差异显著' if p_value < 0.05 else '差异不显著'}")

4. 推理层级分析

# 计算推理层级 (Level-k 模型)
# Level-0: 随机选择 (期望值 50)
# Level-1: 认为其他人是 Level-0 → 选择 50 × 2/3 = 33
# Level-2: 认为其他人是 Level-1 → 选择 33 × 2/3 = 22
# ...

def calculate_level(choice):
    """估计参与者的推理层级"""
    if choice > 45:
        return 0  # Level-0 (随机)
    elif choice > 30:
        return 1  # Level-1
    elif choice > 15:
        return 2  # Level-2
    elif choice > 5:
        return 3  # Level-3
    else:
        return 4  # Level-4+ (接近均衡)

df['estimated_level'] = df['choice'].apply(calculate_level)

# 层级分布
level_dist = df['estimated_level'].value_counts().sort_index()
plt.bar(level_dist.index, level_dist.values)
plt.xlabel('推理层级 (Level-k)')
plt.ylabel('人数')
plt.title('推理层级分布')
plt.xticks(range(5))
plt.show()

📖 理论基础

猜数字博弈 (Beauty Contest Game)

纳什均衡分析:

假设所有人都理性且知道其他人也理性:
- 如果所有人都随机选择,平均 = 50,最优选择 = 50 × 2/3 = 33
- 但如果所有人都想到这一点,平均 = 33,最优选择 = 33 × 2/3 = 22
- 继续迭代... 最终收敛到 0

纳什均衡:所有人都选择 0

Level-k 推理模型

层级 推理过程 典型选择
Level-0 随机选择 50
Level-1 认为别人是 L0 → 50×⅔ 33
Level-2 认为别人是 L1 → 33×⅔ 22
Level-3 认为别人是 L2 → 22×⅔ 15
Level-4+ 更高阶推理 <10

群体决策假设

研究假设:

H1: 群体决策比个人决策更接近纳什均衡
H2: 群体讨论会提高推理层级
H3: 群体学习速度更快


💡 预期发现

1. 学习效应

- 早期轮次:选择较高 (30-50)
- 后期轮次:逐渐降低 (10-20)
- 但很少完全收敛到 0 (有限理性)

2. 群体效应

- 群体选择可能更理性 (更接近均衡)
- 群体内讨论提升推理层级
- 但可能存在"群体极化"现象

3. 个体差异

- 部分参与者始终选择随机 (Level-0)
- 部分参与者快速学习 (Level-3+)
- 大多数在 Level-1 到 Level-2 之间

🔗 相关资源


📚 参考资料

核心论文

Nagel, R. (1995). 
"Unraveling in guessing games: An experimental study." 
The American Economic Review, 85(5), 1313-1326.

延伸阅读

- Camerer, C. F. (2003). Behavioral Game Theory.
- Keynes, J. M. (1936). The General Theory (Chapter 12: Beauty Contest).
- Stahl, D. O., & Wilson, P. W. (1995). On players' models of other players.

🛠️ 扩展分析建议

1. 动态学习模型

# 拟合学习模型
from scipy.optimize import minimize

def learning_model(params, choices):
    """
    指数加权学习模型
    choice_t = w * choice_{t-1} + (1-w) * target_{t-1}
    """
    w = params[0]
    # 计算预测误差
    predictions = [choices[0]]  # 第一轮预测
    for t in range(1, len(choices)):
        pred = w * choices[t-1] + (1-w) * (2/3 * np.mean(choices[:t]))
        predictions.append(pred)

    # 最小化平方误差
    mse = np.mean((np.array(choices) - np.array(predictions))**2)
    return mse

# 拟合最优学习率
result = minimize(learning_model, x0=[0.5], args=(df['choice'].values,))
optimal_w = result.x[0]
print(f"最优学习率:{optimal_w:.3f}")

2. 社会网络分析

# 如果记录了讨论过程,可以分析:
# - 谁的意见影响力最大
# - 群体共识形成过程
# - 意见领袖识别

3. 跨组比较

# 添加更多处理组:
# - 2 人组 vs 3 人组 vs 5 人组
# - 有激励 vs 无激励
# - 不同文化背景

🎓 学习路径

1. 阅读 Nagel (1995) 原始论文
2. 运行数据探索笔记
3. 理解 Level-k 模型
4. 复现分析结果
5. 设计新实验

本地路径: /workspace/code-examples/BehaviouralEconomics/
创建时间: 2026-06-01
难度: ⭐⭐⭐ (中级实验分析)


**Behavioural Economics 中文导航 | 行为经济学实验分析** [返回代码索引](../../README_UPDATED.md) | [决策科学资源大全](../../docs/resources/decision-science-comprehensive-resources.md)