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.
code: def __init__(self, exog, smoothers=None, weights=None, family=None):
      self.exog = exog
      if weights is not None:
          self.weights = weights
      else:
          self.weights = np.ones(self.exog.shape[0])
  
      self.smoothers = smoothers or [
          default_smoother(exog[:, i]) for i in range(exog.shape[1])
      ]
  
      # TODO: why do we set here df, refactoring temporary?
      for i in range(exog.shape[1]):
          self.smoothers[i].df = 10
  
      if family is None:
          self.family = families.Gaussian()
      else:
          self.family = family
  
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 1 to create a new AdditiveModel object  with example: obj = AdditiveModel(exog, smoothers, weights, family)