线性回归模型方差分析报错:'ModelData'无'design_info'属性,如何修复?
修复statsmodels中ANOVA的AttributeError问题
运行线性回归模型的方差分析时触发AttributeError: 'ModelData' object has no attribute 'design_info'错误,代码示例如下:
import statsmodels.api as sm import numpy as np # 定义数据 x1 = np.random.rand(100) x2 = np.random.rand(100) y = 2*x1 + 3*x2 + np.random.normal(size=100) # 构建包含所有自变量的模型 X = sm.add_constant(np.column_stack((x1, x2))) model = sm.OLS(y, X).fit() # 执行F检验 f_value, p_value, _ = sm.stats.anova_lm(model, typ=1)
错误原因
sm.stats.anova_lm需要模型保留设计矩阵的元数据(比如变量名、变量结构),但当前代码里的X是纯numpy数组,没有列名等标识信息,导致拟合后的模型结果对象缺少design_info属性,无法被方差分析函数识别。
修复方案
最直接的解决方式是用pandas DataFrame存储自变量并给每个变量命名,让statsmodels自动记录设计信息:
import statsmodels.api as sm import numpy as np import pandas as pd # 定义数据 x1 = np.random.rand(100) x2 = np.random.rand(100) y = 2*x1 + 3*x2 + np.random.normal(size=100) # 用DataFrame存储自变量并指定列名 X = pd.DataFrame({"x1": x1, "x2": x2}) X = sm.add_constant(X) # 添加截距项 # 拟合模型 model = sm.OLS(y, X).fit() # 执行方差分析 anova_results = sm.stats.anova_lm(model, typ=1) print(anova_results)
这样处理后,模型结果会自动包含design_info属性,anova_lm就能正常运行并输出方差分析结果。
内容的提问来源于stack exchange,提问作者randomGeek4
相关产品推荐
相关产品推荐

