Makes forecast with the estimated model

        Parameters
        ----------
        h : int (default : 5)
            How many steps ahead would you like to forecast?

        Returns
        ----------
        - pd.DataFrame with predicted values

def predict(self,h=5):
        """ Makes forecast with the estimated model

        Parameters
        ----------
        h : int (default : 5)
            How many steps ahead would you like to forecast?

        Returns
        ----------
        - pd.DataFrame with predicted values
        """     

        if self.latent_variables.estimated is False:
            raise Exception("No latent variables estimated!")
        else:

            # Retrieve data, dates and (transformed) latent variables
            mu, Y = self._model(self.latent_variables.get_z_values()) 
            date_index = self.shift_dates(h)
            t_params = self.transform_z()

            # Expectation
            exps = self._forecast_mean(h,t_params,Y,None,None)

            for variable in range(0,exps.shape[0]):
                forecasted_values = exps[variable][-h:]
                if variable == 0:
                    result = pd.DataFrame(forecasted_values)
                    result.rename(columns={0:self.data_name[variable]}, inplace=True)
                    result.index = date_index[-h:]          
                else:
                    result[self.data_name[variable]] = forecasted_values    

            return result