get the null space term (first term) contribution to prediction error variance
            at a singular value.  used to construct error variance dataframe

        Parameters
        ----------
        singular_value : int
            singular value to calc first term at

        Returns
        -------
        dict : dict
            dictionary of ("first",prediction_names),error variance pairs at singular_value

def first_prediction(self, singular_value):
        """get the null space term (first term) contribution to prediction error variance
            at a singular value.  used to construct error variance dataframe

        Parameters
        ----------
        singular_value : int
            singular value to calc first term at

        Returns
        -------
        dict : dict
            dictionary of ("first",prediction_names),error variance pairs at singular_value

        """
        if not self.predictions:
            raise Exception("ErrVar.first(): no predictions are set")
        if singular_value > self.jco.ncol:
            zero_preds = {}
            for pred in self.predictions_iter:
                zero_preds[("first", pred.col_names[0])] = 0.0
            return zero_preds
        self.log("calc first term parameter @" + str(singular_value))
        first_term = self.I_minus_R(singular_value).T * self.parcov *\
                     self.I_minus_R(singular_value)
        if self.predictions:
            results = {}
            for prediction in self.predictions_iter:
                results[("first",prediction.col_names[0])] = \
                    float((prediction.T * first_term * prediction).x)
            self.log("calc first term parameter @" + str(singular_value))
            return results