如何在Python中执行强制固定梯度的线性回归并获取统计量?
固定斜率为1的线性回归实现方案
你不需要手动计算所有统计量,现有工具包完全可以实现,且不需要贝叶斯方法(因为斜率是严格固定的确定值,频率派方法足够)。以下是具体实现思路和工具包用法:
核心原理
固定斜率为1时,回归模型为:y = x + b,等价于求解残差项 z = y - x 的均值——最小二乘意义下,最优截距b就是z的算术平均值。
具体实现方式
1. 手动快速计算(适合简单场景)
直接通过numpy计算核心参数,统计量也可推导得到:
import numpy as np # 生成示例数据 n = 20 x = np.random.uniform(10, 20, n) y = x - np.random.normal(1, 1, n) # 计算固定斜率的截距 z = y - x b = np.mean(z) # 计算统计量:截距的标准误差 se_b = np.std(z, ddof=1) / np.sqrt(n) # 计算R²值 residuals = y - (x + b) ss_res = np.sum(residuals**2) ss_tot = np.sum((y - np.mean(y))**2) r_squared = 1 - (ss_res / ss_tot)
2. 使用statsmodels获取完整统计结果
statsmodels支持通过offset参数固定斜率,直接输出截距的p值、标准误等专业统计量:
import statsmodels.api as sm # 构造模型:offset(x)等价于强制斜率为1的x项 model = sm.OLS(y, sm.add_constant(np.ones_like(x)), offset=x) results = model.fit() # 打印完整统计报告 print(results.summary()) # 提取截距b b = results.params[0]
3. 使用scipy.optimize拟合并获取置信区间
通过自定义固定斜率的函数,用curve_fit拟合并得到参数的置信区间:
from scipy.optimize import curve_fit def fixed_slope_model(x, b): return x + b # 拟合参数 popt, pcov = curve_fit(fixed_slope_model, x, y) b = popt[0] # 计算截距的95%置信区间 b_ci = np.array([popt[0] - 1.96*np.sqrt(pcov[0,0]), popt[0] + 1.96*np.sqrt(pcov[0,0])])
4. scikit-learn框架下的实现
sklearn没有直接固定斜率的参数,但可以通过数据变换实现:
from sklearn.linear_model import LinearRegression # 变换目标变量:z = y - x z = y - x # 构造全1的特征矩阵,拟合z ~ 1(即求均值) X = np.ones((len(z), 1)) model = LinearRegression(fit_intercept=False) model.fit(X, z) b = model.coef_[0]
示例可视化(修改后)
将固定斜率的拟合结果加入你的示例代码:
import numpy as np import matplotlib.pyplot as plt n = 20 x = np.random.uniform(10, 20, n) y = x - np.random.normal(1, 1, n) plt.scatter(x, y, ec="k", label="实测数据") true_x = np.array((8, 20)) plt.plot(true_x, true_x, "k--", label="1:1基准线") # 固定斜率为1的拟合线 b = np.mean(y - x) plt.plot(true_x, true_x + b, "r:", label="固定斜率拟合线") # 普通线性回归 m, c = np.polyfit(x, y, 1) plt.plot(true_x, true_x*m + c, "g:", label="普通线性回归线") plt.xlabel("理论值") plt.ylabel("实测值") plt.legend() plt.show()
(图注:图中展示了离散的实测数据点、黑色虚线的1:1基准线、红色点线的固定斜率拟合线、绿色点线的普通线性回归线,直观对比了两种回归方式的差异)
内容的提问来源于stack exchange,提问作者DouglasCoenen
相关产品推荐
相关产品推荐

