Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
export(colocboost)
export(colocboost_assemble)
export(colocboost_check_update_jk)
export(colocboost_get_methods)
export(colocboost_inits)
export(colocboost_plot)
export(colocboost_post_inference)
export(colocboost_update)
export(colocboost_workhorse)
export(get_cos_summary)
export(get_strong_colocalization)
importFrom(grDevices,adjustcolor)
importFrom(graphics,abline)
importFrom(graphics,axis)
Expand Down
213 changes: 104 additions & 109 deletions R/colocboost.R

Large diffs are not rendered by default.

391 changes: 0 additions & 391 deletions R/colocboost_addhoc_utils.R

This file was deleted.

61 changes: 31 additions & 30 deletions R/colocboost_assemble.R
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
#'
#' Un-colocalization signal - `colocboost_assemble_ucos` - identify the causal confidence sets for each outcome only.
#'
#' Add-hoc merging functions including
#' Add-hoc merge_cos functions including
#'
#' \itemize{
#' \item{merge_coloc_single}{merge the colocalized sets and the single causal set if pass the \code{between_purity}}
#' \item{merge_single}{merge the single causal sets for different outcomes if pass the \code{between_purity}}
#' \item{merge_coloc_single}{merge the colocalized sets and the single causal set if pass the \code{median_cos_abs_corr}}
#' \item{merge_single}{merge the single causal sets for different outcomes if pass the \code{median_cos_abs_corr}}
#' }
#'
#' Refine of the colocalization sets (TO-DO-LIST)
Expand All @@ -21,21 +21,20 @@
#' @export
colocboost_assemble <- function(cb_obj,
coverage = 0.95,
func_intw = "fun_R",
alpha = 1.5,
weight_fudge_factor = 1.5,
check_null = 0.1,
check_null_method = "profile",
check_null_max=2e-5,
dedup = TRUE,
overlap = TRUE,
n_purity = 100,
min_abs_corr = 0.5,
coverage_singlew = 0.8,
sec_coverage_thresh = 0.8,
median_abs_corr = NULL,
between_cluster = 0.8,
between_purity = 0.8,
weaker_ucos = TRUE,
merging = TRUE,
min_cluster_corr = 0.8,
median_cos_abs_corr = 0.8,
weaker_effect = TRUE,
merge_cos = TRUE,
tol = 1e-9,
output_level = 1){

Expand All @@ -47,7 +46,7 @@ colocboost_assemble <- function(cb_obj,
model_info <- get_model_info(cb_obj, outcome_names = data_info$outcome_info$outcome_names)
if (data_info$n_outcomes == 1 & output_level == 1){ output_level = 2 }
if (cb_obj$cb_model_para$num_updates == 1){
cb_output <- list("cos_summary" = NULL,
cb_output <- list("cos_summary" = NULL,
"vcp" = NULL,
"cos_details" = NULL,
"data_info" = data_info,
Expand All @@ -64,8 +63,7 @@ colocboost_assemble <- function(cb_obj,
cb_output <- cb_output[c("cos_summary", "vcp", "cos_details", "data_info", "model_info", "ucos_details", "diagnostic_details")]
}
if (data_info$n_outcome == 1){
cb_output <- list("ucos_summary" = NULL, "pip" = NULL,
"ucos_details" = NULL, "data_info" = data_info)
cb_output <- list("ucos_summary", "pip" = NULL, "ucos_details" = NULL, "data_info" = data_info)
}
}

Expand All @@ -79,23 +77,22 @@ colocboost_assemble <- function(cb_obj,
# --------- about colocalized confidence sets ---------------------------------
out_cos <- colocboost_assemble_cos(cb_obj,
coverage = coverage,
func_intw = func_intw,
alpha = alpha,
weight_fudge_factor = weight_fudge_factor,
check_null = check_null,
check_null_method = check_null_method,
dedup = dedup,
overlap = overlap,
n_purity = n_purity,
min_abs_corr = min_abs_corr,
coverage_singlew = coverage_singlew,
sec_coverage_thresh = sec_coverage_thresh,
median_abs_corr = median_abs_corr,
between_cluster = between_cluster,
between_purity = between_purity,
min_cluster_corr = min_cluster_corr,
median_cos_abs_corr = median_cos_abs_corr,
tol = tol)

# --------- about non-colocalized confidence sets ---------------------------------
L <- cb_obj$cb_model_para$L
if (L == 1){ weaker_ucos = FALSE }
if (L == 1){ weaker_effect = FALSE }
update <- cb_obj$cb_model_para$update_status
ucos_each <- list()
change_obj_each <- purity_each <- vector(mode='list', length=L)
Expand Down Expand Up @@ -135,9 +132,9 @@ colocboost_assemble <- function(cb_obj,
n_purity = n_purity,
min_abs_corr = min_abs_corr,
median_abs_corr = median_abs_corr,
between_cluster = between_cluster,
between_purity = between_purity,
weaker_ucos = weaker_ucos,
min_cluster_corr = min_cluster_corr,
median_cos_abs_corr = median_cos_abs_corr,
weaker_effect = weaker_effect,
tol = tol)
aaa <- out_ucos_each$ucos$ucos
if (length(aaa) != 0){
Expand Down Expand Up @@ -168,7 +165,7 @@ colocboost_assemble <- function(cb_obj,
if ( length(out_cos$cos$cos)!=0 & length(out_ucos$ucos_each)!=0){
past_out <- merge_cos_ucos(cb_obj, out_cos, out_ucos, coverage = coverage,
min_abs_corr = min_abs_corr,tol = tol,
between_purity = between_purity)
median_cos_abs_corr = median_cos_abs_corr)
} else if (length(out_cos$cos$cos)!=0 & length(out_ucos$ucos_each)==0) {
past_out <- list("ucos" = NULL, "cos" = out_cos)
} else if (length(out_cos$cos$cos)==0 & length(out_ucos$ucos_each)!=0){
Expand All @@ -178,29 +175,34 @@ colocboost_assemble <- function(cb_obj,
}
# ----- Merge two ucos sets
if (length(past_out$ucos$ucos_each) > 1){
if (merging) {
if (merge_cos) {
past_out <- merge_ucos(cb_obj, past_out,
min_abs_corr = min_abs_corr,
median_abs_corr = median_abs_corr,
n_purity = n_purity,
between_purity = between_purity,
median_cos_abs_corr = median_cos_abs_corr,
tol = tol)
}
}

############# - extract colocboost output - ####################
# - colocalization results
cb_obj$cb_model_para$alpha <- alpha
cb_obj$cb_model_para$weight_fudge_factor <- weight_fudge_factor
cb_obj$cb_model_para$coverage <- coverage
if (cb_obj$cb_model_para$M==1){
# fixme for single iteration model
cb_obj <- get_max_profile(cb_obj, check_null_max=0.01, check_null_method = "profile")
}
cos_results <- get_cos_details(cb_obj, coloc_out = past_out$cos$cos, data_info = data_info)
cb_output <- list("vcp" = cos_results$vcp,
"cos_details" = cos_results$cos_results,
"data_info" = data_info,
"model_info" = model_info)
class(cb_output) <- "colocboost"

### - extract summary table
target_idx <- cb_obj$cb_model_para$target_idx
summary_table <- get_cos_summary(cb_output, target_outcome = data_info$outcome_info$outcome_names[target_idx])
target_outcome_idx <- cb_obj$cb_model_para$target_outcome_idx
summary_table <- get_cos_summary(cb_output)
cb_output <- c(cb_output, list(cos_summary = summary_table))
cb_output <- cb_output[c("cos_summary", "vcp", "cos_details", "data_info", "model_info")]

Expand All @@ -223,7 +225,7 @@ colocboost_assemble <- function(cb_obj,
if (!is.null(cb_output$ucos_details$ucos)){
cb_output$pip <- apply(do.call(cbind,cb_output$ucos_details$ucos_weight), 1, function(w0) 1-prod(1-w0))
names(cb_output$pip) <- data_info$variables
cb_output$ucos_summary <- get_summary_table_fm(cb_output)
cb_output$ucos_summary <- get_ucos_summary(cb_output)
} else {
tmp <- list("pip" = NULL, "ucos_summary" = NULL)
cb_output <- c(cb_output, tmp)
Expand All @@ -232,7 +234,6 @@ colocboost_assemble <- function(cb_obj,
}
}
}

return(cb_output)

}
33 changes: 16 additions & 17 deletions R/colocboost_assemble_cos.R
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
#' @importFrom stats as.dist cutree hclust
colocboost_assemble_cos <- function(cb_obj,
coverage = 0.95,
func_intw = "fun_R",
alpha = 1.5,
weight_fudge_factor = 1.5,
check_null = 0.1,
check_null_method = "profile",
dedup = TRUE,
overlap = TRUE,
n_purity = 100,
min_abs_corr = 0.5,
coverage_singlew = 0.8,
sec_coverage_thresh = 0.8,
median_abs_corr = NULL,
between_cluster = 0.8,
between_purity = 0.8,
min_cluster_corr = 0.8,
median_cos_abs_corr = 0.8,
tol = 1e-9){

if (!inherits(cb_obj, "colocboost")){
Expand Down Expand Up @@ -43,7 +42,7 @@ colocboost_assemble_cos <- function(cb_obj,
X_dict <- cb_data$dict[coloc_outcomes[iiii]]
tmp <- w_purity(avWeight[,iiii,drop=FALSE],
X=cb_data$data[[X_dict]]$X,Xcorr=cb_data$data[[X_dict]]$XtX,
N=cb_data$data[[coloc_outcomes[iiii]]]$N, n=n_purity, coverage = coverage_singlew,
N=cb_data$data[[coloc_outcomes[iiii]]]$N, n=n_purity, coverage = sec_coverage_thresh,
min_abs_corr = min_abs_corr, median_abs_corr = median_abs_corr,
miss_idx = cb_data$data[[coloc_outcomes[iiii]]]$variable_miss)
check_purity[iiii] <- length(tmp) == 1
Expand All @@ -54,8 +53,8 @@ colocboost_assemble_cos <- function(cb_obj,
pos_purity <- which(check_purity)
avWeight <- avWeight[,pos_purity,drop=FALSE]
coloc_outcomes <- coloc_outcomes[pos_purity]
weights <- get_integrated_weight(avWeight, func_intw = func_intw, alpha = alpha)
coloc_cos <- get_in_csets(weights, coverage = coverage)
weights <- get_integrated_weight(avWeight, weight_fudge_factor = weight_fudge_factor)
coloc_cos <- get_in_cos(weights, coverage = coverage)
evidence_strength <- sum(weights[coloc_cos[[1]]])

# ----- null filtering
Expand Down Expand Up @@ -144,7 +143,7 @@ colocboost_assemble_cos <- function(cb_obj,
X_dict <- cb_data$dict[coloc_outcomes[iiii]]
tmp <- w_purity(avWeight[,iiii,drop=FALSE],
X=cb_data$data[[X_dict]]$X,Xcorr=cb_data$data[[X_dict]]$XtX,
N=cb_data$data[[coloc_outcomes[iiii]]]$N, n=n_purity, coverage = coverage_singlew,
N=cb_data$data[[coloc_outcomes[iiii]]]$N, n=n_purity, coverage = sec_coverage_thresh,
min_abs_corr = min_abs_corr, median_abs_corr = median_abs_corr,
miss_idx = cb_data$data[[coloc_outcomes[iiii]]]$variable_miss)
check_purity[iiii] <- length(tmp) == 1
Expand All @@ -155,8 +154,8 @@ colocboost_assemble_cos <- function(cb_obj,
pos_purity <- which(check_purity)
avWeight <- avWeight[,pos_purity,drop=FALSE]
coloc_outcomes <- coloc_outcomes[pos_purity]
weights <- get_integrated_weight(avWeight, func_intw = func_intw, alpha = alpha)
coloc_cos <- get_in_csets(weights, coverage = coverage)
weights <- get_integrated_weight(avWeight, weight_fudge_factor = weight_fudge_factor)
coloc_cos <- get_in_cos(weights, coverage = coverage)
evidence_strength <- sum(weights[coloc_cos[[1]]])

# ----- null filtering
Expand Down Expand Up @@ -189,7 +188,7 @@ colocboost_assemble_cos <- function(cb_obj,
# Hierachical Clustering iteration based on sequenced weights
cormat = get_cormat(t(weight_coloc))
hc = hclust(as.dist(1-cormat))
n_cluster = get_n_cluster(hc, cormat, between_cluster = between_cluster)$n_cluster
n_cluster = get_n_cluster(hc, cormat, min_cluster_corr = min_cluster_corr)$n_cluster
index = cutree(hc,n_cluster)
B = sapply(1:n_cluster, function(t) as.numeric(index==t))
B <- as.matrix(B)
Expand All @@ -205,7 +204,7 @@ colocboost_assemble_cos <- function(cb_obj,
X_dict <- cb_data$dict[coloc_outcomes[iiii]]
tmp <- w_purity(weight_cluster,
X=cb_data$data[[X_dict]]$X,Xcorr=cb_data$data[[X_dict]]$XtX,
N=cb_data$data[[coloc_outcomes[iiii]]]$N, n=n_purity, coverage = coverage_singlew,
N=cb_data$data[[coloc_outcomes[iiii]]]$N, n=n_purity, coverage = sec_coverage_thresh,
min_abs_corr = min_abs_corr, median_abs_corr = median_abs_corr,
miss_idx = cb_data$data[[coloc_outcomes[iiii]]]$variable_miss)
check_purity[[iiii]] <- tmp
Expand Down Expand Up @@ -241,8 +240,8 @@ colocboost_assemble_cos <- function(cb_obj,
for (i.w in 1:length(avWeight_coloc)){
w <- avWeight_coloc[[i.w]]
if (sum(w) != 0){
weights <- get_integrated_weight(w, func_intw = func_intw, alpha = alpha)
csets <- get_in_csets(weights, coverage = coverage)
weights <- get_integrated_weight(w, weight_fudge_factor = weight_fudge_factor)
csets <- get_in_cos(weights, coverage = coverage)
coloc_cos[[fl]] <- unlist(csets)
evidence_strength[[fl]] <- sum(weights[coloc_cos[[fl]]])
avWeight_csets[[fl]] <- w
Expand Down Expand Up @@ -325,7 +324,7 @@ colocboost_assemble_cos <- function(cb_obj,



# --- filter 2*: remove overlap confidence sets based on between_purity
# --- filter 2*: remove overlap confidence sets based on median_cos_abs_corr
if (length(coloc_sets) >= 2){
if (overlap){

Expand All @@ -351,7 +350,7 @@ colocboost_assemble_cos <- function(cb_obj,
ave_between[i.between, j.between] <- ave_between[j.between, i.between] <- res[3]
}
}
is.between <- (min_between>min_abs_corr) * (abs(max_between-1)<tol) * (ave_between>between_purity)
is.between <- (min_between>min_abs_corr) * (abs(max_between-1)<tol) * (ave_between>median_cos_abs_corr)
if (sum(is.between) != 0){
temp <- sapply(1:nrow(is.between), function(x){
tt <- c(x, which(is.between[x,] != 0))
Expand Down
Loading