@@ -31,9 +31,13 @@ epsilon = 0.000001
3131z = 1.96 # For 95%CI
3232outcome_term = " Group Advantage"
3333
34- # load fonts
35- font_import(paths = NULL , prompt = FALSE )
36- loadfonts(device = " all" )
34+ # load fonts quietly and only import if needed to avoid noisy warnings
35+ options(extrafont.quiet = TRUE )
36+ fonts_available <- tryCatch(extrafont :: fonts(), error = function (e ) character ())
37+ if (! length(fonts_available )) {
38+ suppressWarnings(suppressMessages(font_import(paths = NULL , prompt = FALSE )))
39+ }
40+ suppressWarnings(suppressMessages(loadfonts(device = " all" , quiet = TRUE )))
3741
3842# --- Resolve project-root anchored paths and ensure output dirs exist ---
3943script_path <- tryCatch({
@@ -70,8 +74,10 @@ load_CSVs <- function(pattern, rename = TRUE) {
7074 filter(grepl(paste0(" Wave [0-9] data.*/" , pattern , " .csv" ), path ))
7175
7276 data <- files | >
73- mutate(data = purrr :: map(path , \(f ) read_csv(f , show_col_types = FALSE ) | >
74- mutate(across(matches(" (data.score|duplicateCellID)" ), as.character ))),
77+ mutate(data = purrr :: map(path , \(f ) suppressWarnings(
78+ read_csv(f , show_col_types = FALSE ) | >
79+ mutate(across(matches(" (data.score|duplicateCellID)" ), as.character ))
80+ )),
7581 .keep = " none" ) | >
7682 unnest(data ) | >
7783 distinct()
@@ -257,14 +263,16 @@ conditions <- factors |>
257263 factor_types | >
258264 select(factorTypeId , name ) | >
259265 filter(name %in% c(" unitsSeed" , " unitsIndex" , " playerCount" )),
260- by = " factorTypeId"
266+ by = " factorTypeId" ,
267+ relationship = " many-to-many"
261268 ) | >
262269 inner_join(
263270 treatments | >
264271 mutate(factorId = str_split(factorIds , " ," )) | >
265272 unnest(cols = c(factorId )) | >
266273 select(treatmentId , factorId ),
267- by = " factorId"
274+ by = " factorId" ,
275+ relationship = " many-to-many"
268276 ) | >
269277 select(- matches(" factor" )) | >
270278 distinct() | >
@@ -327,7 +335,7 @@ raw_score_data <-
327335 filter(! is.na(complexity )) | >
328336 mutate(
329337 task = sub(" Round.*" , " " , displayName ),
330- score = as.numeric(if_else(is.na(score ), data.score , as.character(score ))),
338+ score = suppressWarnings( as.numeric(if_else(is.na(score ), data.score , as.character(score ) ))),
331339 playerCount = ordered(playerCount )
332340 ) | >
333341 filter(! is.na(score )) | >
@@ -378,7 +386,8 @@ permutation_synergy = function(input_data, col = "score", individuals_update) {
378386 best_individual = sum(choose(n() - row_number(), playerCount - 1 ) * !! sym(col )) / best_individual_n ,
379387 best_individual_sd = sqrt(sum(
380388 choose(n() - row_number(), playerCount - 1 ) * (!! sym(col ) - best_individual ) ^ 2
381- ) / best_individual_n )
389+ ) / best_individual_n ),
390+ .groups = " drop"
382391 ) | >
383392 mutate(playerCount = ordered(playerCount , levels = c(1 , 3 , 6 ))) | >
384393 ungroup()
@@ -394,7 +403,7 @@ permutation_synergy = function(input_data, col = "score", individuals_update) {
394403 team_sd = sd(!! sym(col )),
395404 strong_se = strong * sqrt((team_sd ^ 2 / (mean(!! sym(col )) ^ 2 * team_n )) + (first(best_individual_sd ) ^ 2 / (first(best_individual ) ^ 2 * first(best_individual_n )))),
396405 weak_se = weak * sqrt((team_sd ^ 2 / (mean(!! sym(col )) ^ 2 * team_n )) + (first(random_individual_sd ) ^ 2 / (first(random_individual ) ^ 2 * first(random_individual_n ))))
397- ) | >
406+ , .groups = " drop " ) | >
398407 ungroup()
399408}
400409
@@ -413,7 +422,8 @@ permutation_synergy_partial = function(input_data, col = "score", individuals_up
413422 best_individual = sum(choose(n() - row_number(), playerCount - 1 ) * !! sym(col )) / best_individual_n ,
414423 best_individual_sd = sqrt(sum(
415424 choose(n() - row_number(), playerCount - 1 ) * (!! sym(col ) - best_individual ) ^ 2
416- ) / best_individual_n )
425+ ) / best_individual_n ),
426+ .groups = " drop"
417427 ) | >
418428 mutate(playerCount = ordered(playerCount , levels = c(1 , 3 , 6 ))) | >
419429 ungroup()
@@ -446,7 +456,7 @@ individuals_update = player_conditions |>
446456 filter(! is.na(complexity )) | >
447457 mutate(
448458 task = sub(" Round.*" , " " , displayName ),
449- score = as.numeric(if_else(is.na(score ), data.score , as.character(score ))),
459+ score = suppressWarnings( as.numeric(if_else(is.na(score ), data.score , as.character(score ) ))),
450460 average = data.average ,
451461 correct_angle = data.corrAngle ,
452462 playerCount = ordered(playerCount )
@@ -511,14 +521,14 @@ synergy_summary_data <- synergy_data |>
511521 filter(DV == name ) | > select(- name , - se ) | >
512522 mutate(
513523 DV = if_else(DV == " weak" , paste0(" Weak " , outcome_term ), paste0(" Strong " , outcome_term )),
514- DV = ordered (DV , levels = c(paste0(" Weak " , outcome_term ), paste0(" Strong " , outcome_term ))),
524+ DV = factor (DV , levels = c(paste0(" Weak " , outcome_term ), paste0(" Strong " , outcome_term ))),
515525 complexity = paste(complexity , " Complexity" ),
516- complexity = ordered (
526+ complexity = factor (
517527 complexity ,
518528 levels = c(" Low Complexity" , " Medium Complexity" , " High Complexity" )
519529 ),
520530 playerCount = if_else(playerCount == 3 , " Small Group" , " Large Group" ),
521- playerCount = ordered (playerCount , levels = c(" Small Group" , " Large Group" )),
531+ playerCount = factor (playerCount , levels = c(" Small Group" , " Large Group" )),
522532 grouping = " Task" ,
523533 group = task
524534 ) | >
@@ -532,7 +542,7 @@ aggregated_synergy_summary_data_by_wave = synergy_summary_data |>
532542 summarise(
533543 value = mean(value ),
534544 SE = sqrt(sum(SE ^ 2 ) / length(SE ) ^ 2 ),
535- .groups = " drop_last "
545+ .groups = " drop "
536546 ) | >
537547 mutate(
538548 grouping = case_when(
@@ -560,14 +570,14 @@ synergy_summary_data <- synergy_data |>
560570 filter(DV == name ) | > select(- name , - se ) | >
561571 mutate(
562572 DV = if_else(DV == " weak" , paste0(" Weak " ,outcome_term ), paste0(" Strong " ,outcome_term )),
563- DV = ordered (DV , levels = c(paste0(" Weak " ,outcome_term ), paste0(" Strong " ,outcome_term ))),
573+ DV = factor (DV , levels = c(paste0(" Weak " ,outcome_term ), paste0(" Strong " ,outcome_term ))),
564574 complexity = paste(complexity , " Complexity" ),
565- complexity = ordered (
575+ complexity = factor (
566576 complexity ,
567577 levels = c(" Low Complexity" , " Medium Complexity" , " High Complexity" )
568578 ),
569579 playerCount = if_else(playerCount == 3 , " Small Group" , " Large Group" ),
570- playerCount = ordered (playerCount , levels = c(" Small Group" , " Large Group" )),
580+ playerCount = factor (playerCount , levels = c(" Small Group" , " Large Group" )),
571581 grouping = " Task" ,
572582 group = task
573583 ) | >
@@ -583,7 +593,8 @@ aggregated_synergy_summary_data_by_wave = synergy_summary_data |>
583593 values_to = " group" ) | >
584594 group_by(grouping , group , DV , wave ) | >
585595 summarise(value = mean(value ),
586- SE = sqrt(sum(SE ^ 2 ) / length(SE ) ^ 2 )) | >
596+ SE = sqrt(sum(SE ^ 2 ) / length(SE ) ^ 2 ),
597+ .groups = " drop" ) | >
587598 mutate(
588599 grouping = case_when(
589600 grouping == " complexity" ~ " Complexity" ,
@@ -648,6 +659,7 @@ figure_heterogeneity <- aggregated_synergy_summary_data_by_wave |>
648659 value ,
649660 group ,
650661 shape = playerCount ,
662+ linewidth = complexity ,
651663 # color = if_else(display,complexity,"none"),
652664 color = complexity ,
653665 xmin = value - z * SE ,
@@ -669,13 +681,21 @@ figure_heterogeneity <- aggregated_synergy_summary_data_by_wave |>
669681 ),
670682 # guide = "none"
671683 ) +
684+ scale_linewidth_manual(
685+ name = " " ,
686+ values = c(
687+ " Low Complexity" = 0.5 ,
688+ " Medium Complexity" = 0.9 ,
689+ " High Complexity" = 1.3
690+ ),
691+ guide = " legend"
692+ ) +
672693 scale_shape_manual(values = c(21 ,4 )) +
673694 # scale_shape_manual(values = c(21,24)) +
674695 labs(
675696 y = " " ,
676697 x = " " ,
677698 color = " " ,
678- fill = " " ,
679699 shape = " "
680700 ) + geom_crossbar() +
681701 theme(
0 commit comments