Python Statsmodels中GEE的自回归参数

Python Statsmodels中GEE的自回归参数,python,statsmodels,panel-data,Python,Statsmodels,Panel Data,我正在尝试对statsmodels中的一些面板数据使用自回归结构来运行GEE,查看轮班不同时间的销售差异: ga = sm.families.Gaussian() ar = sm.cov_struct.Autoregressive() times = (BakeSale['Hour'].values) ar.dep_params = 0.06 model2 = sm.GEE.from_formula("CookieSales ~ C(Hour) + Arrivals + TotalSalesPe

我正在尝试对statsmodels中的一些面板数据使用自回归结构来运行GEE,查看轮班不同时间的销售差异:

ga = sm.families.Gaussian()
ar = sm.cov_struct.Autoregressive()
times = (BakeSale['Hour'].values)
ar.dep_params = 0.06
model2 = sm.GEE.from_formula("CookieSales ~ C(Hour) + Arrivals + TotalSalesPeople", groups=BakeSale["SalesPerson"],
                  data=BakeSale, family=ga, time=times, cov_struct=ar)
result2 = model2.fit(start_params=result1.params)
print(result2.summary())
这会引发ValueError:不是括号间隔

我目前将移位的“小时”编码为顺序整数(即1-8),但也有时间戳

有什么想法可以克服这个问题吗

全输出:

//anaconda/lib/python3.5/site-packages/statsmodels/genmod/cov_struct.py:724: RuntimeWarning: divide by zero encountered in true_divide
  wts = 1. / var
//anaconda/lib/python3.5/site-packages/statsmodels/genmod/cov_struct.py:725: RuntimeWarning: invalid value encountered in true_divide
  wts /= wts.sum()
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-81-d81d0b97546e> in <module>()
      7 #CookieSales ~ C(Hour) + Arrivals + TotalSalesPeople"
      8 # Maybe try without C, or find if any with nan value or such
----> 8 result2 = model2.fit(start_params=result1.params)
      9 print(result2.summary())
     10 print(ar.summary())

//anaconda/lib/python3.5/site-packages/statsmodels/genmod/generalized_estimating_equations.py in fit(self, maxiter, ctol, start_params, params_niter, first_dep_update, cov_type, ddof_scale, scaling_factor)
   1111             if (self.update_dep and (itr % params_niter) == 0
   1112                 and (itr >= first_dep_update)):
-> 1113                 self._update_assoc(mean_params)
   1114                 num_assoc_updates += 1
   1115 

//anaconda/lib/python3.5/site-packages/statsmodels/genmod/generalized_estimating_equations.py in _update_assoc(self, params)
   1259         """
   1260 
-> 1261         self.cov_struct.update(params)
   1262 
   1263     def _derivative_exog(self, params, exog=None, transform='dydx',

//anaconda/lib/python3.5/site-packages/statsmodels/genmod/cov_struct.py in update(self, params)
    766 
    767         from scipy.optimize import brent
--> 768         self.dep_params = brent(fitfunc, brack=[b_lft, b_ctr, b_rgt])
    769 
    770 

//anaconda/lib/python3.5/site-packages/scipy/optimize/optimize.py in brent(func, args, brack, tol, full_output, maxiter)
   2001     options = {'xtol': tol,
   2002                'maxiter': maxiter}
-> 2003     res = _minimize_scalar_brent(func, brack, args, **options)
   2004     if full_output:
   2005         return res['x'], res['fun'], res['nit'], res['nfev']

//anaconda/lib/python3.5/site-packages/scipy/optimize/optimize.py in _minimize_scalar_brent(func, brack, args, xtol, maxiter, **unknown_options)
   2033                   full_output=True, maxiter=maxiter)
   2034     brent.set_bracket(brack)
-> 2035     brent.optimize()
   2036     x, fval, nit, nfev = brent.get_result(full_output=True)
   2037     return OptimizeResult(fun=fval, x=x, nit=nit, nfev=nfev,

//anaconda/lib/python3.5/site-packages/scipy/optimize/optimize.py in optimize(self)
   1839         # set up for optimization
   1840         func = self.func
-> 1841         xa, xb, xc, fa, fb, fc, funcalls = self.get_bracket_info()
   1842         _mintol = self._mintol
   1843         _cg = self._cg

//anaconda/lib/python3.5/site-packages/scipy/optimize/optimize.py in get_bracket_info(self)
   1827             fc = func(*((xc,) + args))
   1828             if not ((fb < fa) and (fb < fc)):
-> 1829                 raise ValueError("Not a bracketing interval.")
   1830             funcalls = 3
   1831         else:

ValueError: Not a bracketing interval.
//anaconda/lib/python3.5/site packages/statsmodels/genmod/cov_struct.py:724:RuntimeWarning:true_divide中遇到被零除
wts=1./变量
//anaconda/lib/python3.5/site packages/statsmodels/genmod/cov_struct.py:725:RuntimeWarning:true_divide中遇到无效值
wts/=wts.sum()
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
7#CookieSales~C(小时)+到达+总销售人员”
8#可以尝试不使用C,或者查找是否有nan值或类似值
---->8结果2=model2.fit(开始参数=result1.params)
9打印(result2.summary())
10打印(应收账款摘要())
//anaconda/lib/python3.5/site-packages/statsmodels/genmod/generalized_estimating_equations.py in fit(self、maxiter、ctol、start_params、params_niter、first_dep_update、cov_type、ddof_scale、scaling_factor)
1111如果(self.update_dep)和(itr%params_niter)=0
1112和(itr>=第一次部门更新):
->1113自我更新助理(平均参数)
1114次相关更新次数+=1
1115
//anaconda/lib/python3.5/site-packages/statsmodels/genmod/generalized_estimating_equations.py in_update_assoc(self,params)
1259         """
1260
->1261自我约束结构更新(参数)
1262
1263定义导数exog(self,params,exog=None,transform='dydx',
//更新中的anaconda/lib/python3.5/site-packages/statsmodels/genmod/cov_struct.py(self,params)
766
767从scipy.brent进口
-->768 self.dep_params=brent(fitfunc,brack=[b_lft,b_ctr,b_rgt])
769
770
//brent中的anaconda/lib/python3.5/site-packages/scipy/optimize/optimize.py(func、args、brack、tol、full_output、maxiter)
2001选项={'xtol':tol,
2002年“maxiter”:maxiter}
->2003 res=\u最小化\u标量\u布伦特(func、brack、args、**选项)
2004年如果全部输出:
2005年返回结果['x']、结果['fun']、结果['nit']、结果['nfev']
//anaconda/lib/python3.5/site-packages/scipy/optimize/optimize.py in(func,brack,args,xtol,maxiter,未知选项)
2033全输出=真,最大输出=最大输出)
2034布伦特装置支架(支架)
->2035布伦特石油公司
2036 x,fval,nit,nfev=布伦特。获取结果(完整输出=真)
2037返回优化结果(fun=fval,x=x,nit=nit,nfev=nfev,
//优化(self)中的anaconda/lib/python3.5/site-packages/scipy/optimize/optimize.py
1839#为优化设置
1840 func=self.func
->1841 xa,xb,xc,fa,fb,fc,funcall=self.get_bracket_info()
1842年_mintol=self._mintol
1843年_cg=自我。_cg
//获取括号信息(self)中的anaconda/lib/python3.5/site-packages/scipy/optimize/optimize.py
1827 fc=func(*(xc,)+args))
1828如果不是((fb1829 raise VALUE ERROR(“非括号间隔”)
1830 funcall=3
1831其他:
ValueError:不是括号间隔。

在生活中,人们通常需要确保自己从正确的数据开始。例如,检查每个班次而不是销售人员:

model2 = sm.GEE.from_formula("CookieSales ~ C(Hour) + Arrivals + TotalSalesPeople", groups=BakeSale["Shift"],
              data=BakeSale, family=ga, time=times, cov_struct=ex)
证明最大簇大小可疑地偏离,平均簇大小略高于8


对原始数据集争论的回顾表明,几个班次被错误地编码为许多,远远超过了一个班次的适当小时数。一旦纠正了这一点,模型就能够正常运行……

在生活中,人们通常需要确保从正确的数据开始。例如例如,检查个别轮班而不是销售人员:

model2 = sm.GEE.from_formula("CookieSales ~ C(Hour) + Arrivals + TotalSalesPeople", groups=BakeSale["Shift"],
              data=BakeSale, family=ga, time=times, cov_struct=ex)
证明最大簇大小可疑地偏离,平均簇大小略高于8


对原始数据集争论的审查表明,几个班次被错误地编码为许多,远远超过了一个班次的适当小时数。一旦纠正了这一点,该模型就能够正常运行了……

您是否尝试过
groups=BakeSaleData[“salesson”]
从您之前的问题中?您需要显示完整的回溯,以便我们看到它失败的地方。我想找到自相关参数对于极端情况来说并不可靠。根据我对估计相关系数的函数的阅读,只有当相关为负时,才应该提出ValueError,而这似乎不是在实现中允许。但是对于这种类型的应用程序,负相关性是一种奇怪的情况。现在应该有完整的输出。谢谢!您是否尝试过
groups=BakeSaleData[“salesson”]
从您之前的问题中?您需要显示完整的回溯,以便我们看到它失败的地方。我想找到自相关参数对于极端情况来说并不可靠。根据我对估计相关系数的函数的阅读,只有当相关为负时,才应该提出ValueError,而这似乎不是允许在实现中使用。但是对于这种类型的应用程序,负相关性将是一种奇怪的情况。现在应该有完整的输出。谢谢!