code: def _mean_prediction(self, lmda, Y, scores, h, t_params, X_oos):
               
  
          # Create arrays to iteratre over
          lmda_exp = lmda.copy()
          scores_exp = scores.copy()
          Y_exp = Y.copy()
  
          # Loop over h time periods          
          for t in range(0,h):
              new_lambda_value = 0
  
              if self.p != 0:
                  for j in range(self.p):
                      new_lambda_value += t_params[j]*lmda_exp[-j-1]
  
              if self.q != 0:
                  for k in range(self.q):
                      new_lambda_value += t_params[k+self.p]*scores_exp[-k-1]
  
              # No leverage term for mean (should be zero in expectation?)
  
              new_lambda_value += np.dot(X_oos[t],t_params[-len(self.X_names)*2:-len(self.X_names)]) 
              new_theta_value = np.dot(X_oos[t],t_params[-len(self.X_names):]) + t_params[-(len(self.X_names)*2)-1]*np.exp(new_lambda_value/2.0)
              lmda_exp = np.append(lmda_exp,[new_lambda_value]) # For indexing consistency
              scores_exp = np.append(scores_exp,[0]) # expectation of score is zero
              Y_exp = np.append(Y_exp,new_theta_value)
  
          return lmda_exp
docs: Creates a h-step ahead mean prediction
  
          Parameters
          ----------
          lmda : np.array
              The past predicted values
  
          Y : np.array
              The past data
  
          scores : np.array
              The past scores
  
          h : int
              How many steps ahead for the prediction
  
          t_params : np.array
              A vector of (transformed) latent variables
  
          X_oos : np.array
              Out of sample predictors
  
          Returns
          ----------
          h-length vector of mean predictions