如何用Python计算并绘制线性回归的预测区间与置信区间
在线性回归模型中同时绘制预测区间与置信区间
你已经通过statsmodels实现了预测区间的绘制,要同时添加置信区间非常简单——get_prediction()返回的结果中,summary_frame()已经包含了置信区间的上下限数据,只需要新增一段绘制置信区间的代码即可。
修改后的完整代码
import statsmodels.api as sm import statsmodels.formula.api as smf import numpy as np import pandas as pd import matplotlib.pyplot as plt # 数据集 data = { 'X': [55641, 55681, 55637, 55825, 55772, 55890, 56068, 56299, 56825, 57205, 57562, 57850, 57975, 57992, 58240, 58414, 58561, 59066, 58596, 58631, 58758, 59037], 'Y': [21886, 21934, 21699, 21901, 21812, 21714, 21932, 22086, 22265, 22551, 22736, 22301, 22518, 22580, 22618, 22890, 23112, 23315, 22865, 22788, 22949, 23149] } df = pd.DataFrame(data) # 拟合OLS模型 model = smf.ols(formula='Y ~ X', data=df) results = model.fit() print(results.summary()) # 获取预测结果(包含置信区间与预测区间) predictions = results.get_prediction(df) prediction_summary_frame = predictions.summary_frame(alpha=0.05) # 绘制散点图(原始数据) plt.scatter(df['X'], df['Y'], color='black', label='原始数据') # 绘制回归线 plt.plot(df['X'], results.fittedvalues, color='#58C9F4', label='回归线') # 绘制置信区间(均值的置信区间) plt.fill_between(df['X'], prediction_summary_frame['mean_ci_lower'], prediction_summary_frame['mean_ci_upper'], color='#A6E3E9', alpha=0.3, label='95% 置信区间') # 绘制预测区间(单个观测值的预测区间) plt.fill_between(df['X'], prediction_summary_frame['obs_ci_lower'], prediction_summary_frame['obs_ci_upper'], color='grey', alpha=0.2, label='95% 预测区间') plt.xlabel('X') plt.ylabel('Y') plt.title('线性回归:同时显示置信区间与预测区间') plt.legend() plt.show()
关键说明
prediction_summary_frame中,mean_ci_lower和mean_ci_upper对应95%置信区间的上下限,反映的是回归线整体的估计精度;obs_ci_lower和obs_ci_upper对应95%预测区间的上下限,反映的是单个新观测值的预测范围;- 通过调整
color和alpha参数,可以让两个区间的层次更清晰,置信区间通常比预测区间更窄。
内容的提问来源于stack exchange,提问作者user25524331
相关产品推荐
相关产品推荐

