<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.2 20190208//EN" "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="other" dtd-version="1.2" xml:lang="en">
    <front>
        <journal-meta>
            <journal-id journal-id-type="pmc">F1000Research</journal-id>
            <journal-title-group>
                <journal-title>F1000Research</journal-title>
            </journal-title-group>
            <issn pub-type="epub">2046-1402</issn>
            <publisher>
                <publisher-name>F1000 Research Limited</publisher-name>
                <publisher-loc>London, UK</publisher-loc>
            </publisher>
        </journal-meta>
        <article-meta>
            <article-id pub-id-type="doi">10.12688/f1000research.171468.1</article-id>
            <article-categories>
                <subj-group subj-group-type="heading">
                    <subject>Software Tool Article</subject>
                </subj-group>
                <subj-group>
                    <subject>Articles</subject>
                </subj-group>
            </article-categories>
            <title-group>
                <article-title>DTAShiny: An Interactive R Shiny Application for Diagnostic Test Accuracy Analysis and Visualization</article-title>
                <fn-group content-type="pub-status">
                    <fn>
                        <p>[version 1; peer review: 3 approved with reservations]</p>
                    </fn>
                </fn-group>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author" corresp="no">
                    <name>
                        <surname>Quadri</surname>
                        <given-names>Syed Faizaan Shah</given-names>
                    </name>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Original Draft Preparation</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Review &amp; Editing</role>
                    <uri content-type="orcid">https://orcid.org/0009-0005-9672-3848</uri>
                    <xref ref-type="aff" rid="a1">1</xref>
                </contrib>
                <contrib contrib-type="author" corresp="no">
                    <name>
                        <surname>Mahmood</surname>
                        <given-names>Ahmad</given-names>
                    </name>
                    <role content-type="http://credit.niso.org/">Conceptualization</role>
                    <role content-type="http://credit.niso.org/">Project Administration</role>
                    <role content-type="http://credit.niso.org/">Resources</role>
                    <role content-type="http://credit.niso.org/">Supervision</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Original Draft Preparation</role>
                    <uri content-type="orcid">https://orcid.org/0000-0001-9107-3704</uri>
                    <xref ref-type="aff" rid="a1">1</xref>
                </contrib>
                <contrib contrib-type="author" corresp="yes">
                    <name>
                        <surname>Lac</surname>
                        <given-names>Joanne</given-names>
                    </name>
                    <role content-type="http://credit.niso.org/">Project Administration</role>
                    <role content-type="http://credit.niso.org/">Writing &#x2013; Review &amp; Editing</role>
                    <uri content-type="orcid">https://orcid.org/0009-0004-3533-434X</uri>
                    <xref ref-type="corresp" rid="c1">a</xref>
                    <xref ref-type="aff" rid="a2">2</xref>
                </contrib>
                <aff id="a1">
                    <label>1</label>Royal Free Hospital, London, England, UK</aff>
                <aff id="a2">
                    <label>2</label>University College London Medical School, London, England, UK</aff>
            </contrib-group>
            <author-notes>
                <corresp id="c1">
                    <label>a</label>
                    <email xlink:href="mailto:joanne.lac.20@ucl.ac.uk">joanne.lac.20@ucl.ac.uk</email>
                </corresp>
                <fn fn-type="conflict">
                    <p>No competing interests were disclosed.</p>
                </fn>
            </author-notes>
            <pub-date pub-type="epub">
                <day>30</day>
                <month>10</month>
                <year>2025</year>
            </pub-date>
            <pub-date pub-type="collection">
                <year>2025</year>
            </pub-date>
            <volume>14</volume>
            <elocation-id>1185</elocation-id>
            <history>
                <date date-type="accepted">
                    <day>20</day>
                    <month>10</month>
                    <year>2025</year>
                </date>
            </history>
            <permissions>
                <copyright-statement>Copyright: &#x00a9; 2025 Quadri SFS et al.</copyright-statement>
                <copyright-year>2025</copyright-year>
                <license xlink:href="https://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open access article distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
                </license>
            </permissions>
            <self-uri content-type="pdf" xlink:href="https://f1000research.com/articles/14-1185/pdf"/>
            <abstract>
                <p>Diagnostic Test Accuracy (DTA) analyses are essential in clinical research and medical decision-making. Despite the availability of R packages such as pROC and ROCR, their use often requires programming expertise, limiting accessibility for many clinical researchers. An interactive, code-free method is therefore needed to enhance usability and understanding.</p>
                <p>We developed DTAShiny, an R Shiny based web application that allows users to upload diagnostic data sets in CSV or Stata formats, perform DTA metric calculations, and generate dynamic visualizations. The application is built using shiny, bs4Dash, pROC, ggplot2, and other packages. It includes heuristic-based automatic detection of reference and test variables and offers real time threshold adjustment via an interactive slider.</p>
                <p>DTAShiny computes standard sensitivity, specificity, PPV, NPV, AUC and advanced F1 score, balanced accuracy. These DTA metrics are accompanied with approximate confidence intervals. The tool generates ROC and PR curves, distribution plots, and a calibration style plot. Real-time interactivity enables users to observe trade offs as thresholds change.</p>
                <p>This Zenodo deposit contains the DATAShiny source code, an example anonymised dataset, and documentation to run the app locally.</p>
            </abstract>
            <kwd-group kwd-group-type="author">
                <kwd>Diagnostic Test Accuracy</kwd>
                <kwd>DTA</kwd>
                <kwd>R Shiny</kwd>
                <kwd>ROC Analysis</kwd>
                <kwd>Sensitivity</kwd>
                <kwd>Specificity</kwd>
                <kwd>Predictive  Values</kwd>
                <kwd>Interactive Visualization</kwd>
                <kwd>Threshold Selection</kwd>
                <kwd>pROC.</kwd>
            </kwd-group>
            <funding-group>
                <funding-statement>The author(s) declared that no grants were involved in supporting this work.</funding-statement>
            </funding-group>
        </article-meta>
    </front>
    <body>
        <sec id="sec1" sec-type="intro">
            <title>Introduction</title>
            <p>Diagnostic Test Accuracy (DTA) studies play a pivotal role in evidence based medicine by providing critical information on how well a test can distinguish between individuals with or without a specific condition. Key performance indicators such as sensitivity, specificity, predictive values, and the area under the receiver operating characteristic (ROC) curve (AUC) are used to quantify the test performance. When the test yields continuous results, choosing an appropriate threshold becomes a crucial step, as it significantly influences the calculated metrics and, ultimately, clinical decisions.</p>
            <p>While statistical software packages support DTA analysis, few offer interactive tools that allow users to explore the effect of threshold selection dynamically and visualize its impact in real time. To bridge this gap we developed 
                <bold>DTAShiny</bold>, a web based application built using R and the Shiny framework. DTAShiny enables users to easily upload data, automatically suggests relevant variables, adjust thresholds interactively and generate a wide array of metrics and visualizations.</p>
        </sec>
        <sec id="sec2">
            <title>Methods implementation</title>
            <p>DTAShiny is developed using a R programming language (version 4.0+ recommended) and the Shiny web application framework. The user interface is designed with the bsDash package to create a clean, modern dashboard layout that&#x2019;s both intuitive and responsive.</p>
            <p>The core functionalities are supported by several R packages:
                <list list-type="bullet">
                    <list-item>
                        <label>&#x2022;</label>
                        <p>

                            <bold>shiny, bs4Dash</bold>: For the web application structure and user interface elements.</p>
                    </list-item>
                    <list-item>
                        <label>&#x2022;</label>
                        <p>

                            <bold>tidyverse</bold>: Primarily ggplot2 for creating plots (boxplots, histograms, density plots, precision-recall curve, calibration-like plot) and dplyr for data manipulation (e.g., in the calibration-like plot).</p>
                    </list-item>
                    <list-item>
                        <label>&#x2022;</label>
                        <p>

                            <bold>DT (DataTables)</bold>: For displaying interactive tables of DTA metrics.</p>
                    </list-item>
                    <list-item>
                        <label>&#x2022;</label>
                        <p>

                            <bold>pROC</bold>: Used for generating the ROC curve and calculating the AUC.</p>
                    </list-item>
                    <list-item>
                        <label>&#x2022;</label>
                        <p>

                            <bold>haven</bold>: For reading Stata (.dta) files.</p>
                    </list-item>
                </list>
            </p>
            <sec id="sec3">
                <title>Data input and variable detection</title>
                <p>Users can upload the data in the form of CSV or Stata format. DTAshiny uses simple heuristic rules to automatically suggest which columns represent the 
                    <bold>reference standard</bold> and the 
                    <bold>index test:</bold>

                    <list list-type="order">
                        <list-item>
                            <label>1.</label>
                            <p>The 
                                <bold>reference standard column</bold>: It preferentially selects a column named &#x201c;status&#x201d; if it contains binary (0/1) numeric data. Failing that, it searches for other numeric columns containing only 0s and 1s. As a fallback, it selects the first column.</p>
                        </list-item>
                        <list-item>
                            <label>2.</label>
                            <p>The 
                                <bold>index test column</bold>: It preferentially selects a column named &#x201c;test_value&#x201d; if present. Otherwise, it chooses the first numeric column that was not selected as the reference standard.</p>
                        </list-item>
                    </list>
                </p>
                <p>These automatic selections are meant to streamline setup, though users are encouraged to verify their accuracy before proceeding.</p>
            </sec>
            <sec id="sec4">
                <title>Interactive threshold adjustment</title>
                <p>If the identified index test variable is numeric, a slider is dynamically generated. This interactive control allows users to explore different cutoff points for classification. The range of the slider is based on minimum and maximum values of the test variable and initially defaults to the median.</p>
            </sec>
            <sec id="sec5">
                <title>DTA metrics calculations</title>
                <p>Based on the chosen threshold the DTAShiny constructs a 2x2 confusion matrix (True Positive (TP), False Positive (FP), True Negative (TN), False Negative (FN)). From this it computes the following metrics:
                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Sensitivity</bold> = TP/ (TP + FN)</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Specificity</bold> = TN/ (TN + FP)</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Positive Predictive Value (PPV)</bold> = TP/ (TP + FP)</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Negative Predictive Value (NPV)</bold> = TN/ (TN + FN)</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Area Under the ROC Curve (AUC)</bold> = calculated via 
                                <styled-content style="color:#178037">

                                    <monospace>pROC::auc()</monospace>
</styled-content>
                            </p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>F1 Score</bold> = 2 &#x00d7; (PPV &#x00d7; Sensitivity) / (PPV + Sensitivity)</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Balanced Accuracy</bold> = (Sensitivity + Specificity) /2</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Prevalence</bold> = (TP + FN) / (Total observations)</p>
                        </list-item>
                    </list>
                </p>
                <p>Approximate 95% confidence intervals for sensitivity, specificity, PPV, and NPV are calculated using stats::prop.test.</p>
            </sec>
            <sec id="sec6">
                <title>Visualizations</title>
                <p>DTAShiny produces a variety of plots to support interpretation:
                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>ROC Curve</bold>: Plofled using pROC::plot.roc().</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Precision-Recall (PR) Curve</bold>: Calculated by evaluating precision and recall over a sequence of thresholds and plofled using ggplot2.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Distribution Plots</bold>: Boxplots, histograms, and density plots of the index test values (overall and stratified by reference status) are generated using ggplot2.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Calibration-like Plot</bold>: Index test values are binned into deciles using dplyr::ntile(). The mean predicted test value within each bin is plofled against the observed proportion of positive cases in that bin. This plot provides a visual, albeit illustrative, sense of calibration.</p>
                        </list-item>
                    </list>
                </p>
            </sec>
            <sec id="sec7">
                <title>Operations</title>
                <p>DTAShiny can be accessed as a web based application and its source code can be run locally.</p>
            </sec>
            <sec id="sec8">
                <title>System requirements</title>
                <p>

                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>R version 4.0 or higher</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Internet browser for the hosted version</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Required R packages: shiny, bs4Dash, ggplot2, dplyr, pROC, DT, haven</p>
                        </list-item>
                    </list>
                </p>
            </sec>
            <sec id="sec9">
                <title>Running the application</title>
                <p>

                    <list list-type="order">
                        <list-item>
                            <label>1.</label>
                            <p>

                                <bold>Web version</bold>: Available at 
                                <ext-link ext-link-type="uri" xlink:href="https://786miii.shinyapps.io/786MIIDTA/">hflps://786miii.shinyapps.io/786MIIDTA/</ext-link>.</p>
                        </list-item>
                        <list-item>
                            <label>2.</label>
                            <p>Local versions:</p>
                            <list list-type="bullet">
                                <list-item>
                                    <label>&#x2022;</label>
                                    <p>Open-source and hosted on GitHub at 
                                        <ext-link ext-link-type="uri" xlink:href="https://github.com/mahmood789/DTA/tree/main">hflps://github.com/mahmood789/DTA/tree/main</ext-link> under the MIT License.</p>
                                </list-item>
                                <list-item>
                                    <label>&#x2022;</label>
                                    <p>Open app. R in RStudio.</p>
                                </list-item>
                                <list-item>
                                    <label>&#x2022;</label>
                                    <p>Run the app using shiny:: runApp().</p>
                                </list-item>
                            </list>
                        </list-item>
                    </list>
</p>
            </sec>
            <sec id="sec10">
                <title>Interface walkthrough</title>
                <p>

                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Data and Threshold:</bold> For file upload (CSV/Stata format). The application automatically identifies the reference and index test variable and creates a threshold slider if the test variable is numeric. The &#x201c;Run DTA Analysis&#x201d; initiates the calculations.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Overview:</bold> Displays general information about the uploaded dataset and confirms the variables selected for analysis.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Standard Metrics:</bold> Displays a table of key data metrics (Sensitivity, Specificity, PPV, NPV, AUC) and the confusion matrix. The ROC curve is shown here.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Advanced Metrix:</bold> Presents a table with advanced metrics including F1 Score, Balanced, Accuracy, Prevalence and a table of their confidence intervals. The Precision Recall curve is shown here.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Plots</bold>: Offers visual tools for exploring the data such as: Boxplots of test values by reference group, Histogram of test values, Density plots for test values in each outcome group, A calibration-like plot for assessing the relationship between predicted and observed outcomes.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Extra Text Output:</bold> Includes static text providing general guidance and interpretation notes.</p>
                        </list-item>
                    </list>
                </p>
            </sec>
            <sec id="sec11">
                <title>Use cases and illustrative examples</title>
                <p>DTA shiny can be utilised in different scenarios:</p>
                <p>

                    <bold>Initial DTA Exploration:</bold> A clinical researcher uploads data from a pilot study of a new biomarker into DTAShiny. They can instantly visualize the test performance, explore how different threshold values affect sensitivity and specificity, and examine key diagnostic metrics all without writing a code.</p>
                <p>

                    <bold>Understanding Threshold Impact:</bold> By interactively moving the threshold slider, users can directly observe how sensitivity and specificity trade off and how predictive values change. This helps researchers to alter diagnostic criteria for their specific clinical contexts.</p>
                <p>

                    <bold>Visualising Data Characteristics:</bold> The boxplots and density plots help in understanding the separation (or overlap) in test values between diseased and non-diseased individuals. The histogram provides an overview of the test value distribution.</p>
                <p>

                    <bold>Assessing Performance in Imbalanced Datasets:</bold> When working with conditions that have low prevalence, the ROC curve can sometimes be misleading. DTAShiny includes the Precision Recall curve which particularly provides more insight in such situations, helping researchers befler interpret model performance.</p>
                <p>

                    <bold>Educational Tool:</bold> Students and Teachers can learn DTAShiny with a simple dataset to learn about the DTA concept, understand how metrics are calculated and see the effect of threshold changes.</p>
            </sec>
            <sec id="sec12">
                <title>Example 1: Biomarker evaluation in screening</title>
                <p>A researcher evaluating a new biomarker for early detection of Disease X uploads their pilot study dataset. Using the threshold slider, they explore tradeoffs: 95% sensitivity is achieved at a threshold of 2.6 but specificity drops to 68%. This informs their recommendation to prioritize sensitivity in screening contexts.</p>
            </sec>
            <sec id="sec13">
                <title>Example 2: Educational application</title>
                <p>A public health instructor uses DTAShiny to demonstrate DTA principles. Students adjust thresholds on sample datasets and see how sensitivity and specificity move inversely, visualizing key diagnostic trade offs without writing any code.</p>
            </sec>
            <sec id="sec14">
                <title>Example 3: Low prevalence condition</title>
                <p>An epidemiologist studying a rare condition (2% prevalence) notes that the ROC curve appears excellent (AUC = 0.9). However, using the precision-Recall curve. They observe that PPV remains low due to low prevalence, focusing on the importance of multiple metrics.</p>
            </sec>
        </sec>
        <sec id="sec15" sec-type="discussion">
            <title>Discussion</title>
            <p>DTAShiny provides a user friendly and interactive environment for conducting a comprehensive range of DTA analyses. Its main strength lies in its intuitive interface, automatic variable detection, and real time threshold adjustment for continuous tests. By combining standard and advanced performance metrics with rich visual outputs. The inclusion of both ROC and PR curves along with variable distributional plots and an illustrative calibration like plots provides users with a well rounded understanding of test performance.</p>
            <sec id="sec16">
                <title>Strengths</title>
                <p>

                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Interactive Threshold Selection:</bold> Allows dynamic exploration of test performance across different cut off.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Comprehensive Output:</bold> Provides standard and advanced DTA metrics, confidence intervals and multiple relevant plots.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>User Friendly</bold>: The tool is built around a graphical user interface that minimizes the need for coding along with automatic detection of reference and test variables.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Supports Common Data format:</bold> Accepts both CSV and Stata formats.</p>
                        </list-item>
                    </list>
                </p>
            </sec>
            <sec id="sec17">
                <title>Limitations</title>
                <p>

                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Heuristic variable detection:</bold> While convenient the automatic detection of reference and test variables, it may not always select the appropriate columns, especially in the datasets with unconventional naming or multiple potential options. Users need to verify these selections before proceeding with the analysis.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Approximate Confidence Intervals:</bold> The CIs for sensitivity, specificity, and predictive values are based on prop.test, which uses a normal approximation. More accurate approaches, like Clopper-Pearson intervals or bootstrap-based methods, could yield slightly different results. The AUC confidence intervals are not displayed explicitly in the current versions.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Single Test Analysis:</bold> The current version focuses on evaluating a single index test against a single reference standard. It does not directly support the comparisons of multiple tests or analyses of paired DTA data.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>No Automated Threshold Optimisation:</bold> While the users can explore various thresholds, the app does not automatically calculate or suggest an &#x201c;optimal&#x201d; threshold based on criteria like Youden&#x2019;s J index or proximity to the top-left corner of the ROC space.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Illustrative Calibration Plot:</bold> The Calibration like plot provided in the tool is intended as visual aid rather than a formal calibration test. It does not replace statistical tests such as the Hosmer- Lemeshow test.</p>
                        </list-item>
                    </list>
                </p>
            </sec>
            <sec id="sec18">
                <title>Future developments</title>
                <p>

                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Enabling manual selection of reference and test variables, in case auto-detection is inaccurate.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Implementing more robust methods for calculating confidence intervals, including for AUC.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Adding functionality to compute and highlight optimal thresholds using formal criteria.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Extending support to comparisons involving multiple diagnostic tests or test combinations.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Providing options for handling missing data more explicitly.</p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>Introducing formal tools for assessing calibration.</p>
                        </list-item>
                    </list>
                </p>
            </sec>
        </sec>
        <sec id="sec19" sec-type="conclusion">
            <title>Conclusion</title>
            <p>DTAShiny is an accessible and interactive R Shiny application designed to empower researchers, clinicians and students performing diagnostic test accuracy analyses without requiring advanced coding skills. By integrating data upload, real-time threshold adjustment, detailed performance metrics, and a wide range of visualizations, DTAShiny streamlines the DTA workflow and enhances the interpretability of diagnostic test results.</p>
            <p>Its user-friendly interface, support for common data formats, and comprehensive outputs make it a valuable tool for both research and education. While the current version is focused on single test evaluations, planned enhancements will further expand its capabilities and analytical depth. Overall, DTAShiny contributes meaningfully to the growing toolkit of evidence-based diagnostic methods.</p>
        </sec>
    </body>
    <back>
        <sec id="sec22" sec-type="data-availability">
            <title>Data availability statement</title>
            <p>

                <list list-type="bullet">
                    <list-item>
                        <label>&#x2022;</label>
                        <p>

                            <bold>Software Code and Example Data:</bold> The source code and example dataset for the DTAShiny application are available from the following permanent deposit: Zenodo (DOI: 
                            <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.5281/zenodo.17224122">https://doi.org/10.5281/zenodo.17224122</ext-link>). The Source code is Licenced under the MIT Licence.
                            <sup>
                                <xref ref-type="bibr" rid="ref6">6</xref>
                            </sup>
                        </p>
                    </list-item>
                </list>
            </p>
            <sec id="sec23">
                <title>Software availability</title>
                <p>

                    <list list-type="bullet">
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Hosted version:</bold> DTAShiny is publicly available at: 
                                <ext-link ext-link-type="uri" xlink:href="https://786miii.shinyapps.io/786MIIDTA/">hflps://786miii.shinyapps.io/786MIIDTA/</ext-link>
                            </p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Source code:</bold> The R source code is available on GitHub at: 
                                <ext-link ext-link-type="uri" xlink:href="https://github.com/mahmood789/DTA/tree/main">hflps://github.com/mahmood789/DTA/tree/main</ext-link>
                            </p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>Archived software available from</bold>: 
                                <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.5281/zenodo.17224122">https://doi.org/10.5281/zenodo.17224122</ext-link>
                                <sup>
                                    <xref ref-type="bibr" rid="ref6">6</xref>
                                </sup>
                            </p>
                        </list-item>
                        <list-item>
                            <label>&#x2022;</label>
                            <p>

                                <bold>License:</bold> The source code is licensed under the MIT License.</p>
                        </list-item>
                    </list>
                </p>
            </sec>
        </sec>
        <ack>
            <title>Acknowledgements</title>
            <p>We acknowledge the developers of R
                <sup>
                    <xref ref-type="bibr" rid="ref4">4</xref>
                </sup> and the R packages shiny,
                <sup>
                    <xref ref-type="bibr" rid="ref5">5</xref>
                </sup> bs4Dash, tidyverse (including ggplot2
                <sup>
                    <xref ref-type="bibr" rid="ref2">2</xref>
                </sup> and dplyr
                <sup>
                    <xref ref-type="bibr" rid="ref3">3</xref>
                </sup>), DT, pROC,
                <sup>
                    <xref ref-type="bibr" rid="ref1">1</xref>
                </sup> and haven,
                <sup>
                    <xref ref-type="bibr" rid="ref7">7</xref>
                </sup> which are instrumental to the functionality of this application. We also acknowledge the use of the large language model, ChatGPT (openAI) for minor assistance in grammar, clarity and language editing of the manuscript.</p>
        </ack>
        <ref-list>
            <title>References</title>
            <ref id="ref1">
                <label>1</label>
                <mixed-citation publication-type="journal">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Robin</surname>
                            <given-names>X</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Turck</surname>
                            <given-names>N</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Hainard</surname>
                            <given-names>A</given-names>
                        </name>

                        <etal/>
</person-group>:
                    <article-title>pROC: an open-source package for R and S+ to analyze and compare ROC curves.</article-title>
                    <source>

                        <italic toggle="yes">BMC Bioinformatics.</italic>
</source>
                    <year>2011</year>;<volume>12</volume>:<fpage>77</fpage>.
                    <pub-id pub-id-type="pmid">21414208</pub-id>
                    <pub-id pub-id-type="doi">10.1186/1471-2105-12-77</pub-id>
                    <pub-id pub-id-type="pmcid">PMC3068975</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref2">
                <label>2</label>
                <mixed-citation publication-type="book">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Wickham</surname>
                            <given-names>H</given-names>
                        </name>

                        <etal/>
</person-group>:
                    <source>

                        <italic toggle="yes">ggplot2: Elegant Graphics for Data Analysis.</italic>
</source>
                    <publisher-loc>New York</publisher-loc>:
                    <publisher-name>Springer-Verlag</publisher-name>;<year>2016</year>.
                    <pub-id pub-id-type="doi">10.1007/978-3-319-24277-4</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref3">
                <label>3</label>
                <mixed-citation publication-type="other">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Wickham</surname>
                            <given-names>H</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Fran&#x00e7;ois</surname>
                            <given-names>R</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Henry</surname>
                            <given-names>L</given-names>
                        </name>

                        <etal/>
</person-group>:
                    <article-title>dplyr: A Grammar of Data Manipulation.</article-title>
                    <source>

                        <italic toggle="yes">R package version X.Y.Z.</italic>
</source>
                    <ext-link ext-link-type="uri" xlink:href="https://cran.r-project.org/package%3Ddplyr">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref4">
                <label>4</label>
                <mixed-citation publication-type="book">
                    <collab>R Core Team</collab>:
                    <source>

                        <italic toggle="yes">R: A language and environment for statistical computing.</italic>
</source>
                    <publisher-loc>Vienna, Austria</publisher-loc>:
                    <publisher-name>R Foundation for Statistical Computing</publisher-name>;<year>202X</year>.
                    <ext-link ext-link-type="uri" xlink:href="https://www.r-project.org/">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref5">
                <label>5</label>
                <mixed-citation publication-type="other">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Chang</surname>
                            <given-names>W</given-names>
                        </name>

                        <etal/>
</person-group>:
                    <article-title>shiny: Web Application Framework for R.</article-title>
                    <source>

                        <italic toggle="yes">R package version X.Y.Z.</italic>
</source>
                    <ext-link ext-link-type="uri" xlink:href="https://shiny.rstudio.com/">Reference Source</ext-link>
                </mixed-citation>
            </ref>
            <ref id="ref6">
                <label>6</label>
                <mixed-citation publication-type="other">
                    <person-group person-group-type="author">

                        <name name-style="western">
                            <surname>Quadri</surname>
                            <given-names>SFS</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Ahmed</surname>
                            <given-names>M</given-names>
                        </name>

                        <name name-style="western">
                            <surname>Lac</surname>
                            <given-names>J</given-names>
                        </name>
</person-group>:
                    <article-title>DTAShiny: An Interactive R Shiny Application for Diagnostic Test Accuracy Analysis and Visualization.</article-title>
                    <source>

                        <italic toggle="yes">Zenodo.</italic>
</source>
                    <year>2025</year>.
                    <pub-id pub-id-type="doi">10.5281/zenodo.17224122</pub-id>
                </mixed-citation>
            </ref>
            <ref id="ref7">
                <label>7</label>
                <mixed-citation publication-type="book">
                    <collab>StataCorp</collab>:
                    <source>

                        <italic toggle="yes">Stata Statistical Sokware: Release XX.</italic>
</source>
                    <publisher-loc>College Station, TX</publisher-loc>:
                    <publisher-name>StataCorp LLC.</publisher-name>;<year>202X</year>. (If citing Stata itself, or haven for reading its files).</mixed-citation>
            </ref>
        </ref-list>
    </back>
    <sub-article article-type="reviewer-report" id="report442973">
        <front-stub>
            <article-id pub-id-type="doi">10.5256/f1000research.189078.r442973</article-id>
            <title-group>
                <article-title>Reviewer response for version 1</article-title>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author">
                    <name>
                        <surname>Castaneda</surname>
                        <given-names>Pedro</given-names>
                    </name>
                    <xref ref-type="aff" rid="r442973a1">1</xref>
                    <role>Referee</role>
                    <uri content-type="orcid">https://orcid.org/0000-0003-1865-1293</uri>
                </contrib>
                <aff id="r442973a1">
                    <label>1</label>Universidad Nacional Toribio Rodriguez de Mendoza, Amazonas, Peru</aff>
            </contrib-group>
            <author-notes>
                <fn fn-type="conflict">
                    <p>
                        <bold>Competing interests: </bold>No competing interests were disclosed.</p>
                </fn>
            </author-notes>
            <pub-date pub-type="epub">
                <day>2</day>
                <month>1</month>
                <year>2026</year>
            </pub-date>
            <permissions>
                <copyright-statement>Copyright: &#x00a9; 2026 Castaneda P</copyright-statement>
                <copyright-year>2026</copyright-year>
                <license xlink:href="https://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open access peer review report distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
                </license>
            </permissions>
            <related-article ext-link-type="doi" id="relatedArticleReport442973" related-article-type="peer-reviewed-article" xlink:href="10.12688/f1000research.171468.1"/>
            <custom-meta-group>
                <custom-meta>
                    <meta-name>recommendation</meta-name>
                    <meta-value>approve-with-reservations</meta-value>
                </custom-meta>
            </custom-meta-group>
        </front-stub>
        <body>
            <p>
                <bold>Is the description of the software tool technically sound?</bold>
            </p>
            <p> 
                <bold>Partly.</bold>&#x00a0;The main architecture, packages used and functionalities are described, but key design choices (e.g. handling of prevalence, case&#x2013;control designs, single&#x2011;test focus, no optimal threshold estimation) and their statistical implications are not fully developed.</p>
            <p> </p>
            <p> 
                <bold>Are sufficient details of the code, methods and analysis provided to allow replication of the software development and its use by others?</bold>
            </p>
            <p> 
                <bold>Partly.</bold>&#x00a0;The code is openly available on GitHub and Zenodo and the main workflow is described, but some implementation details (e.g. variable selection heuristics, CI computation options, testing across environments) are only briefly outlined and would benefit from more explicit, step&#x2011;by&#x2011;step information.</p>
            <p> </p>
            <p> 
                <bold>Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool?</bold>
            </p>
            <p> 
                <bold>Partly.</bold>&#x00a0;Standard outputs (ROC, PR curves, confusion matrix, sensitivity, specificity, predictive values, F1, balanced accuracy) are explained, but critical caveats&#x2014;especially around interpretation of PPV/NPV and PR in case&#x2013;control or low&#x2011;prevalence contexts&#x2014;are not yet clearly flagged for users.&#x200b;</p>
            <p> </p>
            <p> 
                <bold>Are the conclusions about the tool and its performance adequately supported by the findings presented in the article?</bold>
            </p>
            <p> 
                <bold>Partly.</bold>&#x00a0;The article justifies that DTAShiny is user&#x2011;friendly and useful for exploratory/educational DTA, but the claims about its analytical breadth and practical utility would be stronger with a more explicit discussion of limitations and of scenarios where the outputs may be misleading.</p>
            <p>Are the conclusions about the tool and its performance adequately supported by the findings presented in the article?</p>
            <p>Partly</p>
            <p>Is the rationale for developing the new software tool clearly explained?</p>
            <p>Yes</p>
            <p>Is the description of the software tool technically sound?</p>
            <p>Partly</p>
            <p>Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others?</p>
            <p>Partly</p>
            <p>Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool?</p>
            <p>Partly</p>
            <p>Reviewer Expertise:</p>
            <p>Data Science</p>
            <p>I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however I have significant reservations, as outlined above.</p>
        </body>
    </sub-article>
    <sub-article article-type="reviewer-report" id="report442970">
        <front-stub>
            <article-id pub-id-type="doi">10.5256/f1000research.189078.r442970</article-id>
            <title-group>
                <article-title>Reviewer response for version 1</article-title>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author">
                    <name>
                        <surname>Sunaryo</surname>
                        <given-names>Budi</given-names>
                    </name>
                    <xref ref-type="aff" rid="r442970a1">1</xref>
                    <role>Referee</role>
                    <uri content-type="orcid">https://orcid.org/0000-0001-6798-2756</uri>
                </contrib>
                <aff id="r442970a1">
                    <label>1</label>Universitas Bung Hatta (UBH), Padang, West Sumatra, Indonesia</aff>
            </contrib-group>
            <author-notes>
                <fn fn-type="conflict">
                    <p>
                        <bold>Competing interests: </bold>No competing interests were disclosed.</p>
                </fn>
            </author-notes>
            <pub-date pub-type="epub">
                <day>30</day>
                <month>12</month>
                <year>2025</year>
            </pub-date>
            <permissions>
                <copyright-statement>Copyright: &#x00a9; 2025 Sunaryo B</copyright-statement>
                <copyright-year>2025</copyright-year>
                <license xlink:href="https://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open access peer review report distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
                </license>
            </permissions>
            <related-article ext-link-type="doi" id="relatedArticleReport442970" related-article-type="peer-reviewed-article" xlink:href="10.12688/f1000research.171468.1"/>
            <custom-meta-group>
                <custom-meta>
                    <meta-name>recommendation</meta-name>
                    <meta-value>approve-with-reservations</meta-value>
                </custom-meta>
            </custom-meta-group>
        </front-stub>
        <body>
            <p>The manuscript presents DTAShiny, a web-based R Shiny application that enables users to perform Diagnostic Test Accuracy (DTA) analyses through an intuitive graphical interface. The tool allows users to upload data, automatically identify reference and test variables, adjust diagnostic thresholds interactively, and generate standard DTA metrics (sensitivity, specificity, PPV, NPV, AUC), along with visualizations such as ROC curves, precision-recall curves, and distribution plots. The authors correctly identify that existing R packages for DTA require programming skills that create barriers for many clinical researchers. The development of DTAShiny addresses an essential need in making diagnostic test evaluation more accessible.</p>
            <p> </p>
            <p> 
                <bold>Detailed Assessment</bold>
            </p>
            <p> 1. Is the description of the software tool technically sound?</p>
            <p> Partly. The description of the architecture and workflow is generally accurate. However, it omits a critical technical limitation: the tool does not account for different study designs, so the predictive values (PPV/NPV) it calculates are valid only for cohort studies, not for standard case-control designs. Additionally, an overstatement of the "calibration-like plot" as a formal diagnostic tool weakens the technical soundness.</p>
            <p> 2. Are sufficient details provided to allow replication?</p>
            <p> Partly. Providing the GitHub repository with source code is a significant strength. However, for accurate replication, the exact computational environment is missing. The article should specify the precise versions of R and all dependent packages used, ideally by including a file such as renv.lock or the output of sessionInfo() in the repository. More details on how thresholds are selected for generating curves would also aid replication.</p>
            <p> 3. Is sufficient information provided to interpret the results?</p>
            <p> Partly. While standard metrics are clearly labeled, the tool lacks essential guidance and warnings for proper interpretation. Crucially, it does not warn users that PPV and NPV are invalid for case-control data, a significant risk for misinterpretation. Guidance on selecting clinically meaningful thresholds and brief explanations of when to use advanced metrics, such as the F1-score, would also improve interpretability for non-expert users.</p>
            <p> 4. Are the conclusions adequately supported?</p>
            <p> Partly. Its described functionality supports the conclusions about the tool's interactivity and user-friendly design. However, broader claims about its performance and impact, such as that it "empowers" users or provides a "well-rounded understanding," are not supported by evidence, such as user testing or validation against established software. The conclusions would be stronger if they were more carefully aligned with the tool's demonstrated features and explicitly acknowledged its current limitations.</p>
            <p> </p>
            <p> 
                <bold>Specific Recommendations for Revision</bold>
            </p>
            <p> - Address Study Design Limitations: The manuscript and application must explicitly warn users about the limitations of PPV and NPV calculations in case-control studies. Consider implementing an option for users to input an external prevalence value when analyzing case-control data.</p>
            <p> -&#x00a0;Enhance Reproducibility: Add detailed version information for all software components to the GitHub repository. A renv.lock file would be ideal for ensuring computational reproducibility.</p>
            <p> -&#x00a0;Improve Interpretation Guidance: Incorporate clear warnings and educational notes within the application interface about the contextual interpretation of metrics, particularly predictive values.</p>
            <p> -&#x00a0;Moderate Conclusions: Revise the discussion and conclusion sections to more accurately reflect what has been demonstrated versus what is claimed. Explicitly acknowledge the tool's current limitations alongside its strengths.</p>
            <p> -&#x00a0;Clarify the Calibration Plot: Re-label or re-describe the "calibration-like plot" to avoid implying it is a formal statistical calibration tool, which it is not.</p>
            <p> </p>
            <p> 
                <bold>Conclusion</bold>
            </p>
            <p> DTAShiny is a promising and valuable tool that makes DTA analysis more accessible through its interactive features. However, it currently has significant limitations, particularly concerning the valid interpretation of predictive values across study designs. With substantial revisions to address its epidemiological foundations, reproducibility, and the balanced reporting of its capabilities, it could become a responsible and valuable contribution to the research community. I recommend that the authors address these concerns and submit a revised version for further consideration.</p>
            <p>Are the conclusions about the tool and its performance adequately supported by the findings presented in the article?</p>
            <p>Partly</p>
            <p>Is the rationale for developing the new software tool clearly explained?</p>
            <p>Yes</p>
            <p>Is the description of the software tool technically sound?</p>
            <p>Partly</p>
            <p>Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others?</p>
            <p>Partly</p>
            <p>Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool?</p>
            <p>Partly</p>
            <p>Reviewer Expertise:</p>
            <p>Information Technology, Computer Networks, Machine Learning, Internet of Things, Data Analytics</p>
            <p>I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however I have significant reservations, as outlined above.</p>
        </body>
    </sub-article>
    <sub-article article-type="reviewer-report" id="report428907">
        <front-stub>
            <article-id pub-id-type="doi">10.5256/f1000research.189078.r428907</article-id>
            <title-group>
                <article-title>Reviewer response for version 1</article-title>
            </title-group>
            <contrib-group>
                <contrib contrib-type="author">
                    <name>
                        <surname>Nakas</surname>
                        <given-names>Christos</given-names>
                    </name>
                    <xref ref-type="aff" rid="r428907a1">1</xref>
                    <role>Referee</role>
                    <uri content-type="orcid">https://orcid.org/0000-0003-4155-722X</uri>
                </contrib>
                <aff id="r428907a1">
                    <label>1</label>University of Thessaly, Volos, Greece</aff>
            </contrib-group>
            <author-notes>
                <fn fn-type="conflict">
                    <p>
                        <bold>Competing interests: </bold>No competing interests were disclosed.</p>
                </fn>
            </author-notes>
            <pub-date pub-type="epub">
                <day>20</day>
                <month>11</month>
                <year>2025</year>
            </pub-date>
            <permissions>
                <copyright-statement>Copyright: &#x00a9; 2025 Nakas C</copyright-statement>
                <copyright-year>2025</copyright-year>
                <license xlink:href="https://creativecommons.org/licenses/by/4.0/">
                    <license-p>This is an open access peer review report distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
                </license>
            </permissions>
            <related-article ext-link-type="doi" id="relatedArticleReport428907" related-article-type="peer-reviewed-article" xlink:href="10.12688/f1000research.171468.1"/>
            <custom-meta-group>
                <custom-meta>
                    <meta-name>recommendation</meta-name>
                    <meta-value>approve-with-reservations</meta-value>
                </custom-meta>
            </custom-meta-group>
        </front-stub>
        <body>
            <p>This might eventually evolve into a useful R shiny app for ROC curve analysis, however, currently feels more like a pre alpha version, given that no limitations are described for the use in case-control studies (where prevalence cannot be estimated from the data). As a consequence, results can be highly misleading since all PPV, NPV, precision-recall estimates can be wrong. It would be useful if the user could provide a prevalence estimate 
                <italic>or</italic> use the available data for its estimation.</p>
            <p> Furthermore, currently, one cannot handle more than one biomarkers and cannot compare biomarkers (uploading a single data file). The app automatically seems to select columns from the data without any prompts or selection possibility. This limits the app functionality.&#x00a0;&#x00a0;</p>
            <p> Some output feels like leftovers from the LLM helper (text part), the app seems to need improvement in such details.</p>
            <p> Expanding the literature search (ref list) could be useful for such a tool.</p>
            <p>Are the conclusions about the tool and its performance adequately supported by the findings presented in the article?</p>
            <p>Partly</p>
            <p>Is the rationale for developing the new software tool clearly explained?</p>
            <p>Yes</p>
            <p>Is the description of the software tool technically sound?</p>
            <p>Partly</p>
            <p>Are sufficient details of the code, methods and analysis (if applicable) provided to allow replication of the software development and its use by others?</p>
            <p>Partly</p>
            <p>Is sufficient information provided to allow interpretation of the expected output datasets and any results generated using the tool?</p>
            <p>Partly</p>
            <p>Reviewer Expertise:</p>
            <p>Biostatistics</p>
            <p>I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard, however I have significant reservations, as outlined above.</p>
        </body>
    </sub-article>
</article>
