class_docstr: Nonparametric test for functional form.
  
  Parameters
  ----------
  endog : list
      Dependent variable (training set)
  exog : list of array_like objects
      The independent (right-hand-side) variables
  bw : array_like, str
      Bandwidths for exog or specify method for bandwidth selection
  fform : function
      The functional form ``y = g(b, x)`` to be tested. Takes as inputs
      the RHS variables `exog` and the coefficients ``b`` (betas)
      and returns a fitted ``y_hat``.
  var_type : str
      The type of the independent `exog` variables:
  
          - c: continuous
          - o: ordered
          - u: unordered
  
  estimator : function
      Must return the estimated coefficients b (betas). Takes as inputs
      ``(endog, exog)``.  E.g. least square estimator::
  
          lambda (x,y): np.dot(np.pinv(np.dot(x.T, x)), np.dot(x.T, y))
  
  References
  ----------
  See Racine, J.: "Consistent Significance Testing for Nonparametric
  Regression" Journal of Business & Economics Statistics.
  
  See chapter 12 in [1]  pp. 355-357.
code: def _compute_sig(self):
      Y = self.endog
      X = self.exog
      b = self.estimator(Y, X)
      m = self.fform(X, b)
      n = np.shape(X)[0]
      resid = Y - m
      resid = resid - np.mean(resid)  # center residuals
      self.test_stat = self._compute_test_stat(resid)
      sqrt5 = np.sqrt(5.0)
      fct1 = (1 - sqrt5) / 2.0
      fct2 = (1 + sqrt5) / 2.0
      u1 = fct1 * resid
      u2 = fct2 * resid
      r = fct2 / sqrt5
      I_dist = np.empty((self.nboot, 1))
      for j in range(self.nboot):
          u_boot = u2.copy()
  
          prob = np.random.uniform(0, 1, size=(n,))
          ind = prob < r
          u_boot[ind] = u1[ind]
          Y_boot = m + u_boot
          b_hat = self.estimator(Y_boot, X)
          m_hat = self.fform(X, b_hat)
          u_boot_hat = Y_boot - m_hat
          I_dist[j] = self._compute_test_stat(u_boot_hat)
  
      self.boots_results = I_dist
      sig = "Not Significant"
      if self.test_stat > mquantiles(I_dist, 0.9):
          sig = "*"
      if self.test_stat > mquantiles(I_dist, 0.95):
          sig = "**"
      if self.test_stat > mquantiles(I_dist, 0.99):
          sig = "***"
      return sig
  
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 TestFForm obj's underlying member method code with example usage: obj._compute_sig() and returns: sig