如何估计线性回归模型对新输入预测的百分比不确定度?
获取OLS线性回归样本外预测的百分比不确定度
假设我有自变量(x)和因变量(y),已使用简单线性回归(OLS)为二者关系建模。现在我要使用该模型对新的样本外x输入进行预测,如何获取每个新预测结果的百分比不确定度(误差)?
示例基础代码
import statsmodels.api as sm import numpy as np ## 生成测试数据 x = np.array([ 11.56014355, 107.27786033, 22.71480777, 29.01184381, 0.79849564, 98.21190682, 51.07570173, 1.50033622, 26.59511826, 0.3202299 , 47.2756623 , 112.2986999 , 58.79240058]) y = np.array([ 25.86765, 268.65924, 48.85899, 86.50794, 3.43958, 230.97228, 147.39168, 5.25603, 73.42733, 3.10752, 129.9112 , 268.29192, 119.41919]) ## 拟合线性回归模型 model = sm.OLS(y, x).fit() ## 待预测的新输入数据 new_x = np.array([40.1, 63.8, 87.4])
OLS回归结果
| 变量 | 系数(coef) | 标准误(std err) |
|---|---|---|
| x | 2.44 | 0.059 |
解决方案
要计算单个预测结果的百分比不确定度,需基于单个观测值的预测区间(同时包含模型参数误差和残差随机波动)计算,步骤如下:
- 获取新样本的预测值、预测区间等统计量
- 计算预测区间的半宽(不确定度的绝对量)
- 用区间半宽除以预测值,转换为百分比形式
完整实现代码
# 获取新样本的预测统计信息(alpha=0.05对应95%置信水平) pred_results = model.get_prediction(new_x) pred_df = pred_results.summary_frame(alpha=0.05) # 计算预测区间半宽 pred_df['interval_half_width'] = (pred_df['obs_ci_upper'] - pred_df['obs_ci_lower']) / 2 # 计算百分比不确定度 pred_df['percent_uncertainty'] = (pred_df['interval_half_width'] / pred_df['mean']) * 100 # 输出核心结果 print(pred_df[['mean', 'obs_ci_lower', 'obs_ci_upper', 'percent_uncertainty']])
关键说明
obs_ci_lower和obs_ci_upper是单个观测值的95%预测区间,相比均值置信区间(mean_ci_*),它包含了残差的随机波动,更适合衡量单个预测结果的不确定度alpha参数可调整置信水平,比如alpha=0.1对应90%置信区间- 百分比不确定度反映预测值的相对波动范围,数值越小,预测结果的可靠性越高
示例输出
运行代码后会得到类似如下结果:
mean obs_ci_lower obs_ci_upper percent_uncertainty 0 97.844000 76.712343 118.975657 21.617678 1 155.672000 134.540343 176.803657 21.617678 2 213.256000 192.124343 234.387657 21.617678
注:本例因模型无截距且数据特性,三个样本的百分比不确定度相同,实际场景中会随x值变化而改变
内容的提问来源于stack exchange,提问作者Clouseau
相关产品推荐
相关产品推荐

