这是我的示例程序:
import numpy as np
import pandas as pd
import statsmodels
from statsmodels.formula.api import ols
df = pd.DataFrame({"z": [1,1,1,2,2,2,3,3,3],
"x":[0,1,2,0,1,2,0,1,2],
"y":[0,2,4,3,5,7,7,9,11]
})
model = ols("y ~ x + z + I(z**2)", df).fit()
model.params
newdf = pd.DataFrame({"z": [4,4,4,5,5,5],
"x":[0,1,2,0,1,2]
})
model.predict(newdf)
如果运行此命令,您会注意到该model.params是一个熊猫公式系列,其索引与公式的右侧相同,但有一个额外的条目:“拦截”
> Out[2]:
> Intercept -2.0
> x 2.0
> z 1.5
> I(z ** 2) 0.5
> dtype: float64
并且,使用一些我无法确定的内部功能,RegressionResults对象的.predict()可以识别newdf中的列标题,并将它们匹配(包括patsy语法“ I(z ** 2)”),然后添加截获,并返回答案系列。 (这是我的示例代码的最后一行)
这似乎很方便!每当我想评估它的细微变化时,总比用python / numpy代码再次写出公式更好。我觉得应该为我的公式系数构造类似的pd.Series,而不是通过模型和拟合创建它。然后,我应该可以将此方法应用于适当的数据框,作为评估功能的一种方法。
我试图弄清楚statsmodel的工作方式没有奏效,我在patsy的相关功能文档页面中没有发现任何明显的东西,调试时似乎也无法输入源代码的这一部分。 有人知道如何设置吗?