拟合OLS模型遇两类报错:MissingDataError及变量未定义求助
解决OLS模型拟合的两个错误
1. MissingDataError: exog contains inf or nan
虽然df1.isna().sum()显示无缺失值,但数据里可能存在**无穷大(inf)**值,或者你检查的df1和用于建模的x_train/y_train不是同一数据集。
处理步骤:
- 检查
x_train和y_train的异常值:import numpy as np # 检查x_train是否有inf或nan print(x_train.isin([np.inf, -np.inf]).sum()) print(y_train.isin([np.inf, -np.inf]).sum()) - 如果存在inf值,替换为NaN后删除或填充:
# 替换inf为NaN x_train = x_train.replace([np.inf, -np.inf], np.nan) y_train = y_train.replace([np.inf, -np.inf], np.nan) # 删除含NaN的行(或用均值填充:x_train.fillna(x_train.mean(), inplace=True)) x_train = x_train.dropna() y_train = y_train.loc[x_train.index] # 保证y与x行索引对齐 - 确认
x_train和y_train是从df1拆分而来,避免数据集不一致问题。
2. olsmodel1 not defined
这个错误是第一个错误导致的连锁问题——sm.OLS(y_train, x_train).fit()执行失败,未生成olsmodel1变量,后续print(olsmodel1.summary())自然找不到该变量。解决第一个错误后,建模代码能顺利运行,此问题会自动消失。
完整修正示例代码
import numpy as np import statsmodels.api as sm # 处理异常值 x_train = x_train.replace([np.inf, -np.inf], np.nan) y_train = y_train.replace([np.inf, -np.inf], np.nan) x_train = x_train.dropna() y_train = y_train.loc[x_train.index] # 拟合模型(添加常数项以包含截距,若不需要可去掉sm.add_constant) olsmodel1 = sm.OLS(y_train, sm.add_constant(x_train)).fit() print(olsmodel1.summary())
注意:若模型需要截距项,必须用
sm.add_constant(x_train)给自变量添加常数项,否则OLS会强制过原点拟合,可能不符合分析需求。
内容的提问来源于stack exchange,提问作者Foluso Alabi
相关产品推荐
相关产品推荐

