'Returns a DataFrame summarizing the marginal effects.
Parameters
alpha : float
Number between 0 and 1. The confidence intervals have the
probability 1-alpha.
Returns
frame : DataFrames
A DataFrame summarizing the marginal effects.
Notes
The dataframe is created on each call and not cached, as are the
tables build in `summary()`'

def summary_frame(self, alpha=0.05):

    _check_at_is_all(self.margeff_options)
    results = self.results
    model = self.results.model
    from pandas import DataFrame, MultiIndex
    names = [_transform_names[self.margeff_options['method']], 'Std.    Err.', 'z', 'Pr(>|z|)', 'Conf.    Int.    Low', 'Cont.    Int.    Hi.']
    ind = (self.results.model.exog.var(0) != 0)
    exog_names = self.results.model.exog_names
    var_names = [name for (i, name) in enumerate(exog_names) if ind[i]]
    if (self.margeff.ndim == 2):
        ci = self.conf_int(alpha)
        table = np.column_stack([i.ravel('F') for i in [self.margeff, self.margeff_se, self.tvalues, self.pvalues, ci[:, 0, :], ci[:, 1, :]]])
        (_, yname_list) = results._get_endog_name(model.endog_names, None, all=True)
        ynames = np.repeat(yname_list, len(var_names))
        xnames = np.tile(var_names, len(yname_list))
        index = MultiIndex.from_tuples(list(zip(ynames, xnames)), names=['endog', 'exog'])
    else:
        table = np.column_stack((self.margeff, self.margeff_se, self.tvalues, self.pvalues, self.conf_int(alpha)))
        index = var_names
    return DataFrame(table, columns=names, index=index)
