library(shiny) library(UncertainInterval) # Define UI for application that draws a histogram ui <- fluidPage( # Application title # titlePanel("Medical Decision Methods: Uncertain Interval Determination for Binormal Distributed Test Scores"), # Sidebar with a slider input for number of bins sidebarLayout( sidebarPanel(width = 6, plotOutput("distPlot"), fluidRow( p("The point of intersection is equal to the optimal dichotomous threshold at which the sum of Sensitivity and Specificity (Se + Sp) is maximized, and the sum of errors (FNR + FPR) is minimized. You manipulate the percentages of errors with the sliders."), column(6, sliderInput("FNR", "False Negative Rate: Percentage of true patients with test scores below the intersection (1 - Se):", min = 1, max = 50, value = 15, #width='50%' ), textOutput("overlap"), checkboxInput("combineSliders", "Combine non-patients slider with patient slider", TRUE), ), column(6, sliderInput("FPR", "False Positive Rate: Percentage of true non-patients with test scores above the intersection (1 - Sp):", min = 1, max = 50, value = 15, #width = '50%' ), radioButtons("acc", label = h5("Allowed uncertainty (Se and Sp of Uncertain Interval):"), choices = list("Se.UI = Sp.UI = .55" = 1, "Se.UI = Sp.UI = .60" = 2), inline=F, selected = 1) ) ) ), # Show a plot of the generated distribution mainPanel(width = 6, h3("Medical Decision Methods: Uncertain Interval Determination for Binormal Distributed Test Scores"), tabsetPanel( tabPanel("Introduction", h2('Determination of an Uncertain Interval'), p("This Shiny App is intended to provide a hands-on demonstration of the", span("binormal", style="color:blue"), "Uncertain Interval Method for evaluating medical tests. The Uncertain Interval method defines a range of test scores which insufficiently distinguishes patients with and without the targeted disease. Test scores outside this range are used for a positive or negative classification, but for patients with uncertain test outcomes, additional testing or waiting on further developments (active surveillance or watchful waiting) is expected to be more beneficial. This Shiny App shows advantages and disadvantages of this evaluation method of tests. It is intended to help you to decide for or against the use of this method for evaluating your medical test."), tags$ul( tags$li("Hands-on. Look at the Hands-on tab for some examples and their discussion."), tags$li("Control panel. Use this tab for explanation of the use of the controls."), tags$li("Background. Explanation of the method."), tags$li("Conclusion and References. My conclusions (but please draw your own) and References."), ), ), tabPanel("Hands-on", h2("Hands-on demonstration of the bi-normal Uncertain Interval method"), p("Set the uncertainty criterion to .55 and check the checkbox to combine the two sliders. With the sliders you manipulate the overlap between the two distributions and the strength of the simulated test. A lower overlap directly defines a stronger test. For convenience, the", span("AUC statistic", style="color:blue"), "is also presented, which is a commonly used estimate of the strength of the test (using all test scores)."), tags$ul( tags$li("1. Make the test stronger by reducing the overlap between the two distributions of the simulated test scores to two times 10%. The results are shown in the plot: the two dashed vertical black lines that show the Uncertain Interval, the range of test scores that hardly differentiate the two groups."), p(span("UI.size", style="color:blue"), 'shows the total percentage of tested persons (true patients plus true non-patients) that have a test score that falls within the Uncertain Interval.'), p(span("UI.err", style="color:blue"), 'shows the total percentage of classification errors avoided by recognizing the uncertain status in comparison to dichotomous optimal classification. Optimal dichotomous classification uses the optimal Youden threshold (that is the point of intersection). Please note that the percentage of errors avoided is considerably higher than the percentage of persons within the UI. (When the dischotomous optimal threshold is applied, Se + Sp is maximized and the sum of errors is minimized. Using another dichotomous cutpoint would increase the number of errors.)'), p('The values', span('Se.opt and Sp.opt', style="color:blue"), 'show the optimal sensitivity and the specificity when the test scores are dichotomized using the intersection.', span('Se.MCI and Sp.MCI', style="color:blue"), 'show the sensitivity and specificity of the test scores outside the Uncertain Interval, when used for positive and negative classifications. The latter are always better and only equal in the case of 100% overlap.'), p("A test with only 20% overlap is a relatively strong test, but it still has uncertain test scores that are difficult to interpret: test scores that have about equal probabilities to belong to either the group of patients or the group of non-patients."), tags$li("2. Make the test even stronger by reducing the percentages further. The Uncertain Interval becomes smaller when the test is stronger."), tags$li("3. Move the sliders to values larger than 10%. Observe that the Uncertain Interval grows when the test has more overlap and becomes weaker. Please note that the uncertain interval grows larger and larger when the test has too much overlap and is therefore of low quality. Using a weak test with a large uncertain interval is not very useful."), tags$li("4. Move the sliders to 46. Please note that the reached values for Se.UI and Sp.UI (explained below) are now lower than the set value of .55. The values shown for ", span('Sp.UI and Se.UI are the values actually reached', style="color:blue"), "for the test scores within the Uncertain Interval, not the allowed uncertainty that has been set. Also note that the simulated test shows almost complete overlap for the scores of patients and non-patients. This simulated test is weak and in fact useless.") ), p("Please note that the values for Se.MCI and Sp.MCI are always larger than Se.opt and Sp.opt. The meaning of this is that the Sensitivy and Specificity improves for the patients with a test score outside the Uncertain Interval, that is, the patients who actually receive a positive or negative classification."), p("Also note that the uncertain interval is always centered around the point of intersection, where the two distributions have equal densities. The point of intersection is also the optimal dichotomous cutpoint where the sum of Se + Sp is maximized and therefore the sum of dischotomous classification errors (1 - Se + 1 - Sp) would be minimized. "), p('In the examples above, both distributions keep a standard deviation of 1. Remove the check from the checkbox to disconnect the two sliders. Set the percentage of non-patients to 6 and the percentage of patients to 26. The obtained distributions are now N(0, 1) and N(3.31, 2.72). Observe that the Uncertain Interval remains centered around the point of intersection.'), tags$ul( tags$li("5. When the test scores have different standard deviations for patients and non-patients, the Uncertain Interval still indicates the test scores that insufficiently distinguish the two groups. Earlier, this has been shown in simulation studies as well with real data (Landsheer, 2016, 2018, 2020). Please note the possibility of a secondary point of intersection when the standard deviations for the two groups deviate. For a test this is always undesirable, as the test scores become inconsistent in their meaning for classification."), p('Please note that the values shown for ', span('Sp.UI and Se.UI are the values actually reached', style="color:blue"), 'for the test scores within the Uncertain Interval, not the allowed uncertainty that has been set.', 'When the test score variance differ for both groups, the sum of Se.MCI and Sp.MCI is always greater than the sum of Se.opt and Sp.opt; for weak tests they can be equal. N.B. Sp.MCI and Se.MCI are calculated in the same way as Sp.VR and Se.VR for for the Virtual range of TG-ROC.')) ), tabPanel("Control panel", h2('Using the dash board'), p('The grey panel offers a dash board where the user can simulate many different tests with bi-normal distributions. The tests differ in quality by their overlap of the scores for the two groups. The overlap is chosen with two sliders: The upper slider sets the percentage of patients with test scores above the point of intersection (blue dotted line in the left graph), indicating the amount of False Negatives when the optimal dichotoumous cut-point would be used. The lower slider sets the percentage of patients which are known to not have the disease and who have test scores below the point of intersection, indicating the amount of False Negatives for the dichotomous optimal cutpoint.'), p('The true presence or absence of the disease is known and is determined with superior means, called a "gold standard".'), p('A checkbox allows the combinations of the two sliders. When the two sliders are combined, the variance remains equal for the two distributions. Unchecking makes it possible to use the two sliders seperately, allowing the two distributions to have different variance.'), p('In this application to demonstrate the working of the binormal uncertain interval method, the criterion for uncertainty of the test scores can be set to .55 or .60. The Uncertain Interval is always placed around the point of intersection, which is also the optimal dichotomous threshold where the Youden Index (Youden, 1950) or sum of Sensitivity and Specificity is maximized. The iterative method defines in each iteration two borders where the Sensitivity and Specificity of the test scores within these borders', span("(Sp.UI and Se.UI)", style="color:blue"), 'are equal or lower than the citerion that is chosen (for instance, .55). The point of intersection is used as the dichotomous threshold within this Uncertain Interval. The iterative uncertain interval method stops when the criterion is reached. The borders of the Uncertain Interval are therefore always to the left and right of the point of intersection.'), p('Consequently, the Sensitivity and Specificity of the Uncertain Interval are directly connected to the optimal Sensitivity and Specificity:'), p(span("Se.opt = p * Se.UI + (1 - p) * Se.MCI", style="color:blue"), ', and'), p(span("Sp.opt = q * Sp.UI + (1 - q) * Sp.MCI", style="color:blue"), ', where p and q are respectively the proportion of true patients and non-patients within the Uncertain Interval. The values', span('Se.opt and Sp.opt', style="color:blue"), 'show the optimal sensitivity and the specificity when the test scores are dichotomized using the intersection.', span('Se.MCI and Sp.MCI', style="color:blue"), 'show the sensitivity and specificity of the test scores outside the Uncertain Interval, when these test scores are used for positive and negative classifications. '), p("The total overlap between the two distributions defines directly the strength of the simulated test. The overlap is here defined as the sum of the two percentages set by the sliders. In this way, a large amount of bi-normal tests of varying strenths can be simulated. The strength of the test is directly determined by the overlap of the distributions of test scores: a test is stronger when the overlap is smaller. "), ), tabPanel("Background", h2("Background Information"), p('A test, intended for comfirming the presence or absence of a disease, can be evaluated using two groups: a group of true patients who have the disease and a group of patients who truly do not have the disease (shortly called non-patients). The plot shows the two simulated densities of the the test scores of the two groups. Higher test scores indicate the presence of the disease. The ', span('ui.binormal method from the R-package UncertainInterval', style="color:blue"), 'determines iteratively the borders of the Uncertain Interval (UI) for these test scores. It is assumed that the test scores are normally distributed. When this assumption cannot be made, other methods from the UncertainInterval package may be more suitable. This UI indcates a range of test scores that cannot sufficiently distinguish the two groups of patients. '), h2('Test score Densities'), p("The distributions shown in the plot show the densities of the obtained simulated test scores, which are assumed to be normal distributed. The test scores of the non-patients are standard normal distributed, with mean of 0 and standard deviation of 1: N(0, 1). The distribution of the true patients can vary widely. For a given test score, the difference of the two densities indicates from which of the two groups of patients the test score is most likely drawn. When the sliders are combined, both simualted distributions have a standard deviation of 1 and only the means differs. The application starts with a distribution of test scores with a mean of 2.07 and a standard deviation of 1 (N(2.07, 1))."), h2('Using Densities'), p('In the Uncertain Interval method, densities or relative frequencies are used for the determination whether a testcore (or a small range of test scores) is sampled from the group of patients or from the group of non-patients. Uncertain Interval method are intended for classification of a patient, of whom it is suspected that he or she may have the targeted disease. The pretest probability is set to .50. In other words, before testing it is considered equally likely that the patient may or may not have the disease. The method is therefore not fit for estimation of the probability that a person drawn from the general population has a particular disease. For most diseases the prevalence of the disease in the general propulation is much smaller than .5.'), h2("Trichotomization versus dichotomization"), p("The classic techniques for evaluating tests for medical decision make use of dichotomization of the test scores. Implicitely, all test scores are considered as equally valid, and all test scores are used for a positive or negative classification. The R package UncertainInterval covers several trichotomization methods, that try to identify test scores that are insufficiently valid and are better not used for classification. The idea behind these trichotomization methods is that patients are better served when these invalid test scores are not used for a positive or negative classification. These patients are better off with retesting, if possible with a better test, or awaiting further developments. In some medical fields the uncertainty of a diagnostic outcome is followed up by techniques such as watchful waiting and active surveillance. These more cautious approaches are especially relevant when possible treatments can have serious side effects."), ), tabPanel("Conclusion and References", h2('In conclusion'), p('The largest advantage of using the Uncertain Interval methods is the identification of patients with uncertain, inconclusive test scores. This allows for following a more cautious path for these patients. Furthermore, the simulations show that the Uncertain Interval method for bi-normal data almost always offer a better positive or negative classification of patients, with a higher sensitivity, respectively specificity, when solely the test scores outside the Uncertain Interval are used. When compared to using all test scores using the optimal dichotomous cut-point (intersection or Youden threshold). In Landsheer (2016, 2018, 2020) it has been shown that the Uncertain Interval contain a relative large part of all classification errors and removing these test scores from classification prevents a considerable amount of errors when compared with applying the dichotomous optimal cut-point (Youden, 1950). Further it may be noted that the Uncertain Interval methods have none of the inconsistencies that plague the TG-ROC method. '), h2('References'), p('Landsheer, J. A. (2016). Interval of uncertainty: an alternative approach for the determination of decision thresholds, with an illustrative application for the prediction of prostate cancer. PloS one, 11(11), e0166007.', tags$a(href="https://doi.org/10.1371/journal.pone.0166007", "https://doi.org/10.1371/journal.pone.0166007")), p('Landsheer, J. A. (2018). The clinical relevance of methods for handling inconclusive medical test results: quantification of uncertainty in medical decision-making and screening. Diagnostics, 8(2), 32.', tags$a(href="https://doi.org/10.3390/diagnostics8020032", "https://doi.org/10.3390/diagnostics8020032")), p('Landsheer, J. A. (2020). Impact of the Prevalence of Cognitive Impairment on the Accuracy of the Montreal Cognitive Assessment: The Advantage of Using two MoCA Thresholds to Identify Error-prone Test Scores. Alzheimer Disease & Associated Disorders.', tags$a(href="https://dx.doi.org/10.1097/WAD.0000000000000365", "https://dx.doi.org/10.1097/WAD.0000000000000365")), p('Landsheer J. A. (2020). CRAN - Package UncertainInterval 0.6.0.', tags$a(href=" https://CRAN.R-project.org/package=UncertainInterval", " https://CRAN.R-project.org/package=UncertainInterval")), p('Youden, W. J. (1950). Index for rating diagnostic tests. Cancer, 3(1), 32–35.', tags$a(href="https://doi.org/10.1002/1097-0142(1950)3:1<32::AID-CNCR2820030106>3.0.CO;2-3", "https://doi.org/10.1002/1097-0142(1950)3:1<32::AID-CNCR2820030106>3.0.CO;2-3")), ) ) ) ))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.