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

使用Statsmodels拟合线性曲线时遇TypeError:float不可迭代

问题解决:OLS回归中TypeError: 'float' object is not iterable

错误根源

你使用list(map(param, GDP, stock))时,map()会将GDP和stock两个列表的单个元素逐一配对传入param函数。也就是说,每次调用param时,factor是GDP里的单个float值,stock是stock列表里的单个float值,而sm.OLS要求输入是一维数组/序列类型,单个float自然触发"不可迭代"的错误。

修正后的代码

#############REGRESSION###################
import csv
from scipy import stats
import statsmodels.api as sm
from scipy.optimize import curve_fit
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf  
from statsmodels.tsa.stattools import adfuller
from sklearn.model_selection import train_test_split
from pmdarima.arima.utils import ndiffs  
import pmdarima as pm
from pmdarima import auto_arima
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.arima_model import ARIMA 
from statsmodels.tsa.seasonal import seasonal_decompose
import numpy as np

#First, three stock factors with GDP
GDP=list(df1['GDP'])
GDP=GDP[:len(stockdf)]
GDP.reverse()
print(GDP)

def param(factor, stock):
    # 给因子添加常数项,转为符合OLS要求的输入格式
    factor_with_const = sm.add_constant(factor)
    print(type(factor_with_const))
    model = sm.OLS(stock, factor_with_const)
    fit_result = model.fit()
    params = fit_result.params.tolist()
    # 返回拟合参数,若需要生成拟合直线,可返回参数计算后的序列
    return params

print(type(stockdf['SSE']))
stock=list(stockdf['SSE'])
print(type(stock))
# 直接传入整个数组,无需使用map遍历单个元素
model_params = param(GDP, stock)
print("拟合参数:", model_params)

# 生成拟合直线的预测值(可选)
fitted_line = model_params[1] * np.array(GDP) + model_params[0]
print("拟合序列:", fitted_line)

关键修正点

  • 移除map()调用:直接将整个GDP和stock列表传入param,而非逐个传递单个元素。
  • 修正未定义变量:原代码中return p[1]*x+p[0]的x未定义,改为返回拟合参数,或根据参数计算完整的拟合序列。
  • 确保输入维度合规:sm.add_constant接受一维数组,传入整个GDP列表会自动转为带常数项的二维数组,满足sm.OLS的输入要求。

扩展:多组因子批量回归

如果需要对多组因子和因变量分别做回归,可改用循环遍历数组组,而非单个元素:

def batch_regress(factors_list, stocks_list):
    fit_results = []
    for factor, stock in zip(factors_list, stocks_list):
        model = sm.OLS(stock, sm.add_constant(factor))
        fit_results.append(model.fit().params.tolist())
    return fit_results

内容的提问来源于stack exchange,提问作者Jessicaus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:05:31