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

Statsmodels:如何不将X、Y传入logit函数创建含变量变换的自定义公式?

解决方法

首先修正公式的语法错误:
你的公式末尾多了一个多余的右括号,修正后应该是:

formula = "y~np.log(x1) + x2 + x3 + x4 + x5"

然后,要实现不用单独传入X、Y,直接用公式创建模型,正确的做法是将公式和包含所有变量的数据集一起传给logit函数,而不是单独传endog(Y)和exog(X)参数。示例代码如下:

import statsmodels.formula.api as smf
import pandas as pd

# 假设你的数据存储在DataFrame里
data = pd.DataFrame({
    'y': [0,1,0,1,0],
    'x1': [1,2,3,4,5],
    'x2': [2,3,4,5,6],
    'x3': [3,4,5,6,7],
    'x4': [4,5,6,7,8],
    'x5': [5,6,7,8,9]
})

# 也可以用statsmodels内置的log函数,写法简化为log(x1)
formula = "y~log(x1) + x2 + x3 + x4 + x5"

# 直接传入公式和数据集,不用单独拆分X、Y
model = smf.logit(formula=formula, data=data)
result = model.fit()
print(result.summary())

如果要实现二次、三次项变换,需要用I()函数包裹表达式(因为公式语法里**有特殊含义,I()用于明确表示数学运算):

# 包含x1的二次项、x2的三次项的公式
formula = "y~log(x1) + I(x1**2) + I(x2**3) + x3 + x4 + x5"

这样调用smf.logit时,statsmodels会自动从数据集中提取公式里的变量,并完成所有指定的变换,无需手动处理X和Y的拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:05:21