class_docstr: Inherits time series methods from TSM class.
  
  **** GENERALIZED AUTOREGRESSIVE SCORE (GAS) REGRESSION MODELS ****
  
  Parameters
  ----------
  
  formula : string
      patsy string describing the regression
  
  data : pd.DataFrame or np.array
      Field to specify the data that will be used
  
  family : GAS family object
      Which distribution to use, e.g. GASNormal()
class_docstr_tok: ["Inherits","time","series","methods","from","TSM","class",".","*","*","*","*","GENERALIZED","AUTOREGRESSIVE","SCORE","(","GAS",")","REGRESSION","MODELS","*","*","*","*","Parameters","--","--","--","--","--","formula",":","string","patsy","string","describing","the","regression","data",":","pd.DataFrame","or","np.array","Field","to","specify","the","data","that","will","be","used","family",":","GAS","family","object","Which","distribution","to","use",",","e.g",".","GASNormal","(",")"]
docstr: Makes forecast with the estimated model
  
  Parameters
  ----------
  h : int (default : 5)
      How many steps ahead would you like to forecast?
  
  oos_data : pd.DataFrame
      Data for the variables to be used out of sample (ys can be NaNs)
  
  intervals : boolean (default: False)
      Whether to return prediction intervals
  
  Returns
  ----------
  - pd.DataFrame with predicted values
docstr_tok: ["Makes","forecast","with","the","estimated","model","Parameters","--","--","--","--","--","h",":","int","(","default",":","5",")","How","many","steps","ahead","would","you","like","to","forecast","?","oos_data",":","pd.DataFrame","Data","for","the","variables","to","be","used","out","of","sample","(","ys","can","be","NaNs",")","intervals",":","boolean","(","default",":","False",")","Whether","to","return","prediction","intervals","Returns","--","--","--","--","--","-","pd.DataFrame","with","predicted","values"]
code: def predict(self, h=5, oos_data=None, intervals=False, **kwargs):
      """Makes forecast with the estimated model
  
      Parameters
      ----------
      h : int (default : 5)
          How many steps ahead would you like to forecast?
  
      oos_data : pd.DataFrame
          Data for the variables to be used out of sample (ys can be NaNs)
  
      intervals : boolean (default: False)
          Whether to return prediction intervals
  
      Returns
      ----------
      - pd.DataFrame with predicted values
      """
      if self.latent_variables.estimated is False:
          raise Exception("No latent variables estimated!")
      else:
          # Sort/manipulate the out-of-sample data
          _, X_oos = dmatrices(self.formula, oos_data)
          X_oos = np.array([X_oos])[0]
          X_pred = X_oos[:h]
  
          date_index = self.shift_dates(h)
  
          if self.latent_variables.estimation_method in ["M-H"]:
              sim_vector = np.zeros([15000, h])
  
              for n in range(0, 15000):
                  t_z = self.draw_latent_variables(nsims=1).T[0]
                  _, Y, _, coefficients = self._model(t_z)
                  coefficients_star = coefficients.T[-1]
                  theta_pred = np.dot(
                      np.array([coefficients_star]), X_pred.T
                  )[0]
                  t_z = np.array(
                      [
                          self.latent_variables.z_list[
                              k
                          ].prior.transform(t_z[k])
                          for k in range(t_z.shape[0])
                      ]
                  )
                  (
                      model_scale,
                      model_shape,
                      model_skewness,
                  ) = self._get_scale_and_shape(t_z)
                  sim_vector[n, :] = self.family.draw_variable(
                      self.link(theta_pred),
                      model_scale,
                      model_shape,
                      model_skewness,
                      theta_pred.shape[0],
                  )
  
              sim_vector = sim_vector.T
  
              forecasted_values = np.array(
                  [np.mean(i) for i in sim_vector]
              )
              prediction_01 = np.array(
                  [np.percentile(i, 1) for i in sim_vector]
              )
              prediction_05 = np.array(
                  [np.percentile(i, 5) for i in sim_vector]
              )
              prediction_95 = np.array(
                  [np.percentile(i, 95) for i in sim_vector]
              )
              prediction_99 = np.array(
                  [np.percentile(i, 99) for i in sim_vector]
              )
  
          else:
              # Retrieve data, dates and (transformed) latent variables
              _, Y, _, coefficients = self._model(
                  self.latent_variables.get_z_values()
              )
              coefficients_star = coefficients.T[-1]
              theta_pred = np.dot(
                  np.array([coefficients_star]), X_pred.T
              )[0]
              t_z = self.transform_z()
              mean_values = np.append(Y, self.link(theta_pred))
              (
                  model_scale,
                  model_shape,
                  model_skewness,
              ) = self._get_scale_and_shape(t_z)
  
              if self.model_name2 == "Skewt":
                  m1 = (
                      np.sqrt(model_shape)
                      * sp.gamma((model_shape - 1.0) / 2.0)
                  ) / (np.sqrt(np.pi) * sp.gamma(model_shape / 2.0))
                  forecasted_values = (
                      mean_values[-h:]
                      + (model_skewness - (1.0 / model_skewness))
                      * model_scale
                      * m1
                  )
              else:
                  forecasted_values = mean_values[-h:]
  
          if intervals is False:
              result = pd.DataFrame(forecasted_values)
              result.rename(columns={0: self.data_name}, inplace=True)
          else:
              # Get mean prediction and simulations (for errors)
              if self.latent_variables.estimation_method not in ["M-H"]:
                  sim_values = np.zeros([15000, h])
  
                  if intervals is True:
                      for n in range(0, 15000):
                          sim_values[n, :] = self.family.draw_variable(
                              self.link(theta_pred),
                              model_scale,
                              model_shape,
                              model_skewness,
                              theta_pred.shape[0],
                          )
  
                  sim_values = sim_values.T
  
                  prediction_01 = np.array(
                      [np.percentile(i, 1) for i in sim_values]
                  )
                  prediction_05 = np.array(
                      [np.percentile(i, 5) for i in sim_values]
                  )
                  prediction_95 = np.array(
                      [np.percentile(i, 95) for i in sim_values]
                  )
                  prediction_99 = np.array(
                      [np.percentile(i, 99) for i in sim_values]
                  )
  
              result = pd.DataFrame(
                  [
                      forecasted_values,
                      prediction_01,
                      prediction_05,
                      prediction_95,
                      prediction_99,
                  ]
              ).T
              result.rename(
                  columns={
                      0: self.data_name,
                      1: "1% Prediction Interval",
                      2: "5% Prediction Interval",
                      3: "95% Prediction Interval",
                      4: "99% Prediction Interval",
                  },
                  inplace=True,
              )
  
          result.index = date_index[-h:]
  
          return result
  
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 gas_reg_recursion
label_desc: Use image node_id 16 for calling the GASReg obj's underlying member method code with example usage: obj.predict(h, oos_data, intervals) and returns: result