如何在Python中获取R中的回归残差标准误与预测标准误?
嘿,我之前跨语言验证统计分析结果时也碰到过一模一样的问题,放心,这两个指标在Python里都有现成的实现,完全不用从头手动造轮子~下面分两种指标给你详细说明:
1. 残差标准误(Residual Standard Error, RSE)
对应R中lm()输出里的Residual standard error,在Python的statsmodels库中有两种直接获取的方式:
方式一:从模型摘要里直接读取
拟合完线性回归后,打印模型的summary结果,里面会直接显示Residual standard error这一项,和R的输出完全对应:import statsmodels.api as sm import numpy as np # 示例数据 x = np.random.rand(100) y = 1.5*x + np.random.randn(100)*0.3 X = sm.add_constant(x) # 添加截距项 # 拟合OLS模型 model = sm.OLS(y, X) results = model.fit() # 打印摘要,查看残差标准误 print(results.summary())输出里会有类似这样的行:
Residual standard error: 0.298 on 98 degrees of freedom,直接读取即可。方式二:通过模型属性计算
如果你需要把这个值提取出来做后续计算,可以用模型拟合结果的mse_resid(均方残差)属性,残差标准误就是它的平方根:rse = np.sqrt(results.mse_resid) print(f"残差标准误:{rse:.3f}")这个计算结果和summary里的数值完全一致,本质就是R中RSE的计算公式:
sqrt(sum(residuals^2)/(n-p)),其中n是样本量,p是模型参数个数(包括截距)。
2. 预测标准误(Standard Error of Prediction)
对应R中包含残差方差的预测标准误,Python里有更直接的封装方法:
在statsmodels中,使用get_prediction()方法可以直接获取每个预测点的预测标准误:
# 获取预测结果(支持训练集或新数据) pred_results = results.get_prediction(X) # 转化为DataFrame,方便查看和提取 pred_summary = pred_results.summary_frame() # se_mean 是拟合值的标准误(对应R的se.fit) # se_pred 是你要的预测标准误(包含残差方差) print(pred_summary[['mean', 'se_mean', 'se_pred']].head())
se_pred就是目标指标,它的计算公式是sqrt(mse_resid * (1 + X_new @ np.linalg.inv(X.T @ X) @ X_new.T)),statsmodels已经帮你封装好了,直接调用既高效又不容易出错。
内容的提问来源于stack exchange,提问作者ghbcode

