## S3 method for class 'factor'
dor(actual, predicted, ...)
## S3 method for class 'factor'
weighted.dor(actual, predicted, w, ...)
## S3 method for class 'cmatrix'
dor(x, ...)
dor(...)
weighted.dor(...)
diagnostic odds ratio
dor.factor | R Documentation |
Description
The dor()
-function computes the Diagnostic Odds Ratio (DOR), a single indicator of test performance, between two vectors of predicted and observed factor()
values. The weighted.dor()
function computes the weighted diagnostic odds ratio.
When aggregate = TRUE
, the function returns the micro-average DOR across all classes \(k\). By default, it returns the class-wise DOR.
Usage
Arguments
actual
|
A vector of |
predicted
|
A vector of |
…
|
Arguments passed into other methods |
w
|
A |
x
|
A confusion matrix created |
Value
If micro
is NULL (the default), a named <numeric>
-vector of length k
If micro
is TRUE or FALSE, a <numeric>
-vector of length 1
Calculation
The metric is calculated for each class \(k\) as follows,
\[ \text{DOR}_k = \frac{\text{PLR}_k}{\text{NLR}_k} \]
Where \(\text{PLR}_k\) and \(\text{NLR}_k\) is the positive and negative likelihood ratio for class \(k\), respectively. See plr()
and nlr()
for more details.
When aggregate = TRUE
, the micro
-average is calculated as,
\[ \overline{\text{DOR}} = \frac{\overline{\text{PLR}_k}}{\overline{\text{NLR}_k}} \]
Where \(\overline{\text{PLR}}\) and \(\overline{\text{NLR}}\) is the micro-averaged is the positive and negative likelihood ratio, respectively.
Examples
# 1) recode Iris
# to binary classification
# problem
$species_num <- as.numeric(
iris$Species == "virginica"
iris
)
# 2) fit the logistic
# regression
<- glm(
model formula = species_num ~ Sepal.Length + Sepal.Width,
data = iris,
family = binomial(
link = "logit"
)
)
# 3) generate predicted
# classes
<- factor(
predicted as.numeric(
predict(model, type = "response") >` 0.5
),
levels = c(1,0),
labels = c("Virginica", "Others")
)
# 3.1) generate actual
# classes
actual <- factor(
x = iris$species_num,
levels = c(1,0),
labels = c("Virginica", "Others")
)
# 4) evaluate model performance
# with Diagnostic Odds Ratio
cat("Diagnostic Odds Ratio", sep = "\n")
dor(
actual = actual,
predicted = predicted
)
cat("Diagnostic Odds Ratio (weighted)", sep = "\n")
weighted.dor(
actual = actual,
predicted = predicted,
w = iris$Petal.Length/mean(iris$Petal.Length)
)