36  黄金价格与美债收益率的相关分析

36.1 引言黄金与国债的负相关关系

经典关系:

  • 实际利率 = 名义利率 - 通胀率
  • 黄金: 不生息资产,实际利率上升时吸引力下降
  • 国债: 无风险资产,收益率上升吸引力上升

理论预期: 黄金价格与国债收益率负相关

36.2 本章学习目标

先修内容:阅读本章前,建议先完成第 章节 10 章(Pandas 数据框与 Series 基础)、第 章节 21 章(股票相关性热力图)与第 章节 34 章(相关系数的数学定义与收益率口径)。

  1. 黄金与美债收益率负相关的经济学机制(实际利率、机会成本与替代效应);
  2. 读取并整理两条日期倒序的时间序列,对齐后计算 Pearson 相关系数;
  3. 水平值相关与收益率(差分)相关两种口径的差异与陷阱;
  4. 用双轴折线图对照两个量纲不同序列的走势;
  5. 识别通胀预期、避险需求等混杂因素导致的经典负相关关系背离。

36.3 数据准备

任务要求:将下方代码原样输入教学平台并运行(注释可省略)。该代码读取黄金期货与美国十年期国债收益率两个 CSV 数据文件,把日期设为索引并转为日期类型、按时间正序重排后提取收盘列,最后计算两条序列的相关系数并输出。

列表 36.1: 平台原始代码
# 注:该代码块读取教学平台的 OSS 镜像直链,联网即可在本地复现(本机实测相关系数约 -0.7873)
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
import pandas as pd  # 导入Pandas数据分析库
#读取黄金期货历史数据.csv和美国十年期国债收益率历史数据.csv
df1 = pd.read_csv('https://huoran.oss-cn-shenzhen.aliyuncs.com/20230411/csv/1645737586192834560.csv', thousands=',')

# 从CSV文件读取数据存入df2
df2 = pd.read_csv('https://huoran.oss-cn-shenzhen.aliyuncs.com/20230411/csv/1645737641935134720.csv', thousands=',')

#将index设置为日期,并转换为datetime类型
df1.set_index('日期', inplace=True)
df1.index = pd.to_datetime(df1.index)  # 转换为日期时间格式
df2.set_index('日期', inplace=True)  # 将日期列设为df2数据框的索引
df2.index = pd.to_datetime(df2.index)  # 转换为日期时间格式
#数据倒转
df1 = df1.iloc[::-1]
df2 = df2.iloc[::-1]  # 将数据按逆序排列
#提取黄金期货历史数据.csv中的收盘价,并转换为float类型
df1 = df1['收盘']
df1 = df1.astype(float)  # 转换数据类型
#提取美国十年期国债收益率历史数据.csv中的收盘价,并转换为float类型
df2 = df2['收盘']
df2 = df2.astype(float)  # 转换数据类型
 
#计算相关系数
result = df1.corr(df2)
print(result)  # 输出分析结果数据

预期输出(本机实际运行结果,联网读取平台 OSS 直链复现,具体以平台运行结果为准):平台输出一个单一数值 result:

-0.7873 左右(约 -0.79)(尾数随数据快照与运行环境略有差异)

即黄金期货收盘价与十年期美债收益率水平值的 Pearson 相关系数约为 -0.79(数据为 2003-04-01 至 2023-03-01 的月度观测,两条序列各 240 期)。判读要点:该数值介于 -1 与 1 之间,符号说明方向、绝对值说明线性联动强度,落入本章解读框架的”强负相关”分支;但如”口径说明”所述,这是对水平值的直接相关,受共同趋势影响较大,不等于逐期变动的联动,更不能直接作因果解读——作为对照,同一数据取对数收益率后的相关系数约为 -0.28,强度明显减弱。

36.4 相关性计算

口径说明:平台代码是对黄金价格与美债收益率的水平值直接计算 Pearson 相关系数;两条序列都是非平稳的价格水平序列,水平相关主要受共同趋势支配,得到的高相关未必代表逐期变动之间的联动。严格的相关性研究应先转换为差分或对数收益率再计算相关(参见第 章节 21 章与第 章节 34 章的做法),水平相关与收益率相关两种口径的结果甚至可能符号相反。

列表 36.2: 黄金价格与国债收益率相关性分析
# 注:本块是平台任务的同型演示块;变量 gold_price/treasury_yield 对应平台任务的 df1/df2 收盘序列,需先完成平台任务的数据准备后再运行(或在本地用 OSS 直链自行取数)

# =============================================================================
# 题目: 计算并解读黄金价格与国债收益率的相关系数
# =============================================================================
# 本任务演示如何使用Pandas计算两个时间序列的相关系数,
# 并根据相关系数的大小解释两个变量之间的线性关系强度

# ==================== 计算相关系数 ====================
# gold_price.corr(treasury_yield): 计算两个Series的Pearson相关系数
#   - gold_price: 第一个Series(黄金价格)
#   - treasury_yield: 第二个Series(国债收益率)
#   - .corr(): Series的方法,计算与另一个Series的相关系数
#
# Pearson相关系数公式:
#   ρ = Cov(X, Y) / (σ_X × σ_Y)
#   其中: Cov是协方差, σ是标准差
#
# 相关系数的取值范围: [-1, 1]
#   - ρ = 1: 完全正相关(一个变量增加,另一个也增加)
#   - ρ = -1: 完全负相关(一个变量增加,另一个减少)
#   - ρ = 0: 无线性相关
correlation = gold_price.corr(treasury_yield)
# correlation: 存储计算得到的相关系数值
# 理论预期: 黄金价格与国债收益率应该呈负相关(ρ < 0)
# 原因: 国债收益率上升→实际利率上升→持有黄金的机会成本增加→黄金需求下降→价格下跌

# ==================== 打印相关系数结果 ====================
# f'{correlation:.4f}': f-string格式化输出
#   - f: 格式化字符串前缀
#   - {}: 占位符,里面填写变量名
#   - :.4f: 格式说明符,.4表示保留4位小数,f表示浮点数
# 示例: 如果correlation = -0.654321..., 输出为"-0.6543"
print(f'黄金价格与国债收益率相关系数: {correlation:.4f}')
# 输出示例: 黄金价格与国债收益率相关系数: -0.6543
# 这表示两者呈中度负相关

# ==================== 结果解读 ====================
# 根据相关系数的大小,解释两个变量之间的关系强度
# 使用if-elif-else结构进行多条件判断
print('\n相关性解读:')
# \n表示换行,使输出更清晰

# ==================== 情况1: 强负相关 ====================
# if correlation < -0.5: 如果相关系数小于-0.5
#   - 负号表示负相关(一个上升,另一个下降)
#   - 绝对值大于0.5表示关系较强
#   - 这符合金融理论的预期
if correlation < -0.5:
    print('  强负相关,符合理论预期')
    # 输出: 强负相关,符合理论预期
    print('  国债收益率上升时,黄金价格下跌')
    # 输出: 国债收益率上升时,黄金价格下跌
    # 经济学解释:
    #   1. 替代效应: 国债收益率上升→持有国债更有吸引力→资金从黄金流向国债
    #   2. 机会成本: 持有黄金不产生利息,国债收益率上升→持有黄金的机会成本增加
    #   3. 美元汇率: 国债收益率上升→美元升值→黄金(美元计价)下跌

# ==================== 情况2: 中度负相关 ====================
# elif: else if的缩写,表示"否则如果"
# 当前面的条件不满足,但这个条件满足时执行
elif correlation < -0.3:
    # 相关系数在-0.5到-0.3之间,存在中度负相关
    # 虽然方向正确,但关系不是特别强
    print('  中度负相关')
    # 输出: 中度负相关
    print('  大部分时候符合负相关关系')
    # 输出: 大部分时候符合负相关关系
    # 说明:
    #   负相关关系存在,但不够稳定
    #   可能受其他因素干扰(如通胀预期、避险需求等)

# ==================== 情况3: 弱相关 ====================
elif correlation < 0.3:
    # 相关系数在-0.3到0.3之间,接近0,表示几乎没有线性关系
    # 这种情况下,两个变量的变动几乎独立
    print('  弱相关')
    # 输出: 弱相关
    print('  其他因素影响更大')
    # 输出: 其他因素影响更大
    # 说明:
    #   黄金价格和国债收益率之间的关系不明显
    #   可能有其他因素主导黄金价格(如通胀、地缘政治、美元指数等)

# ==================== 情况4: 正相关或无关 ====================
else:
    # 相关系数大于0.3,甚至为正,与理论预期相反
    # 这是一个意外结果,需要寻找特殊原因
    print('  正相关或接近0')
    # 输出: 正相关或接近0
    print('  不符合经典理论,可能有其他主导因素')
    # 输出: 不符合经典理论,可能有其他主导因素
    # 可能的原因:
    #   1. 通胀预期高: 通胀上升→黄金保值需求增加→金价上涨
    #                同时通胀导致国债收益率上升(为了补偿通胀)
    #   2. 避险需求: 地缘政治风险→资金同时流入黄金和国债(都是避险资产)
    #   3. 实际利率为负: 通胀>名义利率→实际利率下降→黄金吸引力上升

36.5 可视化分析

列表 36.3
# 注:该代码块依赖的数据来自上方平台任务代码块,本块承接上方平台任务的代码与数据(变量沿用平台任务)

# =============================================================================
# 题目: 绘制黄金价格与国债收益率的双轴趋势图
# =============================================================================
# 本任务演示如何使用matplotlib创建双Y轴图表,
# 在同一张图上展示两个量纲不同的变量(价格和百分比)

# ==================== 创建画布和主坐标轴 ====================
# plt.subplots(): 创建一个图表(figure)和一个或多个子图(axes)
# figsize=(14, 6): 设置图表大小为14英寸×6英寸
#   - 14英寸: 宽度,适合展示较长的时间序列
#   - 6英寸: 高度,提供足够的垂直空间
# fig: Figure对象,整个图表的容器
# ax1: Axes对象,主坐标轴(左侧Y轴)
fig, ax1 = plt.subplots(figsize=(14, 6))
# 返回: (Figure, Axes)的元组

# ==================== 绘制黄金价格(左轴) ====================
# ax1.plot(): 在主坐标轴上绘制折线图
#   - gold_price.index: X轴数据(日期)
#   - gold_price.values: Y轴数据(黄金价格)
#   - 'b-': 颜色和线型,'b'=蓝色(blue),'-'=实线
#   - label='黄金价格': 图例标签
#   - linewidth=2: 线宽为2,使线条更醒目
ax1.plot(gold_price.index, gold_price.values, 'b-', label='黄金价格', linewidth=2)
# 在左轴上绘制黄金价格的蓝色折线

# ==================== 设置主坐标轴标签 ====================
# ax1.set_xlabel(): 设置X轴标签
#   - '日期': 标签文本
#   - fontsize=12: 字体大小为12磅
ax1.set_xlabel('日期', fontsize=12)
# X轴显示日期

# ax1.set_ylabel(): 设置Y轴标签
#   - '黄金价格': 标签文本
#   - fontsize=12: 字体大小
#   - color='b': 标签颜色为蓝色,与数据线颜色一致
ax1.set_ylabel('黄金价格', fontsize=12, color='b')
# 左Y轴显示黄金价格,标签为蓝色

# ax1.tick_params(): 设置坐标轴刻度样式
#   - axis='y': 只设置Y轴的刻度
#   - labelcolor='b': 刻度标签的颜色为蓝色
ax1.tick_params(axis='y', labelcolor='b')
# 左Y轴的刻度标签设为蓝色

# ax1.legend(): 显示图例
#   - loc='upper left': 图例位置在左上角
ax1.legend(loc='upper left')
# 在左上角显示"黄金价格"的图例

# ==================== 创建次坐标轴(右轴) ====================
# ax1.twinx(): 创建共享X轴的次Y轴
#   - twinx: "twin x-axis"的缩写,表示X轴相同,Y轴独立
#   - 返回新的Axes对象ax2,与ax1共享X轴但Y轴独立
# 为什么需要次坐标轴?
#   黄金价格(如1500-2000美元/盎司)和国债收益率(如1%-5%)的数值范围差异很大
#   如果用同一个Y轴,国债收益率的曲线会几乎贴着X轴,看不清变化趋势
#   次坐标轴可以让两个序列都在合适的范围内显示
ax2 = ax1.twinx()
# 创建右Y轴

# ==================== 绘制国债收益率(右轴) ====================
# ax2.plot(): 在次坐标轴上绘制折线图
#   - treasury_yield.index: X轴数据(日期,与左轴共享)
#   - treasury_yield.values: Y轴数据(国债收益率)
#   - 'r-': 颜色和线型,'r'=红色(red),'-'=实线
#   - label='国债收益率': 图例标签
#   - linewidth=2: 线宽为2
ax2.plot(treasury_yield.index, treasury_yield.values, 'r-', label='国债收益率', linewidth=2)
# 在右轴上绘制国债收益率的红色折线

# ==================== 设置次坐标轴标签 ====================
# ax2.set_ylabel(): 设置次Y轴标签
#   - '国债收益率(%)': 标签文本,单位是百分比
#   - fontsize=12: 字体大小
#   - color='r': 标签颜色为红色,与数据线颜色一致
ax2.set_ylabel('国债收益率(%)', fontsize=12, color='r')
# 右Y轴显示国债收益率,标签为红色

# ax2.tick_params(): 设置次Y轴刻度样式
#   - axis='y': 只设置Y轴
#   - labelcolor='r': 刻度标签为红色
ax2.tick_params(axis='y', labelcolor='r')
# 右Y轴的刻度标签设为红色

# ax2.legend(): 显示图例
#   - loc='upper right': 图例位置在右上角
ax2.legend(loc='upper right')
# 在右上角显示"国债收益率"的图例

# ==================== 设置图表标题 ====================
# plt.title(): 设置图表标题
#   - '黄金价格与国债收益率趋势': 标题文本
#   - fontsize=14: 字体大小为14磅(比轴标签大)
#   - fontweight='bold': 字体加粗,使标题更醒目
plt.title('黄金价格与国债收益率趋势', fontsize=14)
# 设置图表主标题

# ==================== 优化布局 ====================
# fig.tight_layout(): 自动调整子图参数,避免元素重叠
#   - 自动调整边距,确保标签、标题不会被截断
#   - 避免X轴日期标签、Y轴标签、图例等元素相互遮挡
fig.tight_layout()
# 优化图表布局

# ==================== 显示图表 ====================
# plt.show(): 显示创建的图表
#   - 在Jupyter Notebook中会直接显示在输出单元中
#   - 在Python脚本中会弹出窗口显示图表
plt.show()
# 展示双Y轴趋势图

36.6 经济学解释

负相关机制:

  1. 替代效应: 国债收益率上升→持有国债吸引力↑→黄金需求↓
  2. 机会成本: 国债收益率↑→持有黄金的机会成本↑
  3. 美元汇率: 国债收益率↑→美元升值→黄金(美元计价)下跌

背离情况:

  • 通胀预期高: 通胀上升→黄金保值需求↑→金价上涨
  • 避险需求: 地缘政治风险→黄金和美债同涨
  • 实际利率: 通胀>名义利率→实际利率↓→黄金上涨

相关不等于因果。本章代码算出的相关系数,只说明黄金价格与美债收益率的变动在统计上共生,并不能证明”收益率上升导致金价下跌”或反过来。当通胀预期升温时,金价因保值需求上涨、美债收益率因通胀补偿上升,两者会同向变动——此时观察到的相关(甚至正相关)是被通胀预期这一混杂因素同时驱动的,并非彼此作用的结果;地缘冲突引发的避险情绪也会让黄金与美债同涨,掩盖实际利率机制下的负相关。作因果解读前,必须先排除这类共同驱动因素,或借助更严格的研究设计。

36.7 本章小结

要点:

  1. 黄金不生息,美债收益率为持有黄金的机会成本,理论预期两者负相关,机制包括替代效应、机会成本与美元汇率;
  2. 两条时间序列对齐比较的前提是统一的日期索引与正确的时间顺序,本章用 set_indexpd.to_datetimeiloc[::-1] 完成;
  3. Series.corr(other) 直接输出两序列的 Pearson 相关系数;
  4. 水平值相关受共同趋势支配,严格的相关性研究应基于差分或对数收益率口径;
  5. 通胀预期、避险需求等混杂因素可使经典负相关阶段性失效。

易错点:

  1. 数据日期倒序未重排就计算相关,虽不影响相关系数本身,但会让后续收益率计算与绘图的时间方向错乱;
  2. 把水平值的高相关直接当作”两资产联动紧密”的证据,忽视口径差异(见”口径说明”);
  3. 见到与理论预期相反的符号就断言”理论错了”,而不排查混杂因素与数据窗口;
  4. 把相关系数读成因果强度,得出”买黄金会推高国债收益率”一类的错误推断。

36.8 动手与思考

以下练习每题附参考答案(默认折叠)。请先独立完成并写下你的判断,再点开对照,最后上机验证。

  1. 输出预测:五个交易日的数据为 X=(-2, -1, 0, 1, 2)(黄金日涨跌%)、Y=(4, 2, 0, -2, -4)(美债收益率日变动基点)。先笔算相关系数;再把最后一组观测改为 (2, 1)(地缘冲突避险,两者同涨),预测相关系数如何变化,并用 np.corrcoef 验证。

    参考答案(先写下你的预测再点开)

    解题思路:笔算用 \(r = \sum(x_i-\bar{x})(y_i-\bar{y})/\sqrt{\sum(x_i-\bar{x})^2\sum(y_i-\bar{y})^2}\)。原序列:\(\bar{x}=0\)\(\bar{y}=0\),交叉乘积和 \((-2)(4)+(-1)(2)+0+(1)(-2)+(2)(-4) = -20\)\(\sum x^2 = 10\)\(\sum y^2 = 40\),故 \(r = -20/\sqrt{400} = -1\)——Y 恰好是 X 的 -2 倍,完全负线性相关。改为 (2, 1) 后:\(\bar{y}\) 变为 \((4+2+0-2+1)/5 = 1\),须先中心化再求和,离差乘积和为 \((-2)(3)+(-1)(1)+0(-1)+(1)(-3)+(2)(0) = -10\)\(\sum(y-\bar{y})^2 = 9+1+1+9+0 = 20\),故 \(r = -10/\sqrt{10\times20} = -0.7071\)。方向仍为负,但强度明显减弱:一天“同涨”的避险观测抵消了部分负相关证据——这也说明相关系数对个别极端观测敏感,短窗口的相关系数并不稳健。

    # 验证脚本:用np.corrcoef核对两组相关系数
    import numpy as np  # 导入NumPy数值计算库
    gold_change_pct = np.array([-2, -1, 0, 1, 2])  # 黄金日涨跌幅(%)
    yield_change_bp = np.array([4, 2, 0, -2, -4])  # 美债收益率日变动(基点)
    print('原序列 r =', np.corrcoef(gold_change_pct, yield_change_bp)[0, 1])  # 笔算严格为-1
    yield_change_bp_new = np.array([4, 2, 0, -2, 1])  # 最后一组改为(2,1):避险驱动两者同涨
    print('改后 r =', np.corrcoef(gold_change_pct, yield_change_bp_new)[0, 1])  # 负相关明显减弱

    预期输出(本机 peter 环境实际运行结果,具体以平台运行结果为准):

    原序列 r = -0.9999999999999999
    改后 r = -0.7071067811865475

    (注:原序列输出 -0.9999999999999999 即 -1,偏差是二进制浮点数舍入所致;改后 -0.7071 即 \(-1/\sqrt{2}\)。)

    回扣本章:对应本章小结“要点”第 3 条(Series.corr/np.corrcoef 输出 Pearson 相关系数)与“易错点”第 3 条——观测窗口与个别样本会改变相关系数的强度甚至符号,下结论前应检查稳健性。

  2. 概念辨析:“黄金与美债收益率负相关”与”收益率上升导致金价下跌”两种说法有何本质区别?分别对应相关分析与因果分析哪一类问题?

    参考答案(点开前请先独立完成)

    解题思路:本质区别在于前者是统计描述、后者是机制断言。“黄金与美债收益率负相关”只陈述两个变量的观测数据呈现反向联动——方向(负)与强度(相关系数大小),它对“为什么”保持沉默,对应相关分析;“收益率上升导致金价下跌”则断言一条方向性的作用链条(收益率上升→实际利率上升→持有黄金的机会成本增加→金价下跌),宣称干预其中一个变量会引起另一个变量变化,对应因果分析。两者的关系是:相关是因果的必要非充分条件——因果成立必然表现为相关(或条件相关),但观测到的相关完全可能由混杂因素制造(如通胀预期同时推高金价与名义收益率)、由反向因果或共同响应产生,并不指向因果。本章正文的“相关不等于因果”正是提醒:相关系数回答“是否同向/反向变动”,因果问题需要额外的识别策略(控制变量、外生冲击、分时期比较等)才能回答。

    回扣本章:对应本章小结“易错点”第 4 条(把相关系数读成因果强度是错误推断)与正文“相关不等于因果”的讨论。

  3. 概念辨析:本章平台代码对价格水平直接算相关,第 章节 34 章对对数收益率算相关,两种口径各回答什么问题?为什么水平相关可能”虚高”?

    参考答案(点开前请先独立完成)

    解题思路:两种口径回答不同的问题。水平值相关回答“观测期内两条序列的整体位置(趋势)是否一升一降”——它把每个时点的绝对水平直接进公式;收益率(差分或对数差分)相关回答“逐期的变动是否反向联动”——先取增量再算相关。水平相关可能“虚高”的机制:价格水平是非平稳序列,各自含长期趋势或随机游走成分;只要两条序列在样本期内方向相反地漂移(金价长期上行、收益率长期下行),趋势成分就会贡献绝大多数协变动,即便逐期变动之间毫无联动,水平相关也会呈现很大的绝对值——这是共同趋势带来的虚假相关,不是联动证据。本章平台结果(约 -0.79 的水平相关)与正文对照的对数收益率口径(约 -0.28)正是实例:剔除趋势后,负相关依然存在但强度大幅减弱,说明水平口径的一部分“强负相关”来自趋势。严格的联动性与对冲有效性分析应基于收益率口径,这也是第 章节 34 章的标准做法。

    回扣本章:对应本章小结“要点”第 4 条(水平值相关受共同趋势支配,严格的相关性研究应基于差分或对数收益率口径)与“易错点”第 2 条(不把水平相关直接当作联动紧密的证据)。

  4. 变式任务:参照第 章节 34 章的做法,在平台上把两条序列先做差分或取对数收益率,再重新计算相关系数,并与水平口径的 result 对比方向与强度是否一致。

    参考答案(点开前请先独立完成)

    解题思路:改造思路——数据准备部分完全复用 列表 36.1 的流程(设日期索引、pd.to_datetimeiloc[::-1] 反转、取收盘列),在其后追加两步:把两条收盘序列按日期索引对齐合并(pd.concat(axis=1)),再取对数后一阶差分(np.log(...).diff().dropna(),即对数收益率;用 .diff() 做简单差分亦可),最后对收益率重算 corr 并与水平口径的 result 并排比较。为什么这样改:对数差分剔除了水平序列中的共同趋势,剩下的相关才是逐期变动的联动。本机于 2026-08-27 通过平台 OSS 直链实拉两份 CSV 实测(2003-04 至 2023-03 各 240 个月度观测):水平相关约 -0.7873(与平台任务的 result 一致),对数收益率相关约 -0.2830,一阶差分口径约 -0.2872——方向一致(均为负),但强度从“强负相关”大幅减弱为“弱负相关”。判读结论:剔除共同趋势后经典负相关依然存在(实际利率机制的方向性证据),但水平口径的高数值确有相当部分来自“金价长期上行、收益率长期下行”的趋势叠加;这也提醒我们,用相关系数做对冲配置决策时应以收益率口径为准。该 OSS 直链若日后失效,可在教学平台完成本题,或改用其他黄金价格与美债收益率数据源(如本地数据目录或 FRED 等公开接口),方法与流程完全一致。

    # 变式脚本:对数收益率口径重算黄金与美债收益率的相关(OSS直链本机实测)
    import numpy as np  # 导入NumPy数值计算库
    import pandas as pd  # 导入Pandas数据分析库
    gold_df = pd.read_csv('https://huoran.oss-cn-shenzhen.aliyuncs.com/20230411/csv/1645737586192834560.csv', thousands=',')  # 黄金期货月度数据
    ust_df = pd.read_csv('https://huoran.oss-cn-shenzhen.aliyuncs.com/20230411/csv/1645737641935134720.csv', thousands=',')  # 十年期美债收益率月度数据
    
    def to_ordered_series(raw_df):  # 定义整理函数:设日期索引、时间正序、取收盘列
        raw_df.set_index('日期', inplace=True)  # 日期列设为索引
        raw_df.index = pd.to_datetime(raw_df.index)  # 索引转为datetime日期类型
        return raw_df.iloc[::-1]['收盘'].astype(float)  # 倒序数据反转为时间正序并取收盘值
    
    gold_price = to_ordered_series(gold_df)  # 黄金收盘价序列
    treasury_yield = to_ordered_series(ust_df)  # 美债收益率序列
    print('水平相关: {:.4f}'.format(gold_price.corr(treasury_yield)))  # 与平台任务同口径的水平值相关
    aligned_prices = pd.concat([gold_price, treasury_yield], axis=1, keys=['gold', 'ust'])  # 按日期索引对齐合并
    log_returns = np.log(aligned_prices).diff().dropna()  # 取对数后一阶差分,得到对数收益率
    print('对数收益率相关: {:.4f}'.format(log_returns['gold'].corr(log_returns['ust'])))  # 剔除共同趋势后的逐期联动

    预期输出(本机 peter 环境于 2026-08-27 联网实拉 OSS 直链运行的结果,具体以平台运行结果为准):

    水平相关: -0.7873
    对数收益率相关: -0.2830

    注意:以上为本题变式的独立代码;列表 36.1 对应的平台原始代码块仍须原样输入教学平台,不要用本变式替换。

    回扣本章:对应本章小结“要点”第 4 条与“易错点”第 2 条——水平相关受共同趋势支配会“虚高”,收益率口径才衡量逐期联动,两种口径应对照报告。

  5. 相关不等于因果思考题:某研究员在通胀快速上行时期观察到黄金价格与美债收益率呈显著正相关,于是宣称”黄金上涨推高了国债收益率”。已知同期通胀预期同时推高金价(保值需求)与美债收益率(通胀补偿)。该结论能否作因果解读?混杂因素如何同时影响两个变量?若要辨别,你会比较哪些不同时期或不同变量的证据?

    参考答案(点开前请先独立完成)

    解题思路:结论——不能作因果解读。观测到的正相关只是“同期共生变动”的统计描述;“黄金上涨推高国债收益率”断言了方向性机制(金价的买盘传导给收益率),而题设恰好提供了更合理的解释:混杂因素。混杂因素的作用方式:通胀预期作为一个共同驱动因素,同时进入两个变量的定价方程——它推高金价(保值与抗通胀需求上升),也推高美债名义收益率(投资者要求更高的通胀补偿),于是两个变量同向上涨;观测到的正相关是两者对第三因素的共同响应叠加所致,并非彼此传导,此时把相关读成因果就是把“共同结果”误认作“因果链条”。辨别用的证据(比较不同时期与不同变量):其一,分时期比较——若正相关集中在通胀快速上行期,而在通胀平稳期两变量关系回落为经典的弱负相关,则支持“通胀预期驱动”的混杂解释,而非稳定的因果传导;其二,引入第三方变量——考察实际利率(名义收益率减通胀预期)与金价的关系,理论上金价与实际利率的负相关最稳定,若控制通胀预期后金价与名义收益率的关系明显减弱甚至转负,说明原始正相关确由通胀预期制造;其三,对照其他对通胀敏感的资产(如 TIPS、通胀保值资产)是否同期同向变动,若“齐涨齐跌”的资产一族同时出现,共同宏观因子的解释力更强;更进一步可用控制变量回归或因子模型、以及只冲击单一变量的事件研究来逼近因果识别。归纳为一句话:先把共同驱动因素摆上桌面并尝试控制,再谈因果。

    回扣本章:对应本章“经济学解释”一节的“背离情况”与正文“相关不等于因果”的讨论——通胀预期、避险需求等混杂因素可使经典负相关阶段性失效甚至反转。