plotMD: Function to plot the mixed densities of distributions of...

Description Usage Arguments Details Value References See Also Examples

View source: R/plotMD.R

Description

This plot function shows the densities of the two distributions and their overlap in a single graph.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
plotMD(
  ref,
  test,
  breaks = 20,
  subtitle = "",
  position.legend = "topright",
  colspace = c("color", "grayscale", "BW"),
  model = c("kernel", "binormal", "ordinal"),
  ...
)

Arguments

ref

The reference standard. A column in a data frame or a vector indicating the classification by the reference test. The reference standard must be coded either as 0 (absence of the condition) or 1 (presence of the condition)

test

The index test or test under evaluation. A column in a dataset or vector indicating the test results in a continuous scale.

breaks

Breaks used to construct the histograms. Either a single integer number or a vector containing the actual breaks. In the case of a vector, the number should cover all available test values. In the case of a single integer number, this number has to be equal or lower than the discernable values in the test. For short ordinal scales a vector should be uses covering all possible test values.

subtitle

Optional subtitle

position.legend

The location can be specified by a single keyword from the list "topright", "topleft", "top", "right", "bottomright", "bottom", "bottomleft", "left" and "center". Default is "top.right".

colspace

Use colors, grayscale or only black and white as plot colors. Default = color.

model

The model used for estimation. Default = 'kernel'. Adapts also breaks and the call to the density function (parameter adjust). When the model is obviously wrong, warnings are produced.

...

passing arguments to the kernel density function, other than kernel='gaussian' (default).

Details

The graph shows the densities of the two distributions and their overlap. Many tests of intermediate quality have a considerable overlap. Also, the distributions as estimated by the density function, using the gaussian kernel is shown. The intersection is indicated by a vertical line. This graph allows the visual inspection of the two distributions, as well a visual inspection of the approximation of the density, based on the gaussian kernel. When the density estimation is way off, the standard estimation of the intersection will be incorrect, and another estimation has to be supplied.

The function plotMD can also be used for visual inspection of the Uncertain Interval (see examples).

Value

No Value returned.

References

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.

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. https://doi.org/10.3390/diagnostics8020032

See Also

barplotMD

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# A test of intermediate quality
set.seed(1)
ref=c(rep(0,500), rep(1,500))
test=c(rnorm(500,0,1), rnorm(500,1,1.2))
plotMD(ref, test)
ua = ui.nonpar(ref, test) # with warning message!
# Add lines to indicate Uncertain Interval
abline(v=ua[1:2])
select=(test <= ua[2] & test >= ua[1])
# plot the mixed densities for the Uncertain Interval
plotMD(ref[select], test[select])
plotMD(ref[select], test[select], colspace='gray')
plotMD(ref[select], test[select], colspace='BW')

# An ordinal test
norm     = rep(1:5, times=c(33,6,6,11,2))
abnorm   = rep(1:5, times=c(3,2,2,11,33))
testres  = c(abnorm,norm)
truestat = c(rep(1,length(abnorm)), rep(0,length(norm)))
plotMD(ref=truestat, test=testres, model='ordinal')

# ordinal test: weak test
set.seed(2)
nobs=1000
Z0 <- rnorm(nobs, mean=0)
b0=seq(-5, 5, length.out=31) # range sufficient to cover both z0 and z1
f0=cut(Z0, breaks = b0, labels = c(1:30))
x0=as.numeric(levels(f0))[f0]
Z1 <- rnorm(nobs, mean=.5) # very weak test, not recommended for practical use
f1=cut(Z1, breaks = b0, labels = c(1:30))
x1=as.numeric(levels(f1))[f1]
test=c(x0, x1)
ref =c(rep(0, length(x0)), rep(1, length(x1)))
(pr=prop.table(table(ref, test)))
breaks=c(min(test)-.5, seq(min(test), max(test), by=1)+.5)
plotMD(ref, test, model='ordinal')
# when model = 'binormal' or 'kernel', default breaks do not work well for
# ordinal data, and have to be set by hand
plotMD(ref, test, breaks=c(min(test)-.5, seq(min(test), max(test), by=1)+.5),
       model='binormal')
plotMD(ref, test, breaks=c(min(test)-.5, seq(min(test), max(test), by=1)+.5),
       model='kernel')

Example output

   test
ref      5      7      8      9     10     11     12     13     14     15
  0 0.0000 0.0015 0.0025 0.0060 0.0120 0.0185 0.0335 0.0450 0.0575 0.0625
  1 0.0005 0.0000 0.0005 0.0020 0.0040 0.0070 0.0175 0.0275 0.0390 0.0500
   test
ref     16     17     18     19     20     21     22     23     24     25
  0 0.0665 0.0555 0.0475 0.0375 0.0225 0.0160 0.0110 0.0020 0.0020 0.0005
  1 0.0595 0.0695 0.0680 0.0525 0.0420 0.0300 0.0140 0.0090 0.0040 0.0020
   test
ref     26     28
  0 0.0000 0.0000
  1 0.0010 0.0005

UncertainInterval documentation built on March 3, 2021, 1:10 a.m.