def f_nll(n, m): P = m.edge_probabilities(n) w = P / (1.0 - P) A = np.array(n.adjacency_matrix()) r, c = A.sum(1), A.sum(0) z = approximate_from_margins_weights(r, c, w, T, sort_by_wopt_var = False) logkappa, logcvsq = log_partition_is(z, cvsq = True) print 'est. cv^2 = %.2f (T = %d)' % (np.exp(logcvsq), T) return (logkappa - np.sum(np.log(w[A])))
A = a.array r = A.sum(1) c = A.sum(0) print r print c X = a.edge_covariates['x'].matrix() for l, theta_l in enumerate(theta_vec): print l logit_P_l = theta_l * X w_l = np.exp(logit_P_l) cmle_a_vec[l] = -cond_a_nll(A, w_l) z = cond_a_sample(r, c, w_l, T_grid) logkappa, logcvsq = log_partition_is(z, cvsq=True) cvsq = np.exp(logcvsq) logkappa_cvsq[l] = cvsq print 'est. cv^2 = %.2f (T_grid = %d)' % (cvsq, T_grid) cmle_is_vec[l] = np.sum(np.log(w_l[A])) - logkappa print 'CMLE-A: %.2f' % theta_vec[np.argmax(cmle_a_vec)] print 'CMLE-IS: %.2f' % theta_vec[np.argmax(cmle_is_vec)] plt.figure() plt.plot(theta_vec, cmle_a_vec) plt.plot(theta_vec, cmle_is_vec) plt.figure() plt.plot(theta_vec, logkappa_cvsq)
A = a.array r = A.sum(1) c = A.sum(0) print r print c X = a.edge_covariates['x'].matrix() for l, theta_l in enumerate(theta_vec): print l logit_P_l = theta_l * X w_l = np.exp(logit_P_l) cmle_a_vec[l] = -cond_a_nll(A, w_l) z = cond_a_sample(r, c, w_l, T_grid) logkappa, logcvsq = log_partition_is(z, cvsq = True) cvsq = np.exp(logcvsq) logkappa_cvsq[l] = cvsq print 'est. cv^2 = %.2f (T_grid = %d)' % (cvsq, T_grid) cmle_is_vec[l] = np.sum(np.log(w_l[A])) - logkappa print 'CMLE-A: %.2f' % theta_vec[np.argmax(cmle_a_vec)] print 'CMLE-IS: %.2f' % theta_vec[np.argmax(cmle_is_vec)] plt.figure() plt.plot(theta_vec, cmle_a_vec) plt.plot(theta_vec, cmle_is_vec) plt.figure() plt.plot(theta_vec, logkappa_cvsq)