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 __init__(self, endog, exog, var_type):
      self.var_type = var_type
      self.K = len(var_type)
      self.var_type = self.var_type[0]
      self.endog = _adjust_shape(endog, 1)
      self.exog = _adjust_shape(exog, self.K)
      self.nobs = np.shape(self.exog)[0]
      self.data_type = self.var_type
      self.ckertype = "gaussian"
      self.okertype = "wangryzin"
      self.ukertype = "aitchisonaitken"
      self.func = self._est_loc_linear
  
      self.b, self.bw = self._est_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 1 to create a new SingleIndexModel object from inherited base classes: KernelReg with example: obj = SingleIndexModel(endog, exog, var_type)