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
相关产品推荐
相关产品推荐

