复制Scipy的RegressionResults.predict功能

时间:2018-08-17 20:34:26

标签: python pandas scipy patsy

这是我的示例程序:

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的相关功能文档页面中没有发现任何明显的东西,调试时似乎也无法输入源代码的这一部分。 有人知道如何设置吗?

0 个答案:

没有答案