Statsmodels OLS回归p值在if判断中失效问题求助
问题分析与修正
你的代码有三个关键错误,直接导致p值判断逻辑失效:
OLS参数顺序颠倒
statsmodels的OLS()函数要求第一个参数是因变量(Y,你要探究的结果变量),第二个是自变量(X,用来解释Y的变量)。你现在把固定自变量3rd Ventricle volume cm3当成了因变量,遍历的列当成了自变量,完全搞反了回归逻辑。未添加截距项
默认情况下,statsmodels的OLS不会自动加入截距项,这会导致模型设定偏差,回归结果的系数和p值都不可靠,必须用sm.add_constant()给自变量补充截距。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
相关产品推荐
相关产品推荐

