2017-03-24 5 views
1

Ich versuche, eine GEE unter Verwendung eines autoregressiven Struktur für einige Panel-Daten in statsmodels zu laufen, während der verschiedenen Stunden einer Verschiebung auf Unterschiede zwischen den Verkäufen suchen:Autoregression Parameter für GEE in Python Statsmodels

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()) 

Dies wirft a ValueError: Kein Belichtungsintervall.

Ich habe derzeit die 'Stunde' der Verschiebung codiert als Ordinalzahl (d. H. 1-8), aber auch Zeitstempel.

Irgendwelche Gedanken, wie Sie das überwinden können?

Volle Leistung:

//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. 
+0

Haben Sie versucht, 'Gruppen = BakeSaleData [" Salesperson "]' von Ihrer vorherigen Frage? Sie müssen den vollständigen Traceback anzeigen, damit wir sehen können, wo er fehlschlägt. Ich denke, das Finden des Autokorrelationsparameters ist nicht robust gegenüber extremen Fällen. – user333700

+0

Basierend auf dem Lesen der Funktion zur Schätzung des Korrelationskoeffizienten sollte der ValueError nur dann erhöht werden, wenn die Korrelation negativ ist, was in der Implementierung nicht erlaubt scheint. Aber eine negative Korrelation wäre ein seltsamer Fall für diese Art von Anwendung. – user333700

+0

Sollte jetzt die volle Ausgabe haben. Vielen Dank! – codercat

Antwort

0

Oft im Leben muss man sicherstellen, dass man von den richtigen Daten beginnt zu beginnen. Zum Beispiel die Prüfung einzelner Shifts statt Verkaeufer:

model2 = sm.GEE.from_formula("CookieSales ~ C(Hour) + Arrivals + TotalSalesPeople", groups=BakeSale["Shift"], 
       data=BakeSale, family=ga, time=times, cov_struct=ex) 

gezeigt, dass die max Clustergröße war verdächtig aus, und die die mittlere Clustergröße lag nur knapp über 8

Überprüfung der Querelen des ursprünglichen Datensatzes ergab, dass mehrere Schichten fälschlicherweise mit vielen, viel mehr als die entsprechende Anzahl von Stunden für eine Schicht codiert wurden. Sobald dies korrigiert wurde, konnte das Modell ordnungsgemäß ausgeführt werden ....

Verwandte Themen