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: internal calculation for one fit iteration
  
  BUG: I think this does not improve, what is supposed to improve
      offset does not seem to be used, neither an old alpha
      The smoothers keep coef/params from previous iteration
docstr_tok: ["internal","calculation","for","one","fit","iteration","BUG",":","I","think","this","does","not","improve",",","what","is","supposed","to","improve","offset","does","not","seem","to","be","used",",","neither","an","old","alpha","The","smoothers","keep","coef\/params","from","previous","iteration"]
code: def next(self):
      """internal calculation for one fit iteration
  
      BUG: I think this does not improve, what is supposed to improve
          offset does not seem to be used, neither an old alpha
          The smoothers keep coef/params from previous iteration
      """
      _results = self.results
      Y = self.results.Y
      mu = _results.predict(self.exog)
      # TODO offset is never used ?
      offset = np.zeros(self.exog.shape[1], np.float64)
      alpha = (Y * self.weights).sum() / self.weights.sum()
      for i in range(self.exog.shape[1]):
          tmp = self.smoothers[i].predict()
          # TODO: check what smooth needs to do
          # smooth (alias for fit, fit given x to new y and attach
          # print 'next shape', (Y - alpha - mu + tmp).shape
          bad = np.isnan(Y - alpha - mu + tmp).any()
          if bad:  # temporary assert while debugging
              print(Y, alpha, mu, tmp)
              raise ValueError("nan encountered")
          # self.smoothers[i].smooth(Y - alpha - mu + tmp,
          self.smoothers[i].smooth(Y - mu + tmp, weights=self.weights)
          tmp2 = self.smoothers[
              i
          ].predict()  # fittedvalues of previous smooth/fit
          self.results.offset[i] = (
              -(tmp2 * self.weights).sum() / self.weights.sum()
          )
          # self.offset used in smoothed
          if DEBUG:
              print(self.smoothers[i].params)
          mu += tmp2 - tmp
      # change setting offset here: tests still pass, offset equal to constant
      # in component ??? what's the effect of offset
      offset = self.results.offset
      # print self.iter
      # self.iter += 1 #missing incrementing of iter counter NOT
      return Results(
          Y, alpha, self.exog, self.smoothers, self.family, offset
      )
  
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 3 for calling the AdditiveModel obj's underlying member method code with example usage: obj.next() and returns: Results