Mercurial > repos > ufz > dose_response_analysis_tool
changeset 3:2aa9da0a84a4 draft default tip
planemo upload for repository https://github.com/Helmholtz-UFZ/galaxy-tools/tree/main/tools/tox_tools/dose_responses commit 707eca86fc2de2e563fb5c89889f54eb13f529d0
author | ufz |
---|---|
date | Tue, 21 Jan 2025 12:26:00 +0000 |
parents | c122403ac78a |
children | |
files | dose_response.R dose_response.xml test-data/image_output.jpg |
diffstat | 3 files changed, 44 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/dose_response.R Wed Dec 18 09:11:40 2024 +0000 +++ b/dose_response.R Tue Jan 21 12:26:00 2025 +0000 @@ -26,7 +26,7 @@ return(list(EC50 = ec50, EC25 = ec25, EC10 = ec10)) } -plot_dose_response <- function(model, data, ec_values, concentration_col, response_col, plot_file, compound_name, concentration_unit) { +plot_dose_response <- function(model, data, ec_values, concentration_col, response_col, replicate_col, plot_file, compound_name, concentration_unit) { # Generate a grid of concentration values for predictions concentration_grid <- seq(min(data[[concentration_col]]), max(data[[concentration_col]]), length.out = 100) prediction_data <- data.frame(concentration_grid) @@ -40,19 +40,21 @@ print(prediction_data) - data$rep <- factor(data$rep) + # Ensure replicate_col is treated as a factor + data[[replicate_col]] <- factor(data[[replicate_col]]) # Create the plot p <- ggplot(data, aes_string(x = concentration_col, y = response_col)) + - geom_point(aes(colour = rep)) + # Original data points - geom_line(data = prediction_data, aes_string(x = "conc", y = "resp"), color = "blue") + # Predicted curve - geom_ribbon(data = prediction_data, aes_string(x = "conc", ymin = "lower", ymax = "upper"), alpha = 0.2, fill = "blue") + # Confidence intervals + geom_point(aes_string(colour = replicate_col)) + # Original data points + geom_line(data = prediction_data, aes_string(x = concentration_col, y = response_col), color = "blue") + # Predicted curve + geom_ribbon(data = prediction_data, aes_string(x = concentration_col, ymin = "lower", ymax = "upper"), alpha = 0.2, fill = "blue") + # Confidence intervals geom_vline(xintercept = ec_values$EC10[1], color = "green", linetype = "dashed") + geom_vline(xintercept = ec_values$EC50[1], color = "red", linetype = "dashed") + labs( title = paste(compound_name, "- Dose-Response Curve"), x = paste("Dose [", concentration_unit, "]"), - y = "Response %" + y = "Response %", + colour = "Replicates" ) + theme_minimal() + theme( @@ -66,10 +68,11 @@ dev.off() } -dose_response_analysis <- function(data, concentration_col, response_col, plot_file, ec_file, compound_name, concentration_unit) { +dose_response_analysis <- function(data, concentration_col, response_col, replicate_col, plot_file, ec_file, compound_name, concentration_unit) { # Ensure column names are correctly selected concentration_col <- colnames(data)[as.integer(concentration_col)] response_col <- colnames(data)[as.integer(response_col)] + replicate_col <- colnames(data)[as.integer(replicate_col)] # Fit models and select the best one models <- fit_models(data, concentration_col, response_col) @@ -81,7 +84,7 @@ ec_values <- calculate_ec_values(best_model) # Plot the dose-response curve - plot_dose_response(best_model, data, ec_values, concentration_col, response_col, plot_file, compound_name, concentration_unit) + plot_dose_response(best_model, data, ec_values, concentration_col, response_col, replicate_col, plot_file, compound_name, concentration_unit) # Get model summary and AIC value model_summary <- summary(best_model) @@ -108,11 +111,12 @@ data_file <- args[1] concentration_col <- args[2] response_col <- args[3] -plot_file <- args[4] -ec_file <- args[5] -compound_name <- args[6] -concentration_unit <- args[7] +replicate_col <- args[4] +plot_file <- args[5] +ec_file <- args[6] +compound_name <- args[7] +concentration_unit <- args[8] data <- read.csv(data_file, header = TRUE, sep = "\t") print(data) -dose_response_analysis(data, concentration_col, response_col, plot_file, ec_file, compound_name, concentration_unit) +dose_response_analysis(data, concentration_col, response_col, replicate_col, plot_file, ec_file, compound_name, concentration_unit)
--- a/dose_response.xml Wed Dec 18 09:11:40 2024 +0000 +++ b/dose_response.xml Tue Jan 21 12:26:00 2025 +0000 @@ -2,7 +2,7 @@ <description>for Toxicological Risk Assessment</description> <macros> <token name="@TOOL_VERSION@">3.0.1</token> - <token name="@VERSION_SUFFIX@">3</token> + <token name="@VERSION_SUFFIX@">4</token> </macros> <creator> <organization name="Helmholtz Centre for Environmental Research - UFZ, Department of Ecotoxicology" @@ -19,6 +19,7 @@ '$input_csv' '$concentration_column' '$response_column' + '$replicate_column' '$plot_output' '$ec_output' '$compound_name' @@ -29,6 +30,7 @@ <param name="input_csv" type="data" format="tabular" label="Dose-Response Tabular Input"/> <param name="concentration_column" type="data_column" data_ref="input_csv" label="Dose/Concentration Column Index" help="Index of the column for concentration values"/> <param name="response_column" type="data_column" data_ref="input_csv" label="Response Column Index" help="Index of the column for response values"/> + <param name="replicate_column" type="data_column" data_ref="input_csv" label="Replicate Column Index" help="Index of the column for replicate values"/> <param name="compound_name" type="text" label="Compound Name" help="Name of the compound to analyze"> <validator type="regex" message="Enter a valid compound name">^^[a-zA-Z0-9\[\]()_-]+$</validator> </param> @@ -45,6 +47,7 @@ <param name="input_csv" value="drc_input.tsv"/> <param name="concentration_column" value="2"/> <param name="response_column" value="3"/> + <param name="replicate_column" value="1"/> <param name="compound_name" value="test-chemical"/> <param name="concentration_unit" value="mg/L"/> <output name="plot_output" value="image_output.jpg" ftype="jpg"> @@ -57,14 +60,30 @@ </test> </tests> <help><![CDATA[ - This tool performs dose-response analysis on the provided CSV file, - generates a dose-response plot, and calculates EC values (EC10, EC25, EC50). + This tool performs dose-response analysis on the provided CSV/TSV file, + generates a dose-response plot, and calculates three Effect Concentrations (EC) values (EC10, EC25, EC50). + The tool further calculate the AIC and the model summary. + + The tool need three inputs from the CSV/TSV file: + - One column with the replicate number + - One column with concentrations values + - One column with biological response + + An exemplary input might look like: - - `input_csv`: A TSV file containing the dose-response data. - - `concentration_column`: The name of the column in the CSV file that contains the concentration values. - - `response_column`: The name of the column in the CSV file that contains the response values - - `plot_output`: A JPG image file of the dose-response plot. - - `ec_output`: A tabular file containing the calculated EC values. + +------------+---------------+---------------+ + | rep | conc | resp | + +============+===============+===============+ + | 1 | 0 | 0 | + +------------+---------------+---------------+ + | 2 | 10 | 50 | + +------------+---------------+---------------+ + | 1 | 5 | 10 | + +------------+---------------+---------------+ + + **NOTE: Input Table must have column headers!** + + ]]></help> <citations> <citation type="doi">10.1371/journal.pone.0146021</citation>