def ci_cmle_is(X, v, theta_grid, alpha_level, T = 100, verbose = False): cmle_is = np.empty_like(theta_grid) r = X.sum(1) c = X.sum(0) for l, theta_l in enumerate(theta_grid): logit_P_l = theta_l * v w_l = np.exp(logit_P_l) z = cond_a_sample(r, c, w_l, T) logf = np.empty(T) for t in range(T): logQ, logP = z[t][1], z[t][2] logf[t] = logP - logQ logkappa = -np.log(T) + logsumexp(logf) if verbose: logcvsq = -np.log(T - 1) - 2 * logkappa + \ logsumexp(2 * logabsdiffexp(logf, logkappa)) print 'est. cv^2 = %.2f (T = %d)' % (np.exp(logcvsq), T) cmle_is[l] = np.sum(np.log(w_l[X])) - logkappa crit = -0.5 * chi2.ppf(1 - alpha_level, 1) ci = invert_test(theta_grid, cmle_is - cmle_is.max(), crit) if params['plot']: plot_statistics(ax_cmle_is, theta_grid, cmle_is - cmle_is.max(), crit) cmle_is_coverage_data['cis'].append(ci) cmle_is_coverage_data['theta_grid'] = theta_grid cmle_is_coverage_data['crit'] = crit return ci
def log_partition_is(z, cvsq = False): """From importance-weighted sampled, estimate log-partition function.""" T = len(z) logf = np.empty(T) for t in range(T): logf[t] = z[t][2] - z[t][1] logkappa = -np.log(T) + logsumexp(logf) if not cvsq: return logkappa else: logcvsq = -np.log(T - 1) - 2 * logkappa + \ logsumexp(2 * logabsdiffexp(logf, logkappa)) return logkappa, logcvsq
def log_partition_is(z, cvsq=False): """From importance-weighted sampled, estimate log-partition function.""" T = len(z) logf = np.empty(T) for t in range(T): logf[t] = z[t][2] - z[t][1] logkappa = -np.log(T) + logsumexp(logf) if not cvsq: return logkappa else: logcvsq = -np.log(T - 1) - 2 * logkappa + \ logsumexp(2 * logabsdiffexp(logf, logkappa)) return logkappa, logcvsq
def ci_cmle_is(X, v, theta_grid, alpha_level, T = 100, verbose = False): cmle_is = np.empty_like(theta_grid) r = X.sum(1) c = X.sum(0) for l, theta_l in enumerate(theta_grid): logit_P_l = theta_l * v w_l = np.exp(logit_P_l) z = cond_a_sample(r, c, w_l, T) logf = np.empty(T) for t in range(T): logQ, logP = z[t][1], z[t][2] logf[t] = logP - logQ logkappa = -np.log(T) + logsumexp(logf) if verbose: logcvsq = -np.log(T - 1) - 2 * logkappa + \ logsumexp(2 * logabsdiffexp(logf, logkappa)) print 'est. cv^2 = %.2f (T = %d)' % (np.exp(logcvsq), T) cmle_is[l] = np.sum(np.log(w_l[X])) - logkappa return invert_test(theta_grid, cmle_is - cmle_is.max(), -0.5 * chi2.ppf(1 - alpha_level, 1))
def ci_cmle_is(X, v, theta_grid, alpha_level, T=100, verbose=False): cmle_is = np.empty_like(theta_grid) r = X.sum(1) c = X.sum(0) for l, theta_l in enumerate(theta_grid): logit_P_l = theta_l * v w_l = np.exp(logit_P_l) z = cond_a_sample(r, c, w_l, T) logf = np.empty(T) for t in range(T): logQ, logP = z[t][1], z[t][2] logf[t] = logP - logQ logkappa = -np.log(T) + logsumexp(logf) if verbose: logcvsq = -np.log(T - 1) - 2 * logkappa + \ logsumexp(2 * logabsdiffexp(logf, logkappa)) print 'est. cv^2 = %.2f (T = %d)' % (np.exp(logcvsq), T) cmle_is[l] = np.sum(np.log(w_l[X])) - logkappa return invert_test(theta_grid, cmle_is - cmle_is.max(), -0.5 * chi2.ppf(1 - alpha_level, 1))