somers_d() computes Somers' D for a two-way contingency
table of ordinal variables.
Usage
somers_d(
x,
direction = c("row", "column", "symmetric"),
detail = FALSE,
conf_level = 0.95,
digits = 3L,
.include_se = FALSE
)Arguments
- x
A contingency table (of class
table).- direction
Direction of prediction:
"row"(default, column predicts row),"column"(row predicts column), or"symmetric"(average of both directions).- detail
Logical. If
FALSE(default), return the estimate as a numeric scalar. IfTRUE, return a named numeric vector including confidence interval and p-value.- conf_level
A number between 0 and 1 giving the confidence level (default
0.95). Only used whendetail = TRUE. Set toNULLto omit the confidence interval.- digits
Number of decimal places used when printing the result (default
3). Only affects thedetail = TRUEoutput.- .include_se
Internal parameter; do not use.
Value
Same structure as cramer_v(): a scalar when
detail = FALSE, a named vector when detail = TRUE.
The p-value tests H0: D = 0 (Wald z-test).
Details
Somers' D is an asymmetric ordinal measure defined as
\(d = (C - D) / (C + D + T)\), where \(T\) is the
number of pairs tied on the independent variable.
The symmetric version is the harmonic mean of the two
asymmetric values.
Standard error formulas follow the DescTools implementations
(Signorell et al., 2024); see cramer_v() for full references.
Examples
tab <- table(sochealth$education, sochealth$self_rated_health)
somers_d(tab, direction = "row")
#> [1] 0.2015369
somers_d(tab, direction = "column", detail = TRUE)
#> Estimate CI lower CI upper p
#> 0.208 0.157 0.258 < 0.001
