循环构建多线性回归模型报错:TypeError问题求助
解决循环构建Statsmodels线性回归模型时的TypeError问题
我看到你在尝试批量为多个结果变量构建线性回归模型时碰到了TypeError: 'type' object is not subscriptable的错误,这是代码里两个小语法疏漏导致的,咱们来一步步修正:
错误原因分析
导致报错的两个关键问题:
sm.OLS实例化方式错误:你用了方括号[]来传递自变量和因变量,但sm.OLS是一个类,必须用圆括号()来创建实例,方括号仅用于列表、字典这类序列的下标访问,所以会触发"type object is not subscriptable"的错误。fit方法调用缺少括号:model.fit只是引用了方法本身,必须加上()即model.fit()才能执行模型拟合并返回结果对象,否则你拿到的不是拟合后的模型结果,自然无法调用summary()方法。
修正后的完整代码
我还优化了代码结构,把单独定义的y1-y5改成直接用列名列表,让代码更简洁易维护:
import statsmodels.api as sm # 假设data是已经加载完成的Pandas DataFrame x = data[["Prod Order Quantity", "Print Type Complexity "]] # 直接用结果变量的列名列表,无需单独定义每个y变量 all_outcome_cols = [ "Per Unit Downtime and setup", "Per Unit Runtime", "Setup and downtime", "Total Runtime", "Total Variable Cost over Runtime" ] # 添加常数项到自变量矩阵 Xc = sm.add_constant(x) def train_all_models(outcome_columns): for col in outcome_columns: # 获取当前迭代的因变量 y = data[col] # 用圆括号正确实例化OLS模型 model = sm.OLS(y, Xc) # 调用fit()方法完成模型拟合 results = model.fit() # 添加分隔标题,方便区分不同变量的模型结果 print(f"=== 模型结果: {col} ===") print(results.summary()) print("\n" + "="*100 + "\n") # 调用函数批量训练模型并输出结果 train_all_models(all_outcome_cols)
额外优化说明
- 改用列名列表代替单独的y变量,减少冗余代码,后续新增或修改结果变量时只需调整列表即可。
- 添加了分隔标题和分割线,让不同模型的输出结果更易区分,方便查看。
内容的提问来源于stack exchange,提问作者AgitatedDataWeasel
相关产品推荐
相关产品推荐

