class_docstr: Inherits time series methods from the TSM parent class.
  
  **** AUTOREGRESSIVE INTEGRATED MOVING AVERAGE (ARIMA) MODELS ****
  
  Parameters
  ----------
  data : pd.DataFrame or np.ndarray
      Field to specify the univariate time series data that will be used.
  
  ar : int
      Field to specify how many AR lags the model will have.
  
  ma : int
      Field to specify how many MA lags the model will have.
  
  integ : int (default : 0)
      Specifies how many times to difference the time series.
  
  target : str (if data is a pd.DataFrame) or int (if data is a np.ndarray)
      Specifies which column name or array index to use. By default, first
      column/array index will be selected as the dependent variable.
  
  family : family object
      E.g pf.Normal(), pf.t(), pf.Laplace()...
docstr: Simulates a h-step ahead mean prediction
  
  Same as _mean_prediction() but now we repeat the process 
  by a number of times (simulations) and shock the process
  with random draws from the family, e.g. Normal shocks.
  
  Parameters
  ----------
  mu : np.ndarray
      The past predicted values
  
  Y : np.ndarray
      The past data
  
  h : int
      How many steps ahead for the prediction
  
  t_params : np.ndarray
      A vector of (transformed) latent variables
  
  simulations : int
      How many simulations to perform
  
  Returns
  ----------
  Matrix of simulations
docstr_tok: ["Simulates","a","h-step","ahead","mean","prediction","Same","as","_mean_prediction","(",")","but","now","we","repeat","the","process","by","a","number","of","times","(","simulations",")","and","shock","the","process","with","random","draws","from","the","family",",","e.g",".","Normal","shocks",".","Parameters","--","--","--","--","--","mu",":","np.ndarray","The","past","predicted","values","Y",":","np.ndarray","The","past","data","h",":","int","How","many","steps","ahead","for","the","prediction","t_params",":","np.ndarray","A","vector","of","(","transformed",")","latent","variables","simulations",":","int","How","many","simulations","to","perform","Returns","--","--","--","--","--","Matrix","of","simulations"]
code: def _sim_prediction(self, mu, Y, h, t_z, simulations):
      """Simulates a h-step ahead mean prediction
  
      Same as _mean_prediction() but now we repeat the process
      by a number of times (simulations) and shock the process
      with random draws from the family, e.g. Normal shocks.
  
      Parameters
      ----------
      mu : np.ndarray
          The past predicted values
  
      Y : np.ndarray
          The past data
  
      h : int
          How many steps ahead for the prediction
  
      t_params : np.ndarray
          A vector of (transformed) latent variables
  
      simulations : int
          How many simulations to perform
  
      Returns
      ----------
      Matrix of simulations
      """
  
      (
          model_scale,
          model_shape,
          model_skewness,
      ) = self._get_scale_and_shape(t_z)
  
      sim_vector = np.zeros([simulations, h])
  
      for n in range(0, simulations):
          # Create arrays to iteratre over
          Y_exp = Y.copy()
          mu_exp = mu.copy()
  
          # Loop over h time periods
          for t in range(0, h):
              new_value = t_z[0]
  
              if self.ar != 0:
                  for j in range(1, self.ar + 1):
                      new_value += t_z[j] * Y_exp[-j]
  
              if self.ma != 0:
                  for k in range(1, self.ma + 1):
                      if (k - 1) >= t:
                          new_value += t_z[k + self.ar] * (
                              Y_exp[-k] - mu_exp[-k]
                          )
  
              if self.model_name2 == "Exponential":
                  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])
              mu_exp = np.append(
                  mu_exp, [0]
              )  # For indexing consistency
  
              sim_vector[n] = Y_exp[-h:]
          del Y_exp
          del mu_exp
      return np.transpose(sim_vector)
  
imports: import sys
  import numpy
  import pandas
  import scipy.stats
  import scipy.special
  from ..None import families
  from ..None import output
  from ..None import tests
  from ..None import tsm
  from ..None import data_check
  from .arma_recursions import arima_recursion, arima_recursion_normal, arima_recursion_poisson
label_desc: Use image node_id 13 for calling the ARIMA obj's underlying member method code with example usage: obj._sim_prediction(mu, Y, h, t_z, simulations) and returns: np