mcpField
S
statistics-fundamentals

statistics-fundamentals

github.com/joellewis数据与数据库218819 次安装15 周前更新
代码仓库

关于 statistics-fundamentals

面向金融数据分析的统计基础技能,涵盖描述统计、分布检验、协方差估计、回归诊断与自助法,并提供 Python 计算方法。

主要功能

  1. 01描述统计与年化波动率
  2. 02Jarque-Bera 正态性检验
  3. 03协方差估计与收缩
  4. 04CAPM 回归诊断
  5. 05自助法置信区间

适用场景

  1. 01检查收益率分布与极端值
  2. 02为投资组合优化估计协方差
  3. 03评估 CAPM 的 alpha 与 beta
  4. 04为 Sharpe 比率估算置信区间

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/joellewis/finance_skills --skill statistics-fundamentals

安装后在 Claude Code 中输入/statistics-fundamentals确认已加载。

附带文件scripts/statistics_fundamentals.py

详细介绍

统计学基础

核心概念

约定与决策规则
样本方差:使用 n-1

根据收益率样本估算方差或标准差时,除以 n - 1(贝塞尔校正),而不是 n。除以 n 会系统性低估离散程度。收益率的标准差称为“波动率”;年化计算公式为 sigma_annual = sigma_period * sqrt(periods_per_year)(例如,月度数据乘以 sqrt(12),日度数据乘以 sqrt(252))。

正态性检验:Jarque-Bera 及其局限

JB = (n/6) * (skew^2 + excess_kurtosis^2 / 4);在正态性原假设下服从自由度为 2 的卡方分布(5% 临界值:5.99)。

**检验效力较低的注意事项:**样本较小时(n 大约低于 50),即使数据明显不服从正态分布,JB 检验也很少拒绝原假设——未能拒绝只能作为正态性的弱证据,并不代表确认正态性。样本较大时,金融收益率序列几乎总会被检验为不服从正态分布,这是因为其具有肥尾特征,且(对于股票)存在负偏度。应将该检验作为初筛,并结合实际偏度、峰度的大小以及极端观测值进行判断。

协方差估计与 Ledoit-Wolf 收缩

当资产数量 p 接近观测值数量 n 时,样本协方差矩阵 Sigma_hat = (1/(n-1)) (X - X_bar)^T (X - X_bar) 会变得条件不良或奇异。将其代入均值-方差优化器,会产生极端、不稳定的权重,这些权重会因数据的微小变化而大幅变动。

收缩通过将样本矩阵向结构化目标矩阵调整来进行融合:

$$\hat{\Sigma}_{shrunk} = \delta \cdot F + (1 - \delta) \cdot \hat{\Sigma}$$

其中,F 是目标矩阵(例如,缩放后的单位矩阵),delta 是收缩强度。Ledoit-Wolf(2004)推导出使到真实协方差矩阵的预期平方 Frobenius 距离最小的 delta,以少量偏差换取大幅降低方差,从而得到条件更好、可逆的矩阵和更稳定的投资组合权重。

**注意:**随附脚本中的 shrunk_covariance 实现的是简化的收缩强度估计,而非完整的 Ledoit-Wolf 估计器。生产环境中请使用 sklearn.covariance.LedoitWolf。

回归诊断(CAPM 和因子模型)

对于单因子 CAPM 回归 R_i - R_f = alpha + beta * (R_m - R_f) + epsilon:

  • beta = rho * sigma_i / sigma_m(市场敏感度);alpha 是风险调整后的超额收益。
  • 在单因子回归中,R^2 = rho^2。
  • 使用 t 统计量判断系数(t = coefficient / SE);自由度为 n - 2 时,|t| 大于约 2 表明在 5% 水平上显著。alpha 点估计为正但 |t| < 2,并不能证明存在投资技能。
  • 增加回归变量总会提高 R 平方;应使用调整后 R 平方、AIC/BIC 或交叉验证来防止过拟合。
Bootstrap 步骤

当无法获得统计量(Sharpe 比率、alpha)的解析标准误、分布非正态或样本较小时,可使用非参数重抽样来估计统计量的抽样分布:

  1. 从原始 n 个观测值中,有放回地抽取 B 个大小为 n 的重抽样样本(B = 1,000-10,000)。
  2. 对每个重抽样样本计算统计量。
  3. 百分位数法:(1 - alpha) 置信区间的上下限分别是 bootstrap 分布的 alpha/2 和 1 - alpha/2 百分位数;bootstrap 标准误是 B 个统计量的标准差。

注意:i.i.d. bootstrap 忽略自相关和波动率聚集;对于存在序列依赖的收益率序列,应使用区块 bootstrap。

标准分析工作流

给定一个收益率序列,按以下顺序执行:

  1. 描述性统计 — 均值、波动率(n-1)、偏度、超额峰度;报告时进行年化。
  2. 分布检验 — Jarque-Bera 检验(注意其检验效能较低),检查偏度/峰度的大小和最大离群值;判断基于正态分布的方法(参数 VaR、t 检验)是否合理。
  3. 协方差/相关性(多资产)— 计算样本协方差矩阵和相关系数矩阵;如果 p 相对于 n 较大,在进行任何优化前应用收缩方法。
  4. 回归诊断 — 进行 CAPM 或因子回归;报告 alpha/beta、t 统计量和 R 平方;检查残差是否存在结构。
  5. Bootstrap 置信区间 — 对于没有简洁解析标准误的统计量(Sharpe、alpha、回撤),应通过 bootstrap 计算置信区间,而不是只报告点估计。

示例

示例 1:描述性统计和正态性检验

已知: 12 个月度收益率(%):[2.1, -0.5, 1.8, -3.2, 4.5, 0.3, -1.1, 2.7, -0.8, 3.4, 1.2, -0.6]

Mean      = 9.8 / 12 = 0.8167% per month  (~9.8% annualized, simple x12)
s^2       = 52.977 / 11 = 4.816   ->   s = 2.195% per month
Ann. vol  = 2.195% * sqrt(12) = 7.60%
Skewness  = -0.045  (bias-corrected; near symmetric)
Ex. kurt  = -0.42   (bias-corrected; lighter tails than normal)

JB = (12/6) * ((-0.045)^2 + (-0.42)^2 / 4) = 0.09

JB = 0.09 < 5.99(卡方分布 5% 临界值,df=2):无法拒绝正态性假设。只有 12 个观测值时,检验效能非常低——这并不能证明收益率确实服从正态分布。

示例 2:根据汇总统计量进行 CAPM 回归

已知: 24 个月度观测值。基金超额收益率:均值 0.8%,标准差 4.2%。市场超额收益率:均值 0.6%,标准差 3.8%。相关系数 0.85。

beta  = rho * sigma_i / sigma_m = 0.85 * 4.2 / 3.8 = 0.939
alpha = 0.8% - 0.939 * 0.6% = 0.236% per month (~2.84% annualized)
R^2   = rho^2 = 0.7225

Residual std = 4.2% * sqrt(1 - 0.7225) = 2.213%
SE(alpha) = 2.213% / sqrt(24) = 0.452%   ->  t(alpha) = 0.236 / 0.452 = 0.52
SE(beta)  = 2.213% / (3.8% * sqrt(23)) = 0.121  ->  t(beta) = 0.939 / 0.121 = 7.74

自由度为 22 时,5% 双尾检验的临界 t 值为 2.074。Beta 显著性很高(7.74 >> 2.074);alpha 不显著(0.52 < 2.074)——尽管点估计为正,样本仍无法将其与零区分开来。

常见陷阱

  • 使用总体方差而不是样本方差:根据样本进行估计时,始终使用 n - 1(贝塞尔校正)。
  • 假定正态分布,而金融收益率往往具有肥尾:股票收益率通常呈现负偏度和正超额峰度;基于正态分布的模型(标准 VaR)会低估尾部风险。应使用 Student-t 分布或非参数方法。
  • 忽略非平稳性:收益率分布会随时间变化(体制变化、波动率聚集)。与全样本统计量相比,滚动窗口估计或 GARCH 可能更合适。
  • 因回归变量过多而过拟合:添加因子后,R 平方总会升高;应使用调整后的 R 平方、信息准则或交叉验证。
  • 小样本下协方差矩阵不稳定:当 p 接近或超过 n 时,在优化前应用 Ledoit-Wolf 收缩方法或基于因子的协方差模型。

运行脚本

scripts/statistics_fundamentals.py 提供了一个 StatisticsFundamentals 类,其中包含静态方法 descriptive_stats、covariance_matrix、correlation_matrix、shrunk_covariance(简化版 Ledoit-Wolf——参见上面的说明)、ols_regression、rolling_regression、bootstrap_mean 和 jarque_bera_test。

  • 运行:uv run scripts/statistics_fundamentals.py(PEP 723 内联元数据会解析 numpy 和 scipy),或者在已安装 numpy/scipy 的情况下运行 python3 scripts/statistics_fundamentals.py。
  • 直接运行(或使用 --verify)会打印合成数据的演示,并且断言示例 1 的计算值符合上述结果(12 个月序列的均值为 0.8167、标准差为 2.195、JB 为 0.09),如有任何不匹配则以非零状态码退出。
  • --help 会列出可用方法和导入用法。
  • 以编程方式使用时,请导入而非运行:from statistics_fundamentals import StatisticsFundamentals,然后调用例如 StatisticsFundamentals.descriptive_stats(...)。

交叉引用

  • return-calculations(核心插件):算术平均收益和几何平均收益、用于统计建模的对数收益
  • time-value-of-money(核心插件):通过 CAPM 回归估算贴现率;NPV 和 IRR 计算使用统计输入
  • factor-investing(财富管理插件):将单因子 CAPM/OLS 回归扩展为 Fama-French 多因子模型,用于阿尔法归因和基金评估
  • financial-statements(财富管理插件):将描述性统计和趋势分析应用于财务比率和同业比较

评论

支持 Markdown