skeleton.R
fdrsmooth_cholcache = function(z, lambda, fl0 = NULL) {
}
lambda = .38
rel_tol = 1e-6
travel = 1
prior_prob = ilogit(beta_hat)
old_objective = sum(-log(prior_prob*f1 + (1-prior_prob)*f0)) + lambda * sum(abs(fl0$r))
converged = FALSE
while(!converged) {
# E step
m1 = prior_prob*f1
m0 = (1-prior_prob)*f0
post_prob = m1/(m1+m0)
# Partial M step: one ADMM iteration, analogous to a single Newton iteration
weights = prior_prob*(1-prior_prob)
y = beta_hat - (prior_prob - post_prob)/weights
fl0 = fit_graphfusedlasso_cholcache(y, lambda=lambda, D=D, chol_factor=chol_factor, weights=weights,
initial_values = fl0, rel_tol = rel_tol, alpha=1.8, adaptive=FALSE)
beta_hat = fl0$x
prior_prob = ilogit(beta_hat)
# Check relative convergence
new_objective = sum(-log(prior_prob*f1 + (1-prior_prob)*f0)) + lambda * sum(abs(fl0$r))
travel = abs(new_objective - old_objective)
old_objective = new_objective
converged = {travel/(old_objective + rel_tol) < rel_tol}
}