假设检验是统计学中用于根据样本数据对总体参数进行推断的核心方法。在金融投资中,假设检验可以用于:
-
评估投资策略:判断某个策略是否能持续带来超额收益。
-
风险管理:检验投资组合的波动率是否控制在目标范围内。
-
市场行为分析:检验市场是否有效,是否存在异常收益机会。
本教程将循序渐进地讲解假设检验的核心概念、实施步骤和常见检验类型,并结合金融数据分析案例进行演示。
一、基础概念#
假设检验(Hypothesis Testing)是统计学中用于判断样本数据是否足以支持某个假设的一种方法。它通过分析样本数据,结合概率论和统计推断,来决定是否接受或拒绝某个预设的假设。假设检验广泛应用于科学研究、商业决策和质量控制等领域。
其基本步骤包括:
-
提出假设:
-
原假设(H₀):默认或保守的立场,通常表示“没有差异”或“没有效果”。
-
备择假设(H₁):与原假设相反的主张,通常是研究者希望证明的结论。
-
-
选择显著性水平(α):通常取值为 0.05 或 0.01,表示错误拒绝原假设的最大容忍概率。
-
选择检验统计量:根据数据特性和假设类型选择适当的统计量(如 Z、T、F 等)。
-
计算 p 值:表示在原假设为真时,观察到当前或更极端结果的概率。
-
决策:
-
若 p 值 < α,则拒绝原假设
-
若 p 值 ≥ α,则无法拒绝原假设
-
1.1 零假设与备择假设#
零假设 (H₀)
零假设(也称原假设)是假设检验的起点,通常代表当前公认的结论或“无变化”的状态。它是保守的立场,研究者试图通过数据来反驳它。例如:
-
“新药与旧药疗效相同”
-
“工厂产品的次品率不超过 5%”
备择假设 (H₁)
备择假设(也称对立假设)是研究者希望验证的新主张,与原假设相反。例如:
-
“新药比旧药更有效”
-
“工厂产品的次品率超过 5%”
检验类型的区分
根据研究目标,假设检验可分为以下类型:
| 检验类型 | H₀(原假设) | H₁(备择假设) | 适用场景 |
|---|---|---|---|
| 双尾检验 | μ = μ₀(均值等于某值) | μ ≠ μ₀(均值不等于某值) | 关注是否存在差异,不关心方向 |
| 右尾检验 | μ ≤ μ₀(均值小于或等于某值) | μ > μ₀(均值大于某值) | 关注是否更大 |
| 左尾检验 | μ ≥ μ₀(均值大于或等于某值) | μ < μ₀(均值小于某值) | 关注是否更小 |
示例:
-
双尾检验:测试一种饮料的平均糖含量是否等于标示值 10g。
-
右尾检验:测试新教学方法是否显著提高学生的平均成绩。
-
左尾检验:测试某种药是否减少患者的平均恢复时间。
1.2 检验步骤#
假设检验的完整流程包括以下步骤,以下是对每个步骤的详细扩展:
-
建立假设对
-
明确原假设 (H₀) 和备择假设 (H₁)。
-
根据研究问题选择单尾(左尾或右尾)或双尾检验。
-
示例:测试新机器的平均生产时间是否少于旧机器。
-
H₀: μ ≥ 10 分钟
-
H₁: μ < 10 分钟(左尾检验)
-
-
-
选择检验统计量
-
根据数据类型和样本特性选择合适的统计量:
-
Z 统计量:适用于大样本(n > 30)或总体标准差已知的情况。
-
T 统计量:适用于小样本(n ≤ 30)且总体标准差未知的情况。
-
卡方统计量:适用于分类数据或拟合优度检验。
-
F 统计量:适用于比较多个组的方差。
-
-
示例:若样本量为 25,且总体方差未知,则选择 T 检验。
-
-
确定显著性水平 (α)
-
α 是错误拒绝原假设(即 Type I 错误)的概率,通常设为 0.05(5%)或 0.01(1%)。
-
α 的选择取决于研究的严格程度:
-
α = 0.05:适用于大多数社会科学研究。
-
α = 0.01:适用于需要更高置信度的医学或工程研究。
-
-
-
计算临界值
-
根据 α 和检验类型(单尾或双尾),从统计表(如 Z 表、T 表)中查找临界值。
-
示例:
-
双尾检验,α = 0.05,Z 临界值为 ±1.96。
-
右尾检验,α = 0.05,Z 临界值为 1.645。
-
-
-
计算检验统计量
-
使用样本数据计算统计量。例如:
-
Z = (样本均值 - 假设均值) / (标准差 / √n)
-
T = (样本均值 - 假设均值) / (样本标准差 / √n)
-
-
示例:样本均值 = 9.8,假设均值 = 10,标准差 = 1.2,n = 36,则 Z = (9.8 - 10) / (1.2 / √36) = -1.0。
-
-
比较统计量与临界值
-
临界值法:
-
若统计量落在拒绝域(超出临界值),拒绝 H₀。
-
若统计量在接受域内,无法拒绝 H₀。
-
-
p 值法(替代方法):
-
计算统计量的 p 值,与 α 比较:
-
p < α,拒绝 H₀。
-
p ≥ α,保留 H₀。
-
-
-
示例:若 Z = -1.0,p 值 ≈ 0.1587(左尾),α = 0.05,因 0.1587 > 0.05,无法拒绝 H₀。
-
1.3 扩展补充#
错误类型
-
Type I 错误 (α):错误拒绝真的原假设(假阳性),其概率由 α 表示。
-
Type II 错误 (β):未能拒绝假的原假设(假阴性),其概率由 β 表示。
-
权衡:减小 α 会增加 β,反之亦然。
p 值的常见误解
-
p 值不是“原假设为真的概率”,而是在原假设为真时,得到当前或更极端结果的概率。
-
p 值小并不意味着效应重要,需结合实际意义和效应大小判断。
实际应用示例
-
场景:测试新广告是否提高点击率。
-
假设:H₀: p = 0.1(点击率无变化);H₁: p ≠ 0.1(点击率有变化)。
-
数据:样本量 n = 200,点击次数 = 25,样本比例 = 0.125。
-
计算:Z = (0.125 - 0.1) / √(0.1 * 0.9 / 200) ≈ 1.18,p 值 ≈ 0.238(双尾)。
-
决策:p = 0.238 > 0.05,无法拒绝 H₀,广告效果未达显著水平。
-
二、均值检验#
均值检验是统计学中假设检验的重要分支,用于检验样本数据的均值是否满足特定条件。它在金融、科学研究等领域有着广泛应用。常见的均值检验包括单样本 t 检验和双样本 t 检验,分别用于检验单个样本的均值是否符合假设值,以及比较两个独立样本均值是否存在显著差异。
注意事项:
-
正态性要求:t 检验假设数据近似正态分布。若数据严重偏态,可考虑非参数检验。
-
样本量:样本量较大(n > 30)时,t 检验对正态性要求较宽松。
-
方差相等性:双样本 t 检验中,若方差不相等,建议使用 Welch's t 检验以确保结果稳健。
2.1 单样本 t 检验#
适用场景
单样本 t 检验用于检验一个样本的均值是否等于某个目标值(通常是总体均值或假设值)。它适用于以下情况:
-
样本量较小(通常 n ≤ 30),且总体标准差未知。
-
数据近似服从正态分布(若样本量较大,t 检验对正态性要求可适当放宽)。
公式
单样本 t 检验的统计量计算公式为:
其中:
-
t 为 t 检验统计量
-
xˉ为样本均值
-
为总体均值(原假设中的值)
-
s 为样本标准差
-
n 为样本量
-
为样本量的平方根
决策规则
-
计算 t 统计量后,查 t 分布表,获取自由度为 n - 1 的临界值。若 |t| 大于临界值,则拒绝原假设。
-
或者,比较 p 值与显著性水平 α(通常取 0.05)。若 p 值 < α,则拒绝原假设。
案例:检验微软股票日均收益是否大于 0
我们以微软(MSFT)股票为例,使用 Python 实现单样本 t 检验,检验其日均收益是否显著大于 0:
import yfinance as yf
from scipy import stats
# 获取微软股票数据(2020-01-01 至 2023-01-01)
msft = yf.download('MSFT', start='2020-01-01', end='2023-01-01')
# 计算日收益率
returns = msft['Close'].pct_change().dropna()
# 执行单样本 t 检验(右尾检验,检验均值是否大于 0)
t_stat, p_val = stats.ttest_1samp(returns, 0, alternative='greater')
print(f"t 统计量: {t_stat:.4f}, p 值: {p_val:.4f}")结果解读:
-
若 p 值 < 0.05,则拒绝原假设,说明微软股票日均收益显著大于 0。
-
若 p 值 ≥ 0.05,则无法拒绝原假设,表明没有足够证据支持日均收益大于 0。
2.2 双样本 t 检验#
适用场景
双样本 t 检验用于比较两个独立样本的均值是否存在显著差异。它适用于:
-
两个样本相互独立,且数据近似服从正态分布。
-
样本量较小(n ≤ 30),总体标准差未知。
-
若样本方差相等,可使用标准双样本 t 检验;若方差不等,则使用 Welch's t 检验。
公式
双样本 t 检验(假设方差相等)的统计量计算公式为:
其中:
-
为双样本 t 检验统计量
-
:两个样本的样本量
-
:两个样本的均值
-
:合并方差(pooled variance),计算公式为:
- :两个样本的方差
注意:若两个样本方差不相等,应使用 Welch's t 检验,公式略有调整,不需要假设方差相等。
决策规则
-
计算 t 统计量后,查 t 分布表,获取自由度为 的临界值。若 |t| 大于临界值,则拒绝原假设。
-
或者,若 p 值 < α(通常取 0.05),则拒绝原假设。
案例:比较苹果股票与标普 500 指数的波动率
我们以苹果(AAPL)股票和标普 500 指数(SPY)为例,使用 Python 实现双样本 t 检验,比较两者日均收益率是否显著不同。
import yfinance as yf
from scipy import stats
# 获取苹果和标普 500 数据(2020-01-01 至 2023-01-01)
data = yf.download(['AAPL', 'SPY'], start='2020-01-01', end='2023-01-01')['Close']
# 计算日收益率
returns = data.pct_change().dropna()
# 执行 Welch's t 检验(不假设方差相等)
t_stat, p_val = stats.ttest_ind(returns['AAPL'], returns['SPY'], equal_var=False)
print(f"t 统计量: {t_stat:.4f}, p 值: {p_val:.4f}")结果解读:
-
若 p 值 < 0.05,则拒绝原假设,说明苹果股票与标普 500 指数的日均收益率存在显著差异。
-
若 p 值 ≥ 0.05,则无法拒绝原假设,表明没有足够证据显示两者均值不同。
三、方差检验#
方差检验是统计学中用于检验样本数据方差是否符合特定假设的方法。它在金融、质量控制等领域有广泛应用,例如评估风险或波动性。常见的方差检验包括卡方检验(单方差检验)和F 检验(方差比较检验),分别用于检验单个样本的方差是否等于某个值,以及比较两个样本的方差是否存在显著差异。
3.1 卡方检验(单方差)#
卡方检验用于检验一个样本的方差是否等于某个预设值(总体方差)。它假设数据近似服从正态分布,常用于风险管理等场景。
**公式
**卡方检验的统计量计算公式为:
其中:
-
为样本量
-
为样本方差
-
为总体方差
决策规则
-
卡方统计量 服从自由度为 n - 1 的卡方分布
-
根据显著性水平 α 和检验类型(双尾、左尾或右尾),比较 与临界值。例如:
- 右尾检验(检验方差是否大于 ):若,拒绝原假设
案例:检验微软收益率方差是否小于 0.0001
我们以微软(MSFT)股票的日收益率为例,检验其方差是否显著小于 0.0001
from scipy.stats import chi2
n = len(returns)
sample_var = returns.var()
test_stat = (n-1)*sample_var / 0.0001
crit_value = chi2.ppf(0.99, n-1)
print(f"检验统计量: {test_stat:.2f}, 临界值: {crit_value:.2f}")结果解读:
-
若 test_stat > crit_value,则拒绝原假设,说明微软股票收益率方差显著大于 0.0001。
-
若 test_stat ≤ crit_value,则无法拒绝原假设。
3.2 F检验(方差比较)#
F 检验用于比较两个独立样本的方差是否存在显著差异。它假设两个样本独立且数据近似服从正态分布,常用于比较资产波动性。
公式
F 检验的统计量计算公式为:
其中:
-
为第一个样本的方差
-
为第二个样本的方差
决策规则
-
F 统计量服从自由度为 (n₁ - 1, n₂ - 1) 的 F 分布,其中 n₁ 和 n₂ 分别为两个样本的样本量。
-
对于双尾检验,计算 p 值并与显著性水平 α(通常为 0.05)比较:
- 若 p 值 < α,拒绝原假设,认为两个样本方差显著不同。
案例:比较苹果与标普 500 波动率差异
我们以苹果(AAPL)股票和标普 500 指数(SPY)的日收益率为例,检验两者方差是否显著不同。
import yfinance as yf
from scipy.stats import f
# 获取苹果和标普 500 数据(2020-01-01 至 2023-01-01)
data = yf.download(['AAPL', 'SPY'], start='2020-01-01', end='2023-01-01')['Close']
# 计算日收益率
returns = data.pct_change().dropna()
# 样本方差
var_aapl = returns['AAPL'].var()
var_spy = returns['SPY'].var()
# F 统计量
f_stat = var_aapl / var_spy
dfn = len(returns['AAPL']) - 1 # 分子自由度
dfd = len(returns['SPY']) - 1 # 分母自由度
# p 值(双尾检验)
p_val = 2 * min(f.cdf(f_stat, dfn, dfd), 1 - f.cdf(f_stat, dfn, dfd))
print(f"F 统计量: {f_stat:.2f}, p 值: {p_val:.4f}")结果解读:
-
若 p 值 < 0.05,则拒绝原假设,说明苹果股票与标普 500 指数的波动率存在显著差异。
-
若 p 值 ≥ 0.05,则无法拒绝原假设,表明两者方差无显著差异。
四、错误类型与解释力#
4.1 错误矩阵#
在假设检验中,决策可能出现两种错误:
| H₀ 真(原假设正确) | H₀ 假(原假设错误) | |
|---|---|---|
| 不拒绝 H₀ | 正确(True Negative) | 第二类错误 (β)(False Negative) |
| 拒绝 H₀ | 第一类错误 (α)(False Positive) | 正确(True Positive) |
-
第一类错误 (α):错误地拒绝正确的原假设(假阳性),其概率由显著性水平 α 控制。
-
第二类错误 (β):未能拒绝错误的原假设(假阴性),其概率为 β。
4.2 关键指标#
-
功效 (Power):检验正确拒绝错误原假设的概率,计算为 1 - β。功效越高,检验越能检测到真实的差异。
-
置信度:检验不犯第一类错误的概率,计算为 1 - α。置信度越高,犯第一类错误的概率越小。
在设计检验时,通常需要在 α 和 β 之间权衡:
-
减小 α(提高置信度)会增加 β(降低功效)。
-
增大样本量可以同时减小 α 和 β,提高检验的准确性。
五、实例:评估投资组合的超额收益#
5.1 场景背景#
假设您是一位基金经理,管理着一个股票投资组合。您声称该投资组合的年化收益率显著高于市场基准(例如,标普 500 指数的年化收益率)。为了验证这一主张,我们将使用假设检验来分析过去 5 年的收益率数据,并判断您的投资组合是否确实取得了显著高于市场的超额收益。场景背景:
-
市场基准(标普 500):过去 5 年的年化收益率平均为 8%
-
您的投资组合:过去 5 年的年化收益率平均为 10%
5.2 假设检验评估显著性#
我们将通过假设检验来评估这一表现是否显著:
1. 提出假设
在金融投资中,假设检验的原假设 (H₀) 通常是保守的,表示“没有超额收益”,而备择假设 (H₁) 是我们希望证明的结论。
-
原假设 (H₀):投资组合的年化收益率不超过市场基准,即 μ ≤ 8%。
-
备择假设 (H₁):投资组合的年化收益率高于市场基准,即 μ > 8%。
这是一个右尾检验,因为我们关注收益率是否显著高于市场基准。
2. 选择显著性水平 (α)
显著性水平 α 表示愿意接受错误拒绝原假设的概率(即 Type I 错误)。在金融分析中,通常设为 0.05(5%)。
- α = 0.05
这意味着我们接受 5% 的概率错误地声称投资组合有超额收益。
3. 选择检验统计量
假设我们有 5 年的月度数据(样本量 n = 60),样本量较大,因此选择 Z 检验。如果样本量较小(n ≤ 30),则应使用 T 检验。
- 检验统计量:Z 统计量
4. 计算临界值
对于右尾检验,α = 0.05,Z 检验的临界值为 1.645。如果计算出的 Z 值大于 1.645,我们将拒绝原假设。
- 临界值:Z = 1.645
5. 计算检验统计量
假设我们有以下数据:
-
投资组合的年化收益率:10%
-
市场基准的年化收益率:8%
-
投资组合收益率的标准差:3%
-
样本量:n = 60(5 年的月度数据)
Z 统计量的计算公式为:
其中:
-
= 10%(样本均值)
-
= 8%(假设的总体均值)
-
= 3%(标准差)
-
= 60
代入数据:
6. 比较统计量与临界值
-
计算的 Z 值:5.17
-
临界值:1.645
由于 5.17 > 1.645,Z 值落入拒绝域,因此我们可以拒绝原假设。
7. 决策
根据假设检验的结果:
- 拒绝原假设 (H₀):投资组合的年化收益率显著高于市场基准(8%)。
这表明投资组合在过去 5 年中取得了显著的超额收益,投资策略可能是有效的。
8. p 值法(补充)
我们还可以用 p 值法验证结果。p 值表示在原假设为真时,观察到当前或更极端结果的概率。对于 Z = 5.17,p 值极小(远小于 0.05),同样支持拒绝原假设。
通过假设检验,我们科学地评估了投资组合的绩效,结果显示其年化收益率显著高于市场基准 8%。这表明投资策略在过去 5 年中表现优异。然而,假设检验基于历史数据,未来的市场表现可能不同,建议结合其他分析工具和市场洞察来制定投资决策。
练习#
- 使用 t 检验验证特斯拉股票近3年日均收益率是否显著大于0.1%
tsla = yf.download('TSLA', start='2020-01-01', end='2023-01-01')
# 在此补全代码- 比较黄金期货(GC=F)与比特币(BTC-USD)的波动率差异
metals = yf.download(['GC=F', 'BTC-USD'], start='2020-01-01')['Close']
# 在此补全代码要点总结
-
正确设定假设对是检验的基础
-
根据数据特征选择适当的检验方法
-
p 值 < α 时拒绝零假设
-
注意检验前提条件(正态性、独立性等)
-
金融数据常需考虑时间序列特性
进阶建议:
-
学习非参数检验方法(如Mann-Whitney U检验)
-
了解多重检验校正方法
-
掌握统计功效分析方法