1.加权线性回归与普通线性回归
对于一组有N个观测的数据
$$(x_i,y_i), i = 1,2,3,4,…, N$$
可以使用一元线性回归模型
$$y = a x + b + \epsilon$$
来拟合 \(x\) 与 \(y\) 之间的关系。其中的参数 \(a,b\) 通常使用最小二乘拟合,即寻找使代价函数
$$J(a,b) = \frac{1}{N}\sum^{N}_{i=1}{(y_i-ax_i-b)^2}$$
最小的\(a,b\),使得拟合曲线尽可能地接近所有的观测点。
但在实际应用中,观测点之间可能是有差异的。比如,有的观测点误差大,有的观测点误差小,这就需要让我们的拟合直线\(y=ax+b\),不必考虑误差大的观测点,而要尽可能逼近误差小的观测点。这时就可以使用一个权重系数\(w_i\)来表示第\(i\)个观测点的权重(例如,对于误差小的观测点,\(w_i\)的值更大) 而考虑了这个权重系数\(w_i\)的线性回归,就是加权线性回归。
它的回归方程仍然是
$$y = a x + b + \epsilon$$
唯一区别是代价函数变成了
$$J(a,b) = \frac{1}{N}\sum^{N}_{i=1}{w_i(y_i-ax_i-b)^2}$$
这样,在寻找最优 \(a,b\)时,会更多地考虑高权重的观测值
2.最优a,b及其求解
(a,b最优解见本节最后)
代价函数
$$J(a,b) = \frac{1}{N}\sum^{N}_{i=1}{w_i(y_i-ax_i-b)^2}$$
是一个普通的二元二次函数,分别将 J(a,b)对a,b求偏微分,使这两个偏微分同时为0 的(a,b)即为最优解。即求解方程组
$$\frac{\partial}{\partial a}{J(a,b)} = 0$$
$$\frac{\partial}{\partial b}{J(a,b)} = 0$$
即
$$\frac{\partial}{\partial a}{J(a,b)} = \frac{1}{N}[2\sum^{N}_{i=1}{w_ix_i(y_i-ax_i-b)}] = 0$$
$$\frac{\partial}{\partial b}{J(a,b)} = \frac{1}{N}[2\sum^{N}_{i=1}{w_i(y_i-ax_i-b)}] = 0$$
即可得
$$\frac{\partial}{\partial a}{J(a,b)} = \frac{2}{N}[\sum^{N}_{i=1}{w_ix_iy_i}-a\sum^{N}_{i=1}{w_ix_ix_i}-b\sum^{N}_{i=1}{w_ix_i}] = 0$$
$$\frac{\partial}{\partial b}{J(a,b)} = \frac{2}{N}[\sum^{N}_{i=1}{w_iy_i}-a\sum^{N}_{i=1}{w_ix_i}-b\sum^{N}_{i=1}{w_i}] = 0$$
为简化描述,定义以下符号
$$(\overline{wxy}) = \sum^{N}_{i=1}{w_ix_iy_i}$$
$$(\overline{wxx}) = \sum^{N}_{i=1}{w_ix_ix_i}$$
$$(\overline{wx}) = \sum^{N}_{i=1}{w_ix_i}$$
$$(\overline{wy}) = \sum^{N}_{i=1}{w_iy_i}$$
$$(\overline{w} )= \sum^{N}_{i=1}{w_i}$$
由于N为观测数,不会为0,则有
$$a(\overline{wxx}) + b(\overline{wx}) = (\overline{wxy})$$
$$a(\overline{wx}) + b(\overline{w}) = (\overline{wy})$$
解这个以a,b为未知数的二元一次方程组,可得
$$a = \frac{(\overline{wxy}) – \frac{(\overline{wy})(\overline{wx})}{\overline{w}}}{ (\overline{wxx}) – \frac{(\overline{wx})(\overline{wx})}{(\overline{w})} }$$
$$b = \frac{(\overline{wy}) – a(\overline{wx})}{(\overline{w})}$$
如果令\(w_i=1\),则以上公式与普通线性回归参数估计公式相同
3.\(R^2\)与F检验
对于普通的线性回归模型,\(R^2\)的计算公式如下:
$$R^2 =1 – \frac{\sum^{N}_{i=1}{(y_i – ax_i – b)^2}} {\sum^{N}_{i=1}{(y_i – \frac{1}{N}\sum^{N}_{j=1}{y_j})}^2}$$
对应的,加入权重后,就可得到加权回归模型的\(R^2\)计算公式
$$R^2 =1 – \frac{\sum^{N}_{i=1}{w_i(y_i – ax_i – b)^2}} {\sum^{N}_{i=1}{w_i(y_i – \frac{1}{N}\sum^{N}_{j=1}{y_j})}^2}$$
相应的F统计量计算公式仍为
$$F = \frac{R^2 / k}{(1-R^2)/(N-k-1)}$$
其中k为回归模型自变量个数,对于一元回归k=1。将计算得到的F值带入 F(k,N-k-1)分布中检验即可得到其显著性p值
我按照这篇推导实现了一个求解加权线性回归斜率和截距的Python函数,以便使用numba对其加速,但是其计算结果总是和sklearn的LinearRegression有细微的差异,所以在这里想请教一下,在具体实现的时候,是不是还应该加入某种细节?