查看全集:💎Quantopia量化分析56讲
假设检验是统计学中用于根据样本数据对总体参数进行推断的核心方法。在金融投资中,假设检验可以用于:
本教程将循序渐进地讲解假设检验的核心概念、实施步骤和常见检验类型,并结合金融数据分析案例进行演示。
假设检验(Hypothesis Testing)是统计学中用于判断样本数据是否足以支持某个假设的一种方法。它通过分析样本数据,结合概率论和统计推断,来决定是否接受或拒绝某个预设的假设。假设检验广泛应用于科学研究、商业决策和质量控制等领域。
其基本步骤包括:
零假设 (H₀)
零假设(也称原假设)是假设检验的起点,通常代表当前公认的结论或“无变化”的状态。它是保守的立场,研究者试图通过数据来反驳它。例如:
备择假设 (H₁)
备择假设(也称对立假设)是研究者希望验证的新主张,与原假设相反。例如:
检验类型的区分
根据研究目标,假设检验可分为以下类型:
检验类型 | H₀(原假设) | H₁(备择假设) | 适用场景 |
---|---|---|---|
双尾检验 | μ = μ₀(均值等于某值) | μ ≠ μ₀(均值不等于某值) | 关注是否存在差异,不关心方向 |
右尾检验 | μ ≤ μ₀(均值小于或等于某值) | μ > μ₀(均值大于某值) | 关注是否更大 |
左尾检验 | μ ≥ μ₀(均值大于或等于某值) | μ < μ₀(均值小于某值) | 关注是否更小 |
示例:
假设检验的完整流程包括以下步骤,以下是对每个步骤的详细扩展:
错误类型
p 值的常见误解
实际应用示例
均值检验是统计学中假设检验的重要分支,用于检验样本数据的均值是否满足特定条件。它在金融、科学研究等领域有着广泛应用。常见的均值检验包括单样本 t 检验和双样本 t 检验,分别用于检验单个样本的均值是否符合假设值,以及比较两个独立样本均值是否存在显著差异。
注意事项:
适用场景
单样本 t 检验用于检验一个样本的均值是否等于某个目标值(通常是总体均值或假设值)。它适用于以下情况:
公式
单样本 t 检验的统计量计算公式为:
其中:
决策规则
案例:检验微软股票日均收益是否大于 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}")
结果解读:
适用场景
双样本 t 检验用于比较两个独立样本的均值是否存在显著差异。它适用于:
公式
双样本 t 检验(假设方差相等)的统计量计算公式为:
其中:
注意:若两个样本方差不相等,应使用 Welch's t 检验,公式略有调整,不需要假设方差相等。
决策规则
案例:比较苹果股票与标普 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}")
结果解读:
方差检验是统计学中用于检验样本数据方差是否符合特定假设的方法。它在金融、质量控制等领域有广泛应用,例如评估风险或波动性。常见的方差检验包括卡方检验(单方差检验)和F 检验(方差比较检验),分别用于检验单个样本的方差是否等于某个值,以及比较两个样本的方差是否存在显著差异。
卡方检验用于检验一个样本的方差是否等于某个预设值(总体方差)。它假设数据近似服从正态分布,常用于风险管理等场景。
公式
卡方检验的统计量计算公式为:
其中:
决策规则
案例:检验微软收益率方差是否小于 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}")
结果解读:
F 检验用于比较两个独立样本的方差是否存在显著差异。它假设两个样本独立且数据近似服从正态分布,常用于比较资产波动性。
公式
F 检验的统计量计算公式为:
其中:
决策规则
案例:比较苹果与标普 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}")
结果解读:
在假设检验中,决策可能出现两种错误:
H₀ 真(原假设正确) | H₀ 假(原假设错误) | |
---|---|---|
不拒绝 H₀ | 正确(True Negative) | 第二类错误 (β)(False Negative) |
拒绝 H₀ | 第一类错误 (α)(False Positive) | 正确(True Positive) |
在设计检验时,通常需要在 α 和 β 之间权衡:
假设您是一位基金经理,管理着一个股票投资组合。您声称该投资组合的年化收益率显著高于市场基准(例如,标普 500 指数的年化收益率)。为了验证这一主张,我们将使用假设检验来分析过去 5 年的收益率数据,并判断您的投资组合是否确实取得了显著高于市场的超额收益。场景背景:
我们将通过假设检验来评估这一表现是否显著:
1. 提出假设
在金融投资中,假设检验的原假设 (H₀) 通常是保守的,表示“没有超额收益”,而备择假设 (H₁) 是我们希望证明的结论。
这是一个右尾检验,因为我们关注收益率是否显著高于市场基准。
2. 选择显著性水平 (α)
显著性水平 α 表示愿意接受错误拒绝原假设的概率(即 Type I 错误)。在金融分析中,通常设为 0.05(5%)。
这意味着我们接受 5% 的概率错误地声称投资组合有超额收益。
3. 选择检验统计量
假设我们有 5 年的月度数据(样本量 n = 60),样本量较大,因此选择 Z 检验。如果样本量较小(n ≤ 30),则应使用 T 检验。
4. 计算临界值
对于右尾检验,α = 0.05,Z 检验的临界值为 1.645。如果计算出的 Z 值大于 1.645,我们将拒绝原假设。
5. 计算检验统计量
假设我们有以下数据:
Z 统计量的计算公式为:
其中:
代入数据:
6. 比较统计量与临界值
由于 5.17 > 1.645,Z 值落入拒绝域,因此我们可以拒绝原假设。
7. 决策
根据假设检验的结果:
这表明投资组合在过去 5 年中取得了显著的超额收益,投资策略可能是有效的。
8. p 值法(补充)
我们还可以用 p 值法验证结果。p 值表示在原假设为真时,观察到当前或更极端结果的概率。对于 Z = 5.17,p 值极小(远小于 0.05),同样支持拒绝原假设。
通过假设检验,我们科学地评估了投资组合的绩效,结果显示其年化收益率显著高于市场基准 8%。这表明投资策略在过去 5 年中表现优异。然而,假设检验基于历史数据,未来的市场表现可能不同,建议结合其他分析工具和市场洞察来制定投资决策。
tsla = yf.download('TSLA', start='2020-01-01', end='2023-01-01')
# 在此补全代码
metals = yf.download(['GC=F', 'BTC-USD'], start='2020-01-01')['Close']
# 在此补全代码
要点总结
进阶建议: