def fit_cov(self, X): """Fit the InequalityTimeGraphicalLasso model to covariances. Parameters ---------- X : ndarray, shape = (n_dimensions, n_dimensions, n_samples, time_steps) """ n_dimensions, _, n_samples, time_steps = X.shape self.emp_cov = [] self.emp_inv = [] self.emp_inv_score = [] self.sam_inv_score = [] self.C = [] for i in range(time_steps): self.emp_cov.append(np.mean(X[:, :, :, i], 2)) self.emp_inv.append(np.linalg.inv(self.emp_cov[i])) if self.loss == 'LL': self.emp_inv_score.append(neg_logl(self.emp_cov[i], self.emp_inv[i])) self.sam_inv_score.append(np.array([neg_logl(X[:, :, j, i], self.emp_inv[i]) for j in range(n_samples)])) else: self.emp_inv_score.append(dtrace(self.emp_cov[i], self.emp_inv[i])) self.sam_inv_score.append(np.array([dtrace(X[:, :, j, i], self.emp_inv[i]) for j in range(n_samples)])) self.C.append(np.quantile(self.sam_inv_score[i], 1 - self.c_level, 0)) self.emp_cov = np.array(self.emp_cov) self.emp_inv = np.array(self.emp_inv) self.emp_inv_score = np.array(self.emp_inv_score) self.sam_inv_score = np.array(self.sam_inv_score) return self._fit(self.emp_cov)
def eval_cov_pre(self): """ Evaluate the log likelihood of estimated precisions compared to the inverse sample covariance at each time step """ precisions = self.precision_ fit_score = [] for i in range(precisions.shape[0]): precision = precisions[i] if self.loss == 'LL': fit_score.append(neg_logl(self.emp_cov[i], precision)[0]) else: fit_score.append(dtrace(self.emp_cov[i], precision)[0]) return self.emp_inv_score, self.C, fit_score, precisions