Source code for causaldag.utils.scores.gaussian_bic_score

import numpy as np
import numba

@numba.jit
def numba_inv(A):
    return np.linalg.inv(A)


[docs]def local_gaussian_bic_score(node, parents, suffstat, lambda_=None): n = suffstat["n"] lambda_ = lambda_ if lambda_ is not None else .5 * np.log2(n) C, i, p = suffstat['C'], node, list(parents) var = C[i, i] if not p else C[i, i] - C[i, p] @ numba_inv(C[np.ix_(p, p)]) @ C[p, i] log_prob = -.5*n*(1 + np.log2(var/n)) penalty_term = lambda_*(1 + len(parents)) return log_prob - penalty_term