'Summarize the GEE regression results
Parameters
yname : string, optional
Default is `y`
xname : list of strings, optional
Default is `var_##` for ## in p the number of regressors
title : string, optional
Title for the top table. If not None, then this replaces
the default title
alpha : float
significance level for the confidence intervals
cov_type : string
The covariance type used to compute the standard errors;
one of \'robust\' (the usual robust sandwich-type covariance
estimate), \'naive\' (ignores dependence), and \'bias
reduced\' (the Mancl/DeRouen estimate).
Returns
smry : Summary instance
this holds the summary tables and text, which can be
printed or converted to various output formats.
See Also
statsmodels.iolib.summary.Summary : class to hold summary
results'

def summary(self, yname=None, xname=None, title=None, alpha=0.05):

    top_left = [('Dep.    Variable:', None), ('Model:', None), ('Method:', ['Generalized']), ('', ['Estimating    Equations']), ('Family:', [self.model.family.__class__.__name__]), ('Dependence    structure:', [self.model.cov_struct.__class__.__name__]), ('Date:', None), ('Covariance    type:    ', [self.cov_type])]
    NY = [len(y) for y in self.model.endog_li]
    top_right = [('No.    Observations:', [sum(NY)]), ('No.    clusters:', [len(self.model.endog_li)]), ('Min.    cluster    size:', [min(NY)]), ('Max.    cluster    size:', [max(NY)]), ('Mean    cluster    size:', [('%.1f' % np.mean(NY))]), ('Num.    iterations:', [('%d' % len(self.fit_history['params']))]), ('Scale:', [('%.3f' % self.scale)]), ('Time:', None)]
    skew1 = stats.skew(self.resid)
    kurt1 = stats.kurtosis(self.resid)
    skew2 = stats.skew(self.centered_resid)
    kurt2 = stats.kurtosis(self.centered_resid)
    diagn_left = [('Skew:', [('%12.4f' % skew1)]), ('Centered    skew:', [('%12.4f' % skew2)])]
    diagn_right = [('Kurtosis:', [('%12.4f' % kurt1)]), ('Centered    kurtosis:', [('%12.4f' % kurt2)])]
    if (title is None):
        title = ((self.model.__class__.__name__ + '    ') + 'Regression    Results')
    if (xname is not None):
        xna = xname
    else:
        xna = self.model.exog_names
    from statsmodels.iolib.summary import Summary
    smry = Summary()
    smry.add_table_2cols(self, gleft=top_left, gright=top_right, yname=self.model.endog_names, xname=xna, title=title)
    smry.add_table_params(self, yname=yname, xname=xna, alpha=alpha, use_t=False)
    smry.add_table_2cols(self, gleft=diagn_left, gright=diagn_right, yname=yname, xname=xna, title='')
    return smry
