class_docstr: Single index semiparametric model ``y = g(X * b) + e``.
  
  Parameters
  ----------
  endog : array_like
      The dependent variable
  exog : array_like
      The independent variable(s)
  var_type : str
      The type of variables in X:
  
          - c: continuous
          - o: ordered
          - u: unordered
  
  Attributes
  ----------
  b : array_like
      The linear coefficients b (betas)
  bw : array_like
      Bandwidths
  
  Methods
  -------
  fit(): Computes the fitted values ``E[Y|X] = g(X * b)``
         and the marginal effects ``dY/dX``.
  
  References
  ----------
  See chapter on semiparametric models in [1]
  
  Notes
  -----
  This model resembles the binary choice models. The user knows
  that X and b interact linearly, but ``g(X * b)`` is unknown.
  In the parametric binary choice models the user usually assumes
  some distribution of g() such as normal or logistic.
code: def _est_b_bw(self):
      params0 = np.random.uniform(size=(self.K + 1,))
      b_bw = optimize.fmin(self.cv_loo, params0, disp=0)
      b = b_bw[0 : self.K]
      bw = b_bw[self.K :]
      bw = self._set_bw_bounds(bw)
      return b, bw
  
imports: import numpy
  from scipy import optimize
  from scipy.stats.mstats import mquantiles
  from statsmodels.nonparametric.api import KDEMultivariate, KernelReg
  from statsmodels.nonparametric._kernel_base import gpke, LeaveOneOut, _get_type_pos, _adjust_shape
label_desc: Use image node_id 2 for calling the SingleIndexModel obj's underlying member method code with example usage: obj._est_b_bw() and returns: b,  bw