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列的实例。