library(DiagrammeR) library(dplyr) add_stars <- function(p) { case_when( is.na(p) ~ "", p < 0.001 ~ "***", p < 0.01 ~ "**", p < 0.05 ~ "*", TRUE ~ "" ) } selected_predictor <- "Apathy" predictor_node <- selected_predictor predictor_label <- "Apathy" df_pred <- Path_Coefficients_Adjusted %>% filter(Predictor == selected_predictor) %>% mutate( Outcome_Node = paste0("Outcome_", Outcome), a_label = paste0(sprintf("%.2f", Path_A_Beta), add_stars(Path_A_p)), b_label = paste0(sprintf("%.2f", Path_B_Beta), add_stars(Path_B_p)) ) mediator_labels <- df_pred %>% distinct(Mediator) %>% mutate( Mediator_Label = case_when( Mediator == "Active_Approach" ~ "Actively Approach", Mediator == "Withdrawal" ~ "Withdrawal", Mediator == "Social_Support" ~ "Seeking Social Support", Mediator == "Self_blame" ~ "Self-blame", Mediator == "Planning" ~ "Refocus on Planning", Mediator == "Reappraisal" ~ "Positive Reappraisal", TRUE ~ Mediator ) ) outcome_labels <- df_pred %>% distinct(Outcome_Node, Outcome) %>% mutate( Outcome_Label = case_when( Outcome == "WEMWBS" ~ "Mental Wellbeing", Outcome == "GDS" ~ "Depression", Outcome == "GAD" ~ "Anxiety", TRUE ~ Outcome ) ) a_edges <- df_pred %>% distinct(Predictor, Mediator, a_label) %>% mutate(edge = paste0(Predictor, " -> ", Mediator, ' [label = "', a_label, '"];')) %>% pull(edge) b_edges <- df_pred %>% distinct(Mediator, Outcome_Node, b_label) %>% mutate(edge = paste0(Mediator, " -> ", Outcome_Node, ' [label = "', b_label, '"];')) %>% pull(edge) all_edges <- paste(c(a_edges, b_edges), collapse = "\n ") predictor_node_def <- paste0( predictor_node, ' [label = "', predictor_label, '", shape = box, style = filled, fillcolor = lightblue]' ) mediator_nodes <- paste0( mediator_labels$Mediator, ' [label = "', mediator_labels$Mediator_Label, '", shape = ellipse, style = filled, fillcolor = lightyellow]' ) %>% paste(collapse = "\n ") outcome_nodes <- paste0( outcome_labels$Outcome_Node, ' [label = "', outcome_labels$Outcome_Label, '", shape = box, style = filled, fillcolor = lightpink]' ) %>% paste(collapse = "\n ") # Graphviz settings diagram_code <- paste0(" digraph mediation { graph [ layout = dot, rankdir = LR, fontname = Helvetica, margin = 0, pad = 0.02, nodesep = 0.6, ranksep = 0.9 ] node [fontname = Helvetica, fontsize = 10] edge [fontname = Helvetica, fontsize = 9] ", predictor_node_def, " ", mediator_nodes, " ", outcome_nodes, " ", all_edges, " } ") # Preview in RStudio viewer grViz(diagram_code) # EXPORT EPS TO DESKTOP desktop_path <- file.path( path.expand("~"), "Desktop", "SETON_figure1.eps" ) dot_file <- tempfile(fileext = ".dot") writeLines(diagram_code, dot_file) system2("dot", args = c("-Teps", dot_file, "-o", desktop_path)) cat("EPS saved to:", desktop_path)