Python 使用statsmodels进行回归时出现PatsyError
我正在Python 使用statsmodels进行回归时出现PatsyError,python,pandas,Python,Pandas,我正在statsmodels中使用ols运行回归。在数据帧的每一行上运行回归后,我想从那些回归中使用的patsy中检索X变量。但是,我犯了一个我似乎无法理解的错误 编辑:我正在尝试运行中显示的回归,但希望在我的数据帧df的分组版本的每一行上运行回归,其中它按日期,余额,距离,支付历史,inc,bckts进行分组。因此,我首先按照上述方法对这些数据进行分组,然后尝试在每一行上运行回归,其中,df按Date进行分组:df.groupby(['Date'])。apply(ols_coef,'bal~C
statsmodels
中使用ols
运行回归。在数据帧的每一行上运行回归后,我想从那些回归中使用的patsy
中检索X变量。但是,我犯了一个我似乎无法理解的错误
编辑:我正在尝试运行中显示的回归,但希望在我的数据帧df
的分组版本的每一行上运行回归,其中它按日期
,余额
,距离
,支付历史
,inc
,bckts
进行分组。因此,我首先按照上述方法对这些数据进行分组,然后尝试在每一行上运行回归,其中,df
按Date
进行分组:df.groupby(['Date'])。apply(ols_coef,'bal~C(dist)+C(pay_hist)+C(inc)+C(bckts)
我的代码如下:
from statsmodels.formula.api import ols
df = df.groupby([['Date','bal', 'dist', 'pay_hist', 'inc', 'bckts']])
######run regression
def ols_coef(x,formula):
return ols(formula,data=x).fit().params
gamma = df.groupby(['Date']).apply(ols_coef,'bal ~ C(dist) + C(pay_hist) + C(inc) + C(bckts)')
print('gamme is {}'.format(gamma))
########################
#####Now trying to retrieve the X variables in the regressions above
formula = 'bal ~ C(dist) + C(pay_hist) + C(inc) + C(bckts)'
data = df.groupby(['Date'])[['bckts', 'wac_dist', 'pay_hist', 'inc', 'bal']]
y,X = patsy.dmatrices(formula,data,return_type='dataframe')
################
我发现以下错误,不确定如何解决:
patsy.PatsyError: Error evaluating factor: Exception: Column(s) ['bckts', 'dist', 'pay_hist', 'inc', 'bal'] already selected
bal ~ C(dist) + C(pay_hist) + C(inc) + C(bckts)
^^^^^^^^^^^
问题是您正在将分组数据帧传递到
pasty.dmatrices
函数中。由于分组数据帧是可编辑的,您可以在这样的循环中执行,并将所有X数据帧(每组一个)存储到字典中:
import statsmodels.api as sm
import statsmodels.formula.api as smf
import numpy as np
import pandas as pd
import patsy
# Loading data
df = sm.datasets.get_rdataset("Guerry", "HistData").data
# Extracting Independent variables
formula = 'Suicides ~ Crime_parents + Infanticide'
data = df.groupby(['Region'])[['Suicides', 'Crime_parents', 'Infanticide', 'Region']]
X = {}
for name, group in data:
Y, X[name] = patsy.dmatrices(formula, group, return_type='dataframe')
print(X)
df.apply
按列而不是按行应用。你还需要弄清楚为什么要按“日期”分组,你的目标是什么?是否要为数据框中的每个“日期”组运行单独的回归?只按“日期”分组是很少见的,通常你会有“月”或“年”之类的词。@annicheez谢谢。我正在运行本文中介绍的回归。我更改了问题,以反映我第一次按Date
、bal
等分组,并希望在反映分组数据的行上运行回归。此外,日期是每月一次的,因此它实际上是信息的一个月。见下面我的答案。问题是您将分组数据帧馈送到pasty.dmatrices
函数中,该函数会抛出错误,因为它需要一个Xs和Y列的实例。