--- title: "Computing Method Results" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Computing Method Results} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` This vignette explains how to compute and store results for a new publication bias correction method across all benchmark conditions and repetitions. This is a crucial step after implementing a new method (see [Adding New Methods](Adding_New_Methods.html)) to make it part of the benchmark comparisons. Once you compute and store the results, you can evaluate the method's performance using the [Computing Method Measures](Computing_Method_Measures.html) vignette, however, the package maintainers will update the precomputed measures upon your submission of the new method accompanied by the computed method results. ## Overview After implementing the three required functions for a new method (`method.{METHOD_NAME}()`, `method_settings.{METHOD_NAME}()`, and `method_extra_columns.{METHOD_NAME}()`), you need to: 1. **Download presimulated datasets** for each DGM 2. **Apply your method** to all condition-repetition combinations 3. **Store the results** in the appropriate directory structure 4. **Document the session information** for reproducibility This process ensures that your method can be compared to existing methods using the precomputed performance measures. ## Prerequisites Before computing results, ensure that: 1. Your method is fully implemented with all three required functions 2. You have sufficient computational resources (the full benchmark may take hours to days depending on method complexity) 3. You have adequate disk space for storing results (typically several hundred MB per DGM) ## Directory Structure The benchmark uses the following directory structure for storing results: ``` resources/ ├── {DGM_NAME}/ │ ├── data/ │ │ └── {condition_id}.csv # Presimulated datasets │ ├── results/ │ │ └── {METHOD}-{SETTING}.csv # Method results │ └── metadata/ │ ├── dgm-conditions.csv # Condition parameters │ ├── {METHOD}-{SETTING}-sessionInfo.txt │ └── {METHOD}-{SETTING}-session.log ``` ## Computing Results: Step-by-Step Guide ### Step 1: Set Up Your Environment First, ensure you're working in the correct directory and have the package loaded: ```{r, eval=FALSE} library(PublicationBiasBenchmark) # Specify path to the directory containing results PublicationBiasBenchmark.options(resources_directory = "/path/to/files") ``` ### Step 2: Define DGMs and Method Information Specify which DGMs you want to compute results for and your method details: ```{r, eval=FALSE} # List of DGMs to evaluate dgm_names <- c( "Stanley2017", "Alinaghi2018", "Bom2019", "Carter2019" ) # Your method information method_name <- "myNewMethod" method_setting <- "default" # Or other setting name if you have multiple ``` ### Step 3: Download Presimulated Datasets Download the presimulated datasets for all DGMs: ```{r, eval=FALSE} # Download datasets for all DGMs for (dgm_name in dgm_names) { message("Downloading datasets for: ", dgm_name) download_dgm_datasets(dgm_name) } ``` This step only needs to be done once. The datasets will be cached locally for subsequent use. ### Step 4: Compute Results for Each DGM Now, compute results for your method across all conditions and repetitions. The code bellow is a template that you can adapt as needed. You will most likely adapt this code to run parallel/using a job scheduler on a cluster. ```{r, eval=FALSE} # Set seed for reproducibility set.seed(1) # Process each DGM for (dgm_name in dgm_names) { message("Processing DGM: ", dgm_name) # Get condition information conditions <- dgm_conditions(dgm_name) message("Number of conditions: ", nrow(conditions)) # Container to store all results for this DGM all_results <- list() # Process each condition for (condition_id in conditions$condition_id) { message(" Condition ", condition_id, " / ", nrow(conditions)) # Retrieve all repetitions for this condition condition_datasets <- retrieve_dgm_dataset( dgm_name = dgm_name, condition_id = condition_id, repetition_id = NULL # NULL retrieves all repetitions ) # Get unique repetition IDs repetition_ids <- unique(condition_datasets$repetition_id) message(" Repetitions: ", length(repetition_ids)) # Compute results for each repetition condition_results <- list() for (repetition_id in repetition_ids) { # Extract data for this specific repetition repetition_data <- condition_datasets[ condition_datasets$repetition_id == repetition_id, ] # Apply your method (error handling is done internally) result <- run_method( method_name = method_name, data = repetition_data, settings = method_setting ) # Attach metadata result$condition_id <- condition_id result$repetition_id <- repetition_id condition_results[[repetition_id]] <- result } # Combine results for this condition all_results[[condition_id]] <- do.call(rbind, condition_results) } # Combine all results for this DGM dgm_results <- do.call(rbind, all_results) # Save results results_dir <- file.path(data_folder, dgm_name, "results") if (!dir.exists(results_dir)) { dir.create(results_dir, recursive = TRUE) } results_file <- file.path( results_dir, paste0(method_name, "-", method_setting, ".csv") ) write.csv(dgm_results, file = results_file, row.names = FALSE) message("Results saved to: ", results_file) # Save session information metadata_dir <- file.path(data_folder, dgm_name, "metadata") if (!dir.exists(metadata_dir)) { dir.create(metadata_dir, recursive = TRUE) } # sessionInfo() output sessioninfo_file <- file.path( metadata_dir, paste0(method_name, "-", method_setting, "-sessionInfo.txt") ) writeLines( capture.output(sessionInfo()), sessioninfo_file ) # Detailed session info (using the sessioninfo package) session_log_file <- file.path( metadata_dir, paste0(method_name, "-", method_setting, "-session.log") ) sessioninfo::session_info(to_file = session_log_file) message("Session info saved to: ", metadata_dir) } message("All computations completed!") ``` ## Contributing to the Package The package maintainers will compute and update precomputed measures based on your computed results when you contribute a new method. If you want to contribute a new method: 1. Implement the method following the [Adding New Methods](Adding_New_Methods.html) guidelines 2. Compute results for all DGMs (desribed in this vignette) 3. Submit a pull request with your method implementation and results 4. Package maintainers will compute the measures and integrate them into the benchmark