Assumes we have a panel of time series with consecutive, equal spaced time
periods. Data is assumed to be in long format with time series of each
individual stacked into one array. Panel can be unbalanced.

Parameters:

results (result instance) – result of a regression, uses results.model.exog and results.resid
TODO: this should use wexog instead

nlags (int or None) – Highest lag to include in kernel window. Currently, no default
because the optimal length will depend on the number of observations
per cross-sectional unit.

groupidx (list of tuple) – each tuple should contain the start and end index for an individual.
(groupidx might change in future).

weights_func (callable) – weights_func is called with nlags as argument to get the kernel
weights. default are Bartlett weights

use_correction ('cluster' or 'hac' or False) – If False, then no small sample correction is used.
If ‘cluster’ (default), then the same correction as in cov_cluster is
used.
If ‘hac’, then the same correction as in single time series, cov_hac
is used.

Returns:

cov – HAC robust covariance matrix for parameter estimates

Return type:

ndarray, (k_vars, k_vars)

Notes

For nlags=0, this is just White covariance, cov_white.
If kernel is uniform, weights_uniform, with nlags equal to the number
of observations per unit in a balance panel, then cov_cluster and
cov_hac_panel are identical.

Tested against STATA newey command with same defaults.

Options might change when other kernels besides Bartlett and uniform are
available.