如何使用含滞后Y变量的线性回归模型填充时间序列数据的NaN值
带滞后因变量的月度数据滚动预测实现方法
因为你的模型包含上一期的pkg_yld作为自变量,后续预测依赖上一期的输出结果,无法直接调用model.predict()批量计算,按以下步骤逐期迭代计算即可:
1. 提取模型参数
直接从已拟合的模型对象中读取系数,避免手动录入误差:
import pandas as pd import statsmodels.api as sm # 从拟合完成的model中提取回归系数 const = model.params['const'] adv_coef = model.params['adv'] lag_coef = model.params['pkg_yld_lag']
2. 预处理数据确认预测区间
首先确保数据按时间升序排列,定位到最后一个实际观测的pkg_yld值作为初始滞后项:
# 确保索引为时间格式且按升序排列 df.index = pd.to_datetime(df.index) df = df.sort_index() # 提取最后一个已实际观测的pkg_yld值作为初始滞后值 last_actual_value = df[df['pkg_yld'].notna()]['pkg_yld'].iloc[-1] # 筛选所有需要预测的行(pkg_yld为空的行) pred_rows = df[df['pkg_yld'].isna()]
3. 逐期迭代计算预测值
按月份顺序逐个计算预测值,每完成一期计算就更新滞后项为当期预测结果,供下一期计算使用:
current_lag_value = last_actual_value for idx, row in pred_rows.iterrows(): # 代入回归公式计算当期pkg_yld预测值 pred_value = const + adv_coef * row['adv'] + lag_coef * current_lag_value # 回填预测值到原数据表 df.loc[idx, 'pkg_yld'] = pred_value # 更新滞后值为当期预测值,用于下一期计算 current_lag_value = pred_value
运行完成后,原数据表中所有空缺的pkg_yld值就会按你要求的规则完成填充,和手动计算的2021年7月、8月结果完全一致。
内容的提问来源于stack exchange,提问作者jack homareau
相关产品推荐
相关产品推荐

