Using smd

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

The smd package provides the smd method to compute standardized mean differences between two groups for continuous values (numeric and integer data types) and categorical values (factor, character, and logical). The method also works on matrix, list, and data.frame data types by applying smd() over the columns of the matrix or data.frame and each item of the list. The package is based on @yang2012unified.

The smd function computes the standardized mean difference for each level $k$ of a grouping variable compared to a reference $r$ level:

[ d_k = \sqrt{(\bar{x}r - \bar{x}{k})^{\intercal}S_{rk}^{-1}(\bar{x}r - \bar{x}{k})} ]

where $\bar{x}{\cdot}$ and $S{rk}$ are the sample mean and covariances for reference group $r$ and group $k$, respectively. In the case that $x$ is categorical, $\bar{x}$ is the vector of proportions of each category level within a group, and $S_{rk}$ is the multinomial covariance matrix.

Standard errors are computed using the formula described in @hedges1985:

[ \sqrt{ \frac{n_r + n_k}{n_rn_k} + \frac{d_k^2}{2(n_r + n_k)} } ]

Examples

library(smd)

Numeric

set.seed(123)
xn <- rnorm(90)
gg2 <- rep(LETTERS[1:2], each = 45)
gg3 <- rep(LETTERS[1:3], each = 30)

smd(x = xn, g = gg2)
smd(x = xn, g = gg3)
smd(x = xn, g = gg2, std.error = TRUE)
smd(x = xn, g = gg3, std.error = TRUE)

Integers

xi <- sample(1:20, 90, replace = TRUE)
smd(x = xi, g = gg2)

Character

xc <- unlist(replicate(2, sort(sample(letters[1:3], 45, replace = TRUE)), simplify = FALSE))
smd(x = xc, g = gg2)

Factors

xf <- factor(xc)
smd(x = xf, g = gg2)

Logical

xl <- as.logical(rbinom(90, 1, prob = 0.5))
smd(x = xl, g = gg2)

Matrices

mm <- cbind(xl, xl, xl, xl)
smd(x = mm, g = gg3, std.error = FALSE)

Lists

ll <- list(xn = xn, xi = xi, xf = xf, xl = xl)
smd(x = ll, g = gg3)

data.frames

df <- data.frame(xn, xi, xc, xf, xl)
smd(x = df, g = gg3)

Using smd with dplyr

library(dplyr, verbose = FALSE)
df$g <- gg2
df %>%
  summarize_at(
    .vars = vars(dplyr::matches("^x")),
    .funs = list(smd = ~ smd(., g = g)$estimate))

Other packages

See:

References



Try the smd package in your browser

Any scripts or data that you put into this service are public.

smd documentation built on Oct. 23, 2020, 8:26 p.m.