Learn R Programming

MVN: An R Package for Assessing Multivariate Normality


Overview

MVN is an R package that provides a comprehensive and user-friendly framework for assessing multivariate normality—a key assumption in many multivariate statistical methods such as:

  • MANOVA
  • Linear Discriminant Analysis
  • Principal Component Analysis
  • Canonical Correlation Analysis

Multivariate normality is often overlooked or improperly tested. The MVN package addresses this by integrating robust numerical tests, graphical diagnostics, and transformation tools, offering clear insights into the distributional characteristics of your multivariate data.


Features

  • Multivariate Normality Tests:

    • Mardia's Test
    • Henze-Zirkler’s Test
    • Henze-Wagner’s Test
    • Royston’s Test
    • Doornik-Hansen's Test
    • Energy Test
  • Graphical Diagnostics:

    • Chi-square Q-Q Plots
    • 3D Perspective Plots
    • Contour Plots
  • Multivariate Outlier Detection:

    • Robust Mahalanobis distance-based methods
  • Univariate Normality Checks:

    • Multiple tests and visualizations for marginal distributions
  • Transformations & Imputation

    • Log, square root, and square transformations
    • Optimal Box–Cox and Yeo–Johnson power transformations
    • Missing data handling via mean, median, or MICE imputation
  • Bootstrap Support

    • Optional bootstrap p-values for Mardia, Henze–Zirkler, and Royston tests for improved small-sample inference
  • Descriptive Statistics and Group-Wise Analysis

    • Grouped summaries using the subset argument
    • Integration with tidy data pipelines

Installation

To install the latest version from CRAN:

install.packages("MVN")

To install the development version from GitHub:

devtools::install_github("selcukorkmaz/MVN")

Basic Usage

library(MVN)

# Run MVN tests and diagnostics on iris data
result <- mvn(
  data = iris[1:50, 1:3],
  mvn_test = "hz"
  )

# View results
summary(result, "mvn")

For grouped analysis:

mvn(data = iris, subset = "Species", mvn_test = "hz")

Shiny Web App

Explore MVN’s features via a user-friendly web interface: http://biosoft.erciyes.edu.tr/app/MVN

Documentation and Tutorial

Full documentation and an interactive tutorial site are available at: https://selcukorkmaz.github.io/mvn-tutorial/

Citation

Please cite MVN in your publications using:

Korkmaz S, Goksuluk D, Zararsiz G. MVN: An R Package for Assessing Multivariate Normality. The R Journal. 2014; 6(2):151-162. https://journal.r-project.org/archive/2014-2/korkmaz-goksuluk-zararsiz.pdf

License

MVN is released under the MIT license.

Copy Link

Version

Install

install.packages('MVN')

Monthly Downloads

10,296

Version

6.1

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Selcuk Korkmaz

Last Published

June 10th, 2025

Functions in MVN (6.1)

impute_missing

Impute Missing Values
multivariate_diagnostic_plot

Plot Multivariate Normal Diagnostics and Bivariate Kernel Density
arw_adjustment

Atkinson–Riani–Welsh (ARW) Adjusted Cutoff for Robust Mahalanobis Distances
hz

Henze-Zirkler Test for Multivariate Normality
doornik_hansen

Doornik-Hansen Test for Multivariate Normality
energy

E-Statistic Test for Multivariate Normality (Energy Test)
hw

Henze-Wagner High-Dimensional Test for Multivariate Normality
mv_outlier

Identify Multivariate Outliers via Robust Mahalanobis Distances
mardia

Mardia's Test for Multivariate Normality
descriptives

Descriptive Statistics for Numeric Data
power_transform

Apply Power Transformation to Numeric Data
royston

Royston's Multivariate Normality Test
univariate_diagnostic_plot

Diagnostic Plots for Univariate and Multivariate Data
summary.mvn

Summarize Multivariate Normality Analysis Results
test_univariate_normality

Univariate Normality Tests
plot.mvn

Plot Diagnostics for Multivariate Normality Analysis
mvn

Comprehensive Multivariate Normality and Diagnostic Function