线性回归中DataFrame组合结构是否引发非预期结果?
关于concat/div构建DataFrame与线性回归R²异常的排查建议
首先明确:R²为负不是concat或div方法的直接产物,它的本质是你的模型拟合效果远差于「仅用因变量均值做预测」的基准线。但如果concat或div操作不当,可能间接导致数据错位、异常值等问题,进而引发这种异常结果。
可能引发问题的concat/div操作细节
concat的潜在风险
- 索引对齐错误:如果concat时未统一索引,会导致因变量和自变量的行数据错位(比如甲患者的NPRS差值和乙患者的获益比被配对到同一行),模型拟合的是完全无关的噪声,必然出现R²为负。
- 冗余/错误列:concat后如果生成重复的特征或因变量列,后续建模时误选错误列,也会导致无意义的拟合。
div的潜在风险
- 分母异常:计算主动/被动获益比时,若被动获益值为0(包括填充后的0值),会产生无穷大(inf)的极端值,这类值会严重干扰回归拟合,直接拉低模型效果。
- 数据类型异常:div操作可能意外生成object类型的列(比如包含字符串的异常值),或填充的缺失值不合理(比如用极端值填充),导致模型无法正确计算。
具体排查步骤
检查最终建模DataFrame的合法性
- 用
df.head()、df.tail()核对每一行的因变量(4周NPRS-基础NPRS)和自变量(获益比)是否属于同一样本,索引是否完全对齐。 - 用
df['获益比'].describe()查看自变量分布:确认是否存在inf、NaN(div可能生成新的缺失/异常值)、或远超合理范围的极端值。 - 用
df.info()确认因变量和自变量均为数值类型(float64/int64),无object类型列。
- 用
验证模型输入的一致性
- 打印建模用的X(自变量)和y(因变量)的形状,确保
X.shape[0] == y.shape[0],且两者的缺失值数量均为0(X.isna().sum()、y.isna().sum())。 - 先做一个基准测试:用因变量的均值做预测,此时R²应为0;如果连这个结果都不对,说明数据本身存在根本性错误。
- 打印建模用的X(自变量)和y(因变量)的形状,确保
排查模型参数设置
- 确认statsmodels的OLS是否添加了截距:默认情况下OLS不包含截距,若未调用
sm.add_constant(X)强制添加,模型会强制过原点,当因变量均值不为0时,极易出现R²为负的情况。
- 确认statsmodels的OLS是否添加了截距:默认情况下OLS不包含截距,若未调用
内容的提问来源于stack exchange,提问作者Megan Perry
相关产品推荐
相关产品推荐

