code: def third_prediction(self,singular_value):
          
          if not self.predictions:
              raise Exception("ErrVar.third(): not predictions are set")
          if self.__need_omitted is False:
              zero_preds = {}
              for pred in self.predictions_iter:
                  zero_preds[("third", pred.col_names[0])] = 0.0
              return zero_preds
          self.log("calc third term prediction @" + str(singular_value))
          mn = min(self.jco.shape)
          try:
              mn = min(self.pst.npar_adj, self.pst.nnz_obs)
          except:
              pass
          if singular_value > mn:
              inf_pred = {}
              for pred in self.predictions_iter:
                  inf_pred[("third",pred.col_names[0])] = 1.0E+35
              return inf_pred
          else:
              results = {}
              for prediction,omitted_prediction in \
                      zip(self.predictions_iter, self.omitted_predictions):
                  # comes out as row vector, but needs to be a column vector
                  p = ((prediction.T * self.G(singular_value) * self.omitted_jco)
                       - omitted_prediction.T).T
                  result = float((p.T * self.omitted_parcov * p).x)
                  results[("third", prediction.col_names[0])] = result
              self.log("calc third term prediction @" + str(singular_value))
              return results
docs: get the omitted parameter contribution to prediction error variance
           at a singular value. used to construct error variance dataframe
  
          Parameters
          ----------
          singular_value : int
              singular value to calc third term at
  
          Returns
          -------
          dict : dict
              dictionary of ("third",prediction_names),error variance