'Outer product of gradients information matrix
Parameters
params : array_like, optional
Array of parameters at which to evaluate the loglikelihood
function.
**kwargs
Additional arguments to the `loglikeobs` method.
References
Berndt, Ernst R., Bronwyn Hall, Robert Hall, and Jerry Hausman. 1974.
Estimation and Inference in Nonlinear Structural Models.
NBER Chapters. National Bureau of Economic Research, Inc.'

def opg_information_matrix(self, params, transformed=True, approx_complex_step=None, **kwargs):

    if (approx_complex_step is None):
        approx_complex_step = transformed
    if ((not transformed) and approx_complex_step):
        raise ValueError('Cannot    use    complex-step    approximations    to    calculate    the    observed_information_matrix    with    untransformed    parameters.')
    score_obs = self.score_obs(params, transformed=transformed, approx_complex_step=approx_complex_step, **kwargs).transpose()
    return (np.inner(score_obs, score_obs) / (self.nobs - self.ssm.loglikelihood_burn))
