Makes forecast with the estimated model

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

        past_values : int (default : 20)
            How many past observations to show on the forecast graph?

        intervals : Boolean
            Would you like to show prediction intervals for the forecast?

        Returns
        ----------
        - Plot of the forecast

def plot_predict(self,h=5,past_values=20,intervals=True,**kwargs):

        """ Makes forecast with the estimated model

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

        past_values : int (default : 20)
            How many past observations to show on the forecast graph?

        intervals : Boolean
            Would you like to show prediction intervals for the forecast?

        Returns
        ----------
        - Plot of the forecast
        """
        import matplotlib.pyplot as plt
        import seaborn as sns

        figsize = kwargs.get('figsize',(10,7))

        if self.latent_variables.estimated is False:
            raise Exception("No latent varaibles 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)

            # Simulation
            sim_vector = np.array([np.zeros([15000,h]) for i in range(self.ylen)])
            for it in range(0,15000):
                exps_sim = self._forecast_mean(h,t_params,Y,"Cov",None)
                for variable in range(self.ylen):
                    sim_vector[variable][it,:] = exps_sim[variable][-h:]

            for variable in range(0,exps.shape[0]):
                test = np.transpose(sim_vector[variable])
                error_bars, forecasted_values, plot_values, plot_index = self._summarize_simulations(exps[variable],test,date_index,h,past_values)
                plt.figure(figsize=figsize)
                if intervals == True:
                    alpha = [0.15*i/float(100) for i in range(50,12,-2)]
                    for count, pre in enumerate(error_bars):
                        plt.fill_between(date_index[-h-1:], forecasted_values-pre, forecasted_values+pre,alpha=alpha[count])            
                plt.plot(plot_index,plot_values)
                plt.title("Forecast for " + self.data_name[variable])
                plt.xlabel("Time")
                plt.ylabel(self.data_name[variable])
                plt.show()