Creates the structure of the model (model matrices etc) for
        a Normal family ARIMA model.

        Parameters
        ----------
        beta : np.ndarray
            Contains untransformed starting values for the latent variables

        Returns
        ----------
        mu : np.ndarray
            Contains the predicted values (location) for the time series

        Y : np.ndarray
            Contains the length-adjusted time series (accounting for lags)

def _normal_model(self, beta):
        """ Creates the structure of the model (model matrices etc) for
        a Normal family ARIMA model.

        Parameters
        ----------
        beta : np.ndarray
            Contains untransformed starting values for the latent variables

        Returns
        ----------
        mu : np.ndarray
            Contains the predicted values (location) for the time series

        Y : np.ndarray
            Contains the length-adjusted time series (accounting for lags)
        """     

        Y = np.array(self.data[self.max_lag:])

        # Transform latent variables
        z = np.array([self.latent_variables.z_list[k].prior.transform(beta[k]) for k in range(beta.shape[0])])

        # Constant and AR terms
        if self.ar != 0:
            mu = np.matmul(np.transpose(self.X),z[:-self.family_z_no-self.ma])
        else:
            mu = np.ones(Y.shape[0])*z[0]
            
        # MA terms
        if self.ma != 0:
            mu = arima_recursion_normal(z, mu, Y, self.max_lag, Y.shape[0], self.ar, self.ma)

        return mu, Y