class_docstr: Fit a regression model using quadratic inference functions (QIF).
  
  QIF is an alternative to GEE that can be more efficient, and that
  offers different approaches for model selection and inference.
  
  Parameters
  ----------
  endog : array_like
      The dependent variables of the regression.
  exog : array_like
      The independent variables of the regression.
  groups : array_like
      Labels indicating which group each observation belongs to.
      Observations in different groups should be independent.
  family : genmod family
      An instance of a GLM family.
  cov_struct : QIFCovariance instance
      An instance of a QIFCovariance.
  
  References
  ----------
  A. Qu, B. Lindsay, B. Li (2000).  Improving Generalized Estimating
  Equations using Quadratic Inference Functions, Biometrika 87:4.
  www.jstor.org/stable/2673612
code: def __init__(
      self,
      endog,
      exog,
      groups,
      family=None,
      cov_struct=None,
      missing="none",
      **kwargs,
  ):
      # Handle the family argument
      if family is None:
          family = families.Gaussian()
      else:
          if not issubclass(family.__class__, families.Family):
              raise ValueError(
                  "QIF: `family` must be a genmod " "family instance"
              )
      self.family = family
  
      self._fit_history = defaultdict(list)
  
      # Handle the cov_struct argument
      if cov_struct is None:
          cov_struct = QIFIndependence()
      else:
          if not isinstance(cov_struct, QIFCovariance):
              raise ValueError(
                  "QIF: `cov_struct` must be a QIFCovariance instance"
              )
      self.cov_struct = cov_struct
  
      groups = np.asarray(groups)
  
      super().__init__(
          endog, exog, groups=groups, missing=missing, **kwargs
      )
  
      self.group_names = list(set(groups))
      self.nobs = len(self.endog)
  
      groups_ix = defaultdict(list)
      for i, g in enumerate(groups):
          groups_ix[g].append(i)
      self.groups_ix = [groups_ix[na] for na in self.group_names]
  
      self._check_args(groups)
  
imports: import numpy
  from collections import defaultdict
  import statsmodels.base.model
  from statsmodels.genmod import families
  from statsmodels.genmod.generalized_linear_model import GLM
  from statsmodels.genmod.families import links
  from statsmodels.genmod.families import varfuncs
  import statsmodels.regression.linear_model
  import statsmodels.base.wrapper
  from statsmodels.tools.decorators import cache_readonly
label_desc: Use image node_id 1 to create a new QIF object from inherited base classes: base with example: obj = QIF(endog, exog, groups, family, cov_struct, missing)