Type: Package
Title: Calculates Conditional Mahalanobis Distances
Version: 0.1.4
Description: Calculates a Mahalanobis distance for every row of a set of outcome variables (Mahalanobis, 1936 <doi:10.1007/s13171-019-00164-5>). The conditional Mahalanobis distance is calculated using a conditional covariance matrix (i.e., a covariance matrix of the outcome variables after controlling for a set of predictors). Plotting the output of the cond_maha() function can help identify which elements of a profile are unusual after controlling for the predictors.
License: GPL (≥ 3)
URL: https://github.com/wjschne/unusualprofile, https://wjschne.github.io/unusualprofile/
BugReports: https://github.com/wjschne/unusualprofile/issues
Depends: R (≥ 3.1)
Imports: dplyr, ggnormalviolin, ggplot2, magrittr, purrr, rlang, stats, tibble, tidyr
Suggests: bookdown, covr, extrafont, forcats, glue, kableExtra, knitr, lavaan, lifecycle, mvtnorm, patchwork, ragg, rmarkdown, roxygen2, scales, simstandard (≥ 0.6.3), stringr, sysfonts, testthat
VignetteBuilder: knitr
Encoding: UTF-8
Language: en-US
LazyData: TRUE
RoxygenNote: 7.3.1
NeedsCompilation: no
Packaged: 2024-02-14 20:09:54 UTC; renee
Author: W. Joel Schneider ORCID iD [aut, cre], Feng Ji [aut]
Maintainer: W. Joel Schneider <w.joel.schneider@gmail.com>
Repository: CRAN
Date/Publication: 2024-02-14 23:20:03 UTC

unusualprofile: Calculates Conditional Mahalanobis Distances

Description

logo

Calculates a Mahalanobis distance for every row of a set of outcome variables (Mahalanobis, 1936 doi:10.1007/s13171-019-00164-5). The conditional Mahalanobis distance is calculated using a conditional covariance matrix (i.e., a covariance matrix of the outcome variables after controlling for a set of predictors). Plotting the output of the cond_maha() function can help identify which elements of a profile are unusual after controlling for the predictors.

Author(s)

Maintainer: W. Joel Schneider w.joel.schneider@gmail.com (ORCID)

Authors:

See Also

Useful links:


An example correlation matrix

Description

A correlation matrix used for demonstration purposes It is the model-implied correlation matrix for this structural model: X =~ 0.7 * X_1 + 0.5 * X_2 + 0.8 * X_3 Y =~ 0.8 * Y_1 + 0.7 * Y_2 + 0.9 * Y_3 Y ~ 0.6 * X

Usage

R_example

Format

A matrix with 8 rows and 8 columns:

X_1

A predictor variable

X_2

A predictor variable

X_3

A predictor variable

Y_1

An outcome variable

Y_2

An outcome variable

Y_3

An outcome variable

X

A latent predictor variable

Y

A latent outcome variable


Calculate the conditional Mahalanobis distance for any variables.

Description

Calculate the conditional Mahalanobis distance for any variables.

Usage

cond_maha(
  data,
  R,
  v_dep,
  v_ind = NULL,
  v_ind_composites = NULL,
  mu = 0,
  sigma = 1,
  use_sample_stats = FALSE,
  label = NA
)

Arguments

data

Data.frame with the independent and dependent variables. Unless mu and sigma are specified, data are assumed to be z-scores.

R

Correlation among all variables.

v_dep

Vector of names of the dependent variables in your profile.

v_ind

Vector of names of independent variables you would like to control for.

v_ind_composites

Vector of names of independent variables that are composites of dependent variables

mu

A vector of means. A single value means that all variables have the same mean.

sigma

A vector of standard deviations. A single value means that all variables have the same standard deviation

use_sample_stats

If TRUE, estimate R, mu, and sigma from data. Only complete cases are used (i.e., no missing values in v_dep, v_ind, v_ind_composites).

label

optional tag for labeling output

Value

a list with the conditional Mahalanobis distance

Examples

library(unusualprofile)
library(simstandard)

m <- "
Gc =~ 0.85 * Gc1 + 0.68 * Gc2 + 0.8 * Gc3
Gf =~ 0.8 * Gf1 + 0.9 * Gf2 + 0.8 * Gf3
Gs =~ 0.7 * Gs1 + 0.8 * Gs2 + 0.8 * Gs3
Read =~ 0.66 * Read1 + 0.85 * Read2 + 0.91 * Read3
Math =~ 0.4 * Math1 + 0.9 * Math2 + 0.7 * Math3
Gc ~ 0.6 * Gf + 0.1 * Gs
Gf ~ 0.5 * Gs
Read ~ 0.4 * Gc + 0.1 * Gf
Math ~ 0.2 * Gc + 0.3 * Gf + 0.1 * Gs"
# Generate 10 cases
d_demo <- simstandard::sim_standardized(m = m, n = 10)

# Get model-implied correlation matrix
R_all <- simstandard::sim_standardized_matrices(m)$Correlations$R_all

cond_maha(data = d_demo,
          R = R_all,
          v_dep = c("Math", "Read"),
          v_ind = c("Gf", "Gs", "Gc"))

An example data.frame

Description

A dataset with 1 row of data for a single case.

Usage

d_example

Format

A data frame with 1 row and 8 variables:

X_1

A predictor variable

X_2

A predictor variable

X_3

A predictor variable

Y_1

An outcome variable

Y_2

An outcome variable

Y_3

An outcome variable

X

A latent predictor variable

Y

A latent outcome variable


Test if matrix is singular

Description

Test if matrix is singular

Usage

is_singular(x)

Arguments

x

matrix

Value

logical


Range label associated with probability

Description

Range label associated with probability

Usage

p2label(p)

Arguments

p

Probability

Value

label string


Plot the variables from the results of the cond_maha function.

Description

Plot the variables from the results of the cond_maha function.

Usage

## S3 method for class 'cond_maha'
plot(
  x,
  ...,
  p_tail = 0,
  family = "sans",
  score_digits = ifelse(min(x$sigma) >= 10, 0, 2)
)

Arguments

x

The results of the cond_maha function.

...

Arguments passed to print function

p_tail

The proportion of the tail to shade

family

Font family.

score_digits

Number of digits to round scores.

Value

A ggplot2-object


Plot objects of the maha class (i.e, the results of the cond_maha function using dependent variables only).

Description

Plot objects of the maha class (i.e, the results of the cond_maha function using dependent variables only).

Usage

## S3 method for class 'maha'
plot(
  x,
  ...,
  p_tail = 0,
  family = "sans",
  score_digits = ifelse(min(x$sigma) >= 10, 0, 2)
)

Arguments

x

The results of the cond_maha function.

...

Arguments passed to print function

p_tail

Proportion in violin tail (defaults to 0).

family

Font family.

score_digits

Number of digits to round scores.

Value

A ggplot2-object


Rounds proportions to significant digits both near 0 and 1, then converts to percentiles

Description

Rounds proportions to significant digits both near 0 and 1, then converts to percentiles

Usage

proportion2percentile(
  p,
  digits = 2,
  remove_leading_zero = TRUE,
  add_percent_character = FALSE
)

Arguments

p

probability

digits

rounding digits. Defaults to 2

remove_leading_zero

Remove leading zero for small percentiles, Defaults to TRUE

add_percent_character

Append percent character. Defaults to FALSE

Value

character vector

Examples

proportion2percentile(0.01111)

Rounds proportions to significant digits both near 0 and 1

Description

Rounds proportions to significant digits both near 0 and 1

Usage

proportion_round(p, digits = 2)

Arguments

p

probability

digits

rounding digits

Value

numeric vector

Examples

proportion_round(0.01111)