def compute_omega(T, K, alg, model, X): if alg == 'gibbs': rw_matrix = gibbs.transition_kernel( X, model).T # As defined in the course elif alg == 'mh_uniform': rw_matrix = load_mh_uniform_transitionmatrix(T, K, model, X) elif alg == 'mh_prior': rw_matrix = load_mh_prior_transitionmatrix(T, K, model, X) eigvals = np.linalg.eigvals(rw_matrix) order = np.argsort(eigvals)[::-1] w = eigvals[order] omega = w[1] assert np.abs(np.real(omega) - np.linalg.norm(omega)) < 1e-10 omega = np.real(omega) # print(f"T: {T}, K: {K}, Omega: {omega:.5f}") return omega
def compute_pi(T, K, alg): (_, X), model = loaddatamodel(T, K) if alg == 'gibbs': rw_matrix = gibbs2.transition_kernel( X, model).T # As defined in the course elif alg == 'mh_uniform': rw_matrix = load_mh_uniform_transitionmatrix(T, K) elif alg == 'mh_prior': rw_matrix = load_mh_prior_transitionmatrix(T, K) eigvals, eigvecs = np.linalg.eig(rw_matrix) order = np.argsort(eigvals)[::-1] pi = eigvecs[:, order[0]] real = np.real(pi) assert np.abs(np.linalg.norm(real) - np.linalg.norm(pi)) < 1e-10 pi = np.copy(real) pi = pi / pi.sum() w = eigvals[order] omega = w[1] assert np.abs(np.real(omega) - np.linalg.norm(omega)) < 1e-10 omega = np.real(omega) print(f"T: {T}, K: {K}, Omega: {omega:.5f}, Pi: {pi}") return pi
def load_gibbs_transitionmatrix(T, K, modelversion=2): Z, X = loaddata(T, K) model = loadmodel(K, modelversion) return gibbs1.transition_kernel( X, model) if modelversion == 1 else gibbs2.transition_kernel(X, model)