一行拟合,一张表阅读
statsmodels 是用来回答回归“有多确定”的库。scikit-learn 给出预测,statsmodels 给出完整的报告:系数、标准误、t 统计量、p 值、置信区间和多种拟合度量。模型用公式字符串描述。在 smf.ols('ex ~ mkt_rf + hml', data).fit() 中,波浪线左边是因变量,右边是自变量,截距会自动加入(写 - 1 可去掉)。数组接口 sm.OLS(y, X) 不会加截距,需要自己调用 sm.add_constant(X),忘记这一步是最常见的失误。
只有一个自变量时,计算短到可以手算。设 Sxx=∑(xi−xˉ)2,Sxy=∑(xi−xˉ)(yi−yˉ),则斜率 β^=Sxy/Sxx,截距 α^=yˉ−β^xˉ。残差 ei=yi−α^−β^xi,其平方和为 SSE。噪声水平用 s2=SSE/(n−k) 估计,k 是拟合的系数个数,这里为 2。斜率的标准误是 s2/Sxx,t 统计量是 β^ 除以它,R2=1−SSE/SST,其中 SST=∑(yi−yˉ)2 是围绕均值的总变差。
β^=SxxSxy,α^=yˉ−β^xˉ,s2=n−kSSE,t=s2/Sxxβ^,R2=1−SSTSSE(1) 五个月的手算设市场超额收益
x=−2,−1,0,1,2(百分数),股票超额收益
y=−3,0,1,2,5。则
xˉ=0,
yˉ=1,
Sxx=10,
Sxy=8+1+0+1+8=18,所以
β^=1.8,
α^=1。拟合值为
−2.6,−0.8,1,2.8,4.6,残差为
−0.4,0.8,0,−0.8,0.4,
SSE=1.6,而
SST=16+1+0+1+16=34。于是
R2=1−1.6/34=0.953。由于
n−k=3,噪声估计为
s2=1.6/3=0.5333,标准误为
0.5333/10=0.2309,
t=1.8/0.2309=7.79。用真实数据,苹果的月度超额收益对市场超额收益做回归,2000 年 2 月到 2026 年 8 月共
319 个月,得到
β^=1.31,标准误
0.112(
t=11.7),截距每月
1.5%(
t=2.9),但
R2 只有
0.30。
- 先写公式:
y ~ a + b 拟合截距和两个斜率,- 1 去掉截距,sm.OLS 需要 add_constant。 - 按顺序读表:系数、标准误、t 统计量、p 值、区间,然后是 R2 和样本量。
实验:评分内容
- 手算斜率15 分
- 截距10 分
- 决定系数15 分
- t 统计量20 分
- 读汇总表10 分
- 回归的工作流10 分
- 精确但很小20 分