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

Statsmodels OLS回归p值在if判断中失效问题求助

问题分析与修正

你的代码有三个关键错误,直接导致p值判断逻辑失效:

  1. OLS参数顺序颠倒
    statsmodels的OLS()函数要求第一个参数是因变量(Y,你要探究的结果变量),第二个是自变量(X,用来解释Y的变量)。你现在把固定自变量3rd Ventricle volume cm3当成了因变量,遍历的列当成了自变量,完全搞反了回归逻辑。

  2. 未添加截距项
    默认情况下,statsmodels的OLS不会自动加入截距项,这会导致模型设定偏差,回归结果的系数和p值都不可靠,必须用sm.add_constant()给自变量补充截距。

  3. p值索引取错
    添加截距后,回归结果的pvalues数组里,索引0是截距项的p值,索引1才是你要的固定自变量的p值。你之前判断的是截距的显著性,和你要探究的变量关系完全无关。


修正后的代码

import statsmodels.api as sm

for column in my_patients_volbrain_volumes:
    if my_patients_volbrain_volumes[column].name == "Sex":
        continue  # 用continue跳过目标列,逻辑更清晰
    # 正确设定因变量与自变量
    Y = my_patients_volbrain_volumes[column]  # 遍历的列作为因变量
    X = my_patients_volbrain_volumes['3rd Ventricle volume cm3']
    # 为自变量添加截距项
    X_with_intercept = sm.add_constant(X)
    # 正确初始化OLS模型:因变量在前,自变量在后
    model = sm.OLS(Y, X_with_intercept)
    result = model.fit()
    
    # 取固定自变量对应的p值(索引1),判断是否显著
    if result.pvalues[1] < 0.05:
        print(f"因变量: {column}")
        print(f"自变量p值: {result.pvalues[1]}")
        print(f"自变量系数: {result.params[1]}")
        print("---")

内容的提问来源于stack exchange,提问作者Şiyar Bahadır

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:42:07