You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拟合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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:55:46