class_docstr: Mixin class for Maximum Penalized Likelihood
  
  Parameters
  ----------
  args and kwds for the model super class
  penal : None or instance of Penalized function class
      If penal is None, then NonePenalty is used.
  pen_weight : float or None
      factor for weighting the penalization term.
      If None, then pen_weight is set to nobs.
  
  
  TODO: missing **kwds or explicit keywords
  
  TODO: do we adjust the inherited docstrings?
  We would need templating to add the penalization parameters
docstr: hessian based on finite difference derivative
          
docstr_tok: ["hessian","based","on","finite","difference","derivative"]
code: def hessian_numdiff(self, params, pen_weight=None, **kwds):
      """hessian based on finite difference derivative"""
      if pen_weight is None:
          pen_weight = self.pen_weight
      loglike = lambda p: self.loglike(p, pen_weight=pen_weight, **kwds)
  
      from statsmodels.tools.numdiff import approx_hess
  
      return approx_hess(params, loglike)
  
file_path: statsmodels/statsmodels/base/_penalized.py
imports: import numpy
  from ._penalties import NonePenalty
  from statsmodels.tools.numdiff import approx_fprime_cs, approx_fprime
label_desc: Use image node_id 8 for calling the PenalizedMixin obj's underlying member method code with example usage: obj.hessian_numdiff(params, pen_weight) and returns: approx_hess