code: def _prune(self, fit, p_max):
          
  
          def remove_from_model_desc(x, model_desc):
              """
              Return a model_desc without x
              """
  
              rhs_termlist = []
              for t in model_desc.rhs_termlist:
                  if not t.factors:
                      # intercept, add anyway
                      rhs_termlist.append(t)
                  elif not x == t.factors[0]._varname:
                      # this is not the term with x
                      rhs_termlist.append(t)
  
              md = ModelDesc(model_desc.lhs_termlist, rhs_termlist)
              return md
  
          corrected_model_desc = ModelDesc(fit.model.formula.lhs_termlist[:], fit.model.formula.rhs_termlist[:])
          pars_to_prune = fit.pvalues.where(fit.pvalues > p_max).dropna().index.tolist()
          try:
              pars_to_prune.remove('Intercept')
          except:
              pass
          while pars_to_prune:
              corrected_model_desc = remove_from_model_desc(pars_to_prune[0], corrected_model_desc)
              fit = fm.ols(corrected_model_desc, data=self.df).fit()
              pars_to_prune = fit.pvalues.where(fit.pvalues > p_max).dropna().index.tolist()
              try:
                  pars_to_prune.remove('Intercept')
              except:
                  pass
          return fit
docs: If the fit contains statistically insignificant parameters, remove them.
          Returns a pruned fit where all parameters have p-values of the t-statistic below p_max
  
          Parameters
          ----------
          fit: fm.ols fit object
              Can contain insignificant parameters
          p_max : float
              Maximum allowed probability of the t-statistic
  
          Returns
          -------
          fit: fm.ols fit object
              Won't contain any insignificant parameters