Fix y~x predictor column names

This commit is contained in:
2024-10-07 13:37:53 -04:00
parent 40ed4133b4
commit 15f99ad41b

View File

@@ -217,7 +217,7 @@ calculate_interaction_scores <- function(df, df_bg, type, overlap_threshold = 2)
group_vars <- c("OrfRep", "Gene", "Drug")
}
perform_lm_simple <- function(x, y, max_conc) {
perform_lm <- function(x, y, max_conc) {
if (all(is.na(x)) || all(is.na(y)) || length(x[!is.na(x)]) == 0 || length(y[!is.na(y)]) == 0) {
return(list(intercept = NA, slope = NA, r_squared = NA, score = NA))
} else {
@@ -316,10 +316,10 @@ calculate_interaction_scores <- function(df, df_bg, type, overlap_threshold = 2)
group_by(across(all_of(group_vars))) %>%
mutate(
# Apply the simple LM function for each variable
lm_L = list(perform_lm_simple(Delta_L, conc_num_factor, max_conc)),
lm_K = list(perform_lm_simple(Delta_K, conc_num_factor, max_conc)),
lm_r = list(perform_lm_simple(Delta_r, conc_num_factor, max_conc)),
lm_AUC = list(perform_lm_simple(Delta_AUC, conc_num_factor, max_conc)),
lm_L = list(perform_lm(Delta_L, conc_num_factor, max_conc)),
lm_K = list(perform_lm(Delta_K, conc_num_factor, max_conc)),
lm_r = list(perform_lm(Delta_r, conc_num_factor, max_conc)),
lm_AUC = list(perform_lm(Delta_AUC, conc_num_factor, max_conc)),
# Extract coefficients and statistics for each model
lm_intercept_L = lm_L[[1]]$intercept,
@@ -480,19 +480,19 @@ calculate_interaction_scores <- function(df, df_bg, type, overlap_threshold = 2)
Z_lm_L <= -overlap_threshold & Avg_Zscore_L >= overlap_threshold ~ "Deletion Suppressor lm, Deletion Enhancer Avg Zscore",
TRUE ~ "No Effect"
),
# Apply the perform_lm_simple function for each variable pair
lm_L = list(perform_lm_simple(Z_lm_L, Avg_Zscore_L, max_conc)),
lm_K = list(perform_lm_simple(Z_lm_K, Avg_Zscore_K, max_conc)),
lm_r = list(perform_lm_simple(Z_lm_r, Avg_Zscore_r, max_conc)),
lm_AUC = list(perform_lm_simple(Z_lm_AUC, Avg_Zscore_AUC, max_conc)),
# Apply the perform_lm function for each variable pair
lm_L = list(perform_lm(Z_lm_L, Avg_Zscore_L, max_conc)),
lm_K = list(perform_lm(Z_lm_K, Avg_Zscore_K, max_conc)),
lm_r = list(perform_lm(Z_lm_r, Avg_Zscore_r, max_conc)),
lm_AUC = list(perform_lm(Z_lm_AUC, Avg_Zscore_AUC, max_conc)),
# Correlation models for various pairs
Z_lm_K_L = list(perform_lm_simple(Z_lm_K, Z_lm_L, max_conc)),
Z_lm_r_L = list(perform_lm_simple(Z_lm_r, Z_lm_L, max_conc)),
Z_lm_R_AUC_L = list(perform_lm_simple(Z_lm_AUC, Z_lm_L, max_conc)),
Z_lm_R_r_K = list(perform_lm_simple(Z_lm_r, Z_lm_K, max_conc)),
Z_lm_R_AUC_K = list(perform_lm_simple(Z_lm_AUC, Z_lm_K, max_conc)),
Z_lm_R_AUC_r = list(perform_lm_simple(Z_lm_AUC, Z_lm_r, max_conc)),
Z_lm_K_L = list(perform_lm(Z_lm_K, Z_lm_L, max_conc)),
Z_lm_r_L = list(perform_lm(Z_lm_r, Z_lm_L, max_conc)),
Z_lm_AUC_L = list(perform_lm(Z_lm_AUC, Z_lm_L, max_conc)),
Z_lm_r_K = list(perform_lm(Z_lm_r, Z_lm_K, max_conc)),
Z_lm_AUC_K = list(perform_lm(Z_lm_AUC, Z_lm_K, max_conc)),
Z_lm_AUC_r = list(perform_lm(Z_lm_AUC, Z_lm_r, max_conc)),
# Extract coefficients and statistics for each model
lm_rank_intercept_L = lm_L[[1]]$intercept,
@@ -525,29 +525,29 @@ calculate_interaction_scores <- function(df, df_bg, type, overlap_threshold = 2)
Z_lm_R_squared_r_L = Z_lm_r_L[[1]]$r_squared,
Z_lm_Score_r_L = Z_lm_r_L[[1]]$score,
Z_lm_intercept_R_AUC_L = Z_lm_R_AUC_L[[1]]$intercept,
Z_lm_slope_R_AUC_L = Z_lm_R_AUC_L[[1]]$slope,
Z_lm_R_squared_R_AUC_L = Z_lm_R_AUC_L[[1]]$r_squared,
Z_lm_Score_R_AUC_L = Z_lm_R_AUC_L[[1]]$score,
Z_lm_intercept_AUC_L = Z_lm_AUC_L[[1]]$intercept,
Z_lm_slope_AUC_L = Z_lm_AUC_L[[1]]$slope,
Z_lm_R_squared_AUC_L = Z_lm_AUC_L[[1]]$r_squared,
Z_lm_Score_AUC_L = Z_lm_AUC_L[[1]]$score,
Z_lm_intercept_R_r_K = Z_lm_R_r_K[[1]]$intercept,
Z_lm_slope_R_r_K = Z_lm_R_r_K[[1]]$slope,
Z_lm_R_squared_R_r_K = Z_lm_R_r_K[[1]]$r_squared,
Z_lm_Score_R_r_K = Z_lm_R_r_K[[1]]$score,
Z_lm_intercept_r_K = Z_lm_r_K[[1]]$intercept,
Z_lm_slope_r_K = Z_lm_r_K[[1]]$slope,
Z_lm_R_squared_r_K = Z_lm_r_K[[1]]$r_squared,
Z_lm_Score_r_K = Z_lm_r_K[[1]]$score,
Z_lm_intercept_R_AUC_K = Z_lm_R_AUC_K[[1]]$intercept,
Z_lm_slope_R_AUC_K = Z_lm_R_AUC_K[[1]]$slope,
Z_lm_R_squared_R_AUC_K = Z_lm_R_AUC_K[[1]]$r_squared,
Z_lm_Score_R_AUC_K = Z_lm_R_AUC_K[[1]]$score,
Z_lm_intercept_AUC_K = Z_lm_AUC_K[[1]]$intercept,
Z_lm_slope_AUC_K = Z_lm_AUC_K[[1]]$slope,
Z_lm_R_squared_AUC_K = Z_lm_AUC_K[[1]]$r_squared,
Z_lm_Score_AUC_K = Z_lm_AUC_K[[1]]$score,
Z_lm_intercept_R_AUC_r = Z_lm_R_AUC_r[[1]]$intercept,
Z_lm_slope_R_AUC_r = Z_lm_R_AUC_r[[1]]$slope,
Z_lm_R_squared_R_AUC_r = Z_lm_R_AUC_r[[1]]$r_squared,
Z_lm_Score_R_AUC_r = Z_lm_R_AUC_r[[1]]$score
Z_lm_intercept_AUC_r = Z_lm_AUC_r[[1]]$intercept,
Z_lm_slope_AUC_r = Z_lm_AUC_r[[1]]$slope,
Z_lm_R_squared_AUC_r = Z_lm_AUC_r[[1]]$r_squared,
Z_lm_Score_AUC_r = Z_lm_AUC_r[[1]]$score
) %>%
select(
-lm_L, -lm_K, -lm_r, -lm_AUC, -Z_lm_K_L, -Z_lm_r_L, -Z_lm_R_AUC_L,
-Z_lm_R_r_K, -Z_lm_R_AUC_K, -Z_lm_R_AUC_r)
-lm_L, -lm_K, -lm_r, -lm_AUC,
-Z_lm_K_L, -Z_lm_r_L, -Z_lm_AUC_L, -Z_lm_r_K, -Z_lm_AUC_K, -Z_lm_AUC_r)
} # end deletion-specific block
# Create the final calculations and interactions dataframes with only required columns for csv output
@@ -573,15 +573,27 @@ calculate_interaction_scores <- function(df, df_bg, type, overlap_threshold = 2)
df_interactions <- interactions %>%
select(
all_of(group_vars),
Avg_Zscore_L, Avg_Zscore_K, Avg_Zscore_r, Avg_Zscore_AUC,
Sum_Z_Score_L, Sum_Z_Score_K, Sum_Z_Score_r, Sum_Z_Score_AUC,
Z_lm_L, Z_lm_K, Z_lm_r, Z_lm_AUC,
Raw_Shift_L, Raw_Shift_K, Raw_Shift_r, Raw_Shift_AUC,
Z_Shift_L, Z_Shift_K, Z_Shift_r, Z_Shift_AUC,
lm_Score_L, lm_Score_K, lm_Score_r, lm_Score_AUC,
R_Squared_L, R_Squared_K, R_Squared_r, R_Squared_AUC,
NG_sum_int, DB_sum_int, SM_sum_int
any_of(c(
group_vars,
"Avg_Zscore_L", "Avg_Zscore_K", "Avg_Zscore_r", "Avg_Zscore_AUC",
"Sum_Z_Score_L", "Sum_Z_Score_K", "Sum_Z_Score_r", "Sum_Z_Score_AUC",
"Z_lm_L", "Z_lm_K", "Z_lm_r", "Z_lm_AUC",
"Raw_Shift_L", "Raw_Shift_K", "Raw_Shift_r", "Raw_Shift_AUC",
"Z_Shift_L", "Z_Shift_K", "Z_Shift_r", "Z_Shift_AUC",
"lm_Score_L", "lm_Score_K", "lm_Score_r", "lm_Score_AUC",
"R_Squared_L", "R_Squared_K", "R_Squared_r", "R_Squared_AUC",
"NG_sum_int", "DB_sum_int", "SM_sum_int",
"Z_lm_intercept_L", "Z_lm_slope_L", "Z_lm_R_squared_L", "Z_lm_Score_L",
"Z_lm_intercept_K", "Z_lm_slope_K", "Z_lm_R_squared_K", "Z_lm_Score_K",
"Z_lm_intercept_r", "Z_lm_slope_r", "Z_lm_R_squared_r", "Z_lm_Score_r",
"Z_lm_intercept_AUC", "Z_lm_slope_AUC", "Z_lm_R_squared_AUC", "Z_lm_Score_AUC",
"Z_lm_intercept_K_L", "Z_lm_slope_K_L", "Z_lm_R_squared_K_L", "Z_lm_Score_K_L",
"Z_lm_intercept_r_L", "Z_lm_slope_r_L", "Z_lm_R_squared_r_L", "Z_lm_Score_r_L",
"Z_lm_intercept_AUC_L", "Z_lm_slope_AUC_L", "Z_lm_R_squared_AUC_L", "Z_lm_Score_AUC_L",
"Z_lm_intercept_r_K", "Z_lm_slope_r_K", "Z_lm_R_squared_r_K", "Z_lm_Score_r_K",
"Z_lm_intercept_AUC_K", "Z_lm_slope_AUC_K", "Z_lm_R_squared_AUC_K", "Z_lm_Score_AUC_K",
"Z_lm_intercept_AUC_r", "Z_lm_slope_AUC_r", "Z_lm_R_squared_AUC_r", "Z_lm_Score_AUC_r"
))
) %>%
rename(NG = NG_sum_int, DB = DB_sum_int, SM = SM_sum_int)
@@ -1296,21 +1308,28 @@ generate_correlation_plot_configs <- function(df, df_reference) {
x_var <- paste0("Z_lm_", rel$x) # predictor
y_var <- paste0("Z_lm_", rel$y) # response
# Skip this plot if there's no valid data
# if (all(is.na(df[[x_var]])) || all(is.na(df_reference[[x_var]])) ||
# all(is.na(df[[y_var]])) || all(is.na(df_reference[[y_var]]))) {
# next
# }
# Find the max and min of both dataframes for printing linear regression line
xmin <- min(c(min(df[[x_var]], na.rm = TRUE), min(df_reference[[x_var]], na.rm = TRUE)), na.rm = TRUE)
xmax <- max(c(max(df[[x_var]], na.rm = TRUE), max(df_reference[[x_var]], na.rm = TRUE)), na.rm = TRUE)
print(paste("rel$x:", rel$x))
print(paste("rel$y:", rel$y))
print(paste("Generating correlation plot for response(y):", y_var, "and predictor(x):", x_var))
print(paste("Relationship suffix:", rel$y, "_", rel$x))
# Extract the R-squared, intercept, and slope from the df (first value)
intercept <- df[[paste0("Z_lm_intercept_", rel$y, "_", rel$x)]][1]
slope <- df[[paste0("Z_lm_slope_", rel$y, "_", rel$x)]][1]
r_squared <- df[[paste0("Z_lm_R_squared_", rel$y, "_", rel$x)]][1]
print(paste("intercept:", intercept))
print(paste("slope:", slope))
print(paste("r_squared:", r_squared))
r_squared_rounded <- round(r_squared, 4)
r_squared_label <- paste("R-squared =", r_squared_rounded)
print(paste("r_squared_label:", r_squared_label))
# Find the max and min of both dataframes for printing linear regression line
xmin <- min(c(min(df[[x_var]]), min(df_reference[[x_var]])))
xmax <- max(c(max(df[[x_var]]), max(df_reference[[x_var]])))
# Generate the label for the plot
plot_label <- paste("Interaction", rel$x, "vs.", rel$y)
@@ -1326,7 +1345,7 @@ generate_correlation_plot_configs <- function(df, df_reference) {
list(
x = mean(df[[x_var]], na.rm = TRUE),
y = mean(df[[y_var]], na.rm = TRUE),
label = paste("R-squared =", round(r_squared, 3))
label = r_squared_label
)
),
lm_line = list(