class_docstr: Inherits time series methods from TSM class.
  
  **** GENERALIZED AUTOREGRESSIVE SCORE E(X)OGENOUS VARIABLE (GASX) MODELS ****
  
  Parameters
  ----------
  data : pd.DataFrame or np.array
      Field to specify the time series data that will be used.
  
  formula : string
      patsy string describing the regression
  
  ar : int
      Field to specify how many AR lags the model will have.
  
  sc : int
      Field to specify how many score lags terms the model will have.
  
  integ : int (default : 0)
      Specifies how many time to difference the time series.
  
  dist : str
      Which distribution to use
docstr: Simulates a h-step ahead mean prediction
  
  Parameters
  ----------
  theta : 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 X data
  
  simulations : int
      How many simulations to perform
  
  Returns
  ----------
  Matrix of simulations
docstr_tok: ["Simulates","a","h-step","ahead","mean","prediction","Parameters","--","--","--","--","--","theta",":","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","X","data","simulations",":","int","How","many","simulations","to","perform","Returns","--","--","--","--","--","Matrix","of","simulations"]
code: def _sim_prediction(
      self, theta, Y, scores, h, t_params, X_oos, simulations
  ):
      """Simulates a h-step ahead mean prediction
  
      Parameters
      ----------
      theta : 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 X data
  
      simulations : int
          How many simulations to perform
  
      Returns
      ----------
      Matrix of simulations
      """
  
      (
          model_scale,
          model_shape,
          model_skewness,
      ) = self._get_scale_and_shape(t_params)
  
      sim_vector = np.zeros([simulations, h])
  
      for n in range(0, simulations):
          Y_exp = Y.copy()
          theta_exp = theta.copy()
          scores_exp = scores.copy()
  
          # (TODO: vectorize the inner construction here)
          for t in range(0, h):
              new_value = t_params[0]
  
              if self.ar != 0:
                  for j in range(1, self.ar + 1):
                      new_value += t_params[j] * theta_exp[-j]
  
              if self.sc != 0:
                  for k in range(1, self.sc + 1):
                      new_value += (
                          t_params[k + self.ar] * scores_exp[-k]
                      )
  
              new_value += np.matmul(
                  X_oos[t, :],
                  t_params[
                      self.sc
                      + self.ar : (
                          self.sc + self.ar + len(self.X_names)
                      )
                  ],
              )
  
              if self.model_name2 == "Exponential GAS":
                  rnd_value = self.family.draw_variable(
                      1.0 / self.link(new_value),
                      model_scale,
                      model_shape,
                      model_skewness,
                      1,
                  )[0]
              else:
                  rnd_value = self.family.draw_variable(
                      self.link(new_value),
                      model_scale,
                      model_shape,
                      model_skewness,
                      1,
                  )[0]
  
              Y_exp = np.append(Y_exp, [rnd_value])
              theta_exp = np.append(
                  theta_exp, [new_value]
              )  # For indexing consistency
              scores_exp = np.append(
                  scores_exp, scores[np.random.randint(scores.shape[0])]
              )  # expectation of score is zero
  
          sim_vector[n] = Y_exp[-h:]
  
      return np.transpose(sim_vector)
  
imports: import sys
  import numpy
  import pandas
  import scipy.stats
  import scipy.special
  from patsy import dmatrices, dmatrix, demo_data
  from ..None import families
  from ..None import tsm
  from ..None import data_check
  from .gas_core_recursions import gasx_recursion
label_desc: Use image node_id 12 for calling the GASX obj's underlying member method code with example usage: obj._sim_prediction(theta, Y, scores, h, t_params, X_oos, simulations) and returns: np