class_docstr: additive model with non-parametric, smoothed components
  
  Parameters
  ----------
  exog : ndarray
  smoothers : None or list of smoother instances
      smoother instances not yet checked
  weights : None or ndarray
  family : None or family instance
      I think only used because of shared results with GAM and subclassing.
      If None, then Gaussian is used.
docstr: degrees of freedom of residuals, ddof is sum of all smoothers df
          
docstr_tok: ["degrees","of","freedom","of","residuals",",","ddof","is","sum","of","all","smoothers","df"]
code: def df_resid(self):
      """degrees of freedom of residuals, ddof is sum of all smoothers df"""
      return (
          self.results.Y.shape[0]
          - np.array(
              [
                  self.smoothers[i].df_fit()
                  for i in range(self.exog.shape[1])
              ]
          ).sum()
      )
  
imports: import numpy
  from statsmodels.genmod import families
  from statsmodels.sandbox.nonparametric.smoothers import PolySmoother
  from statsmodels.genmod.generalized_linear_model import GLM
  from statsmodels.tools.sm_exceptions import IterationLimitWarning, iteration_limit_doc
  import warnings
label_desc: Use image node_id 5 for calling the AdditiveModel obj's underlying member method code with example usage: obj.df_resid() and returns: unknown