Type: Package
Title: An R Package for the Mean Measure of Divergence (MMD)
Description: Offers a graphical user interface for the calculation of the mean measure of divergence, with facilities for trait selection and graphical representations <doi:10.1002/ajpa.23336>.
Version: 4.0.3
Depends: R (≥ 4.1.0)
Imports: dplyr, MASS, plotrix, rlang, scatterplot3d, shiny, smacof
Suggests: cluster, covr, knitr, rmarkdown, testthat (≥ 2.1.0)
License: CeCILL-2 | file LICENSE
Encoding: UTF-8
URL: https://gitlab.com/f-santos/anthropmmd/
VignetteBuilder: knitr
NeedsCompilation: no
Packaged: 2023-11-29 09:28:21 UTC; fsantos
Author: Frédéric Santos ORCID iD [aut, cre]
Maintainer: Frédéric Santos <frederic.santos@u-bordeaux.fr>
Repository: CRAN
Date/Publication: 2023-11-29 10:40:02 UTC

An R package for the Mean Measure of Divergence (MMD)

Description

Offers a graphical user interface for the calculation of the mean measure of divergence, with facilities for trait selection and graphical representations.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

References

Harris, E. F. and Sjøvold, T. (2004) Calculation of Smith's mean measure of divergence for intergroup comparisons using nonmetric data. Dental Anthropology, 17(3), 83–93.

Irish, J. (2010) The mean measure of divergence: Its utility in model-free and model-bound analyses relative to the Mahalanobis D2 distance for nonmetric traits. American Journal of Human Biology, 22, 378–395. doi: 10.1002/ajhb.21010

Nikita, E. (2015) A critical review of the mean measure of divergence and Mahalanobis distances using artificial data and new approaches to the estimation of biodistances employing nonmetric traits. American Journal of Physical Anthropology, 157, 284–294. doi: 10.1002/ajpa.22708

Santos, F. (2018) AnthropMMD: an R package with a graphical user interface for the mean measure of divergence. American Journal of Physical Anthropology, 165(1), 200–205. doi: 10.1002/ajpa.23336

Fidalgo, D., Hubbe, M. and Wesolowski, V. (2021) Population History of Brazilian South and Southeast Shellmound Builders Inferred through Dental Morphology. American Journal of Physical Anthropology, 176(2), 192–207. doi: 10.1002/ajpa.24342

Examples

## Not run:  start_mmd() 

A toy example dataset for mean measures of divergence, in a table format

Description

This artifical dataset includes 200 individuals described by 9 binary traits and splitted into 5 groups. To fit with commonly observed datasets in past sciences, a substantial amount of missing values have been added at random on this dataset.

Usage

data(absolute_freqs)

Format

A matrix with 10 rows and 9 columns:

Trait1

summary statistics for this trait

Trait2

summary statistics for this trait

Trait3

summary statistics for this trait

Trait4

summary statistics for this trait

Trait5

summary statistics for this trait

Trait6

summary statistics for this trait

Trait7

summary statistics for this trait

Trait8

summary statistics for this trait

Trait9

summary statistics for this trait


Converts a data frame of binary (i.e., presence/absence) trait information into a table of sample sizes and frequencies.

Description

This function allows to get a summary of sample sizes and frequencies for each trait in each group. It is also mandatory to apply this function before using the mmd function, since the latter only accepts table of frequencies, and cannot work with raw binary data.

Usage

binary_to_table(data, relative = FALSE)

Arguments

data

A binary (0/1 for presence/absence of traits) data frame with n rows (one per individual) and p+1 columns (one for each of the p traits, plus one column provided as a group indicator).

relative

Boolean. Indicates if the last rows of the table must contain frequencies (i.e., number of individuals having a given trait) or relative frequencies (i.e., proportions).

Value

A matrix with 2*K rows (K being the number of groups in the dataset) and p columns (one per trait). The first K rows are the sample sizes, the last K rows are trait frequencies.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

References

Santos, F. (2018) AnthropMMD: an R package with a graphical user interface for the mean measure of divergence. American Journal of Physical Anthropology, 165(1), 200–205. doi: 10.1002/ajpa.23336

See Also

start_mmd

Examples

## Load and visualize a binary dataset:
data(toyMMD)
head(toyMMD)

## Convert this dataframe into a table of sample sizes and relative frequencies:
binary_to_table(toyMMD, relative = TRUE)

Compute MMD values from a table of sample sizes and relative frequencies

Description

Compute various MMD results, typically using a table returned by the function binary_to_table with the argument relative = TRUE.

Usage

mmd(data, angular = c("Anscombe", "Freeman"), correct = TRUE,
    all.results = TRUE)

Arguments

data

A table of sample sizes and frequencies

angular

Choice of a formula for angular transformation: either Anscombe or Freeman-Tukey transformation.

correct

Boolean; whether to apply the correction for small sample sizes (should be TRUE for most use cases).

all.results

Boolean; whether to compute all four matrices described below as results. If FALSE, only the matrix MMDMatrix is computed. (This argument should be TRUE for most use cases).

Value

A list with four components:

MMDMatrix

Following the presentation adopted in many research articles, a matrix filled with MMD values above the diagonal, and standard deviations of MMD below the diagonal.

MMDSym

A symmetrical matrix of MMD values, where negative values are replaced by zeroes.

MMDSignif

A matrix where any pair of traits having a significant MMD value is indicated by a star, ‘*’.

MMDpval

A matrix filled with MMD values above the diagonal, and p-values below the diagonal.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

References

de Souza, P. and Houghton, P. (1977). The mean measure of divergence and the use of non-metric data in the estimation of biological distances. Journal of Archaeological Science, 4(2), 163–169. doi: 10.1016/0305-4403(77)90063-2

Harris, E. F. and Sjøvold, T. (2004) Calculation of Smith's mean measure of divergence for intergroup comparisons using nonmetric data. Dental Anthropology, 17(3), 83–93.

Nikita, E. (2015) A critical review of the mean measure of divergence and Mahalanobis distances using artificial data and new approaches to the estimation of biodistances employing nonmetric traits. American Journal of Physical Anthropology, 157, 284–294. doi: 10.1002/ajpa.22708

See Also

start_mmd

Examples

## Load and visualize a binary dataset:
data(toyMMD)
head(toyMMD)

## Convert this dataframe into a table of sample sizes and relative
## frequencies:
tab <- binary_to_table(toyMMD, relative = TRUE)
tab

## Compute and display a symmetrical matrix of MMD values:
mmd_out <- mmd(tab, angular = "Anscombe")
mmd_out$MMDSym

## Significant MMD values are indicated by a star:
mmd_out$MMDSignif

Implementation of Fidalgo et al.'s (2022) method of bootstrap for the Mean Measure of Divergence

Description

Compute a matrix of MMD dissimilarities among bootstrapped samples of the original groups. The input data must be a “raw binary dataset”.

Usage

mmd_boot(data, angular = c("Anscombe", "Freeman"), B = 100, ...)

Arguments

data

A “raw binary dataset”, as defined in the man page of start_mmd.

angular

Choice of a formula for angular transformation: either Anscombe or Freeman-Tukey transformation.

B

Numeric value: number of bootstrap samples.

...

Arguments for traits selection, passed to select_traits.

Details

This function sticks very close to Fidalgo et al's (2022) implementation. In particular, no correction for small sample sizes is applied in the MMD formula; see Fidalgo et al's (2021) for the rationale.

Note that only a “raw binary dataset” is allowed as input, since the resampling cannot be performed properly from a table of counts and frequencies.

To get a MDS plot of the dissimilarity matrix obtained with this function, see plot.anthropmmd_boot.

Value

A symmetrical dissimilarity matrix of MMD values among original groups and bootstrapped samples. This matrix is an R object of class anthropmmd_boot.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

References

D. Fidalgo, M. Hubbe and V. Vesolowski (2021). Population history of Brazilian south and southeast shellmound builders inferred through dental morphology. American Journal of Physical Anthropology 176(2), 192-207.

D. Fidalgo, V. Vesolowski and M. Hubbe (2022). Biological affinities of Brazilian pre-colonial coastal communities explored through boostrapped biodistances of dental non-metric traits. Journal of Archaeological Science 138, 105545.

See Also

plot.anthropmmd_boot

Examples

## Not run: 
## Load and visualize a raw binary dataset:
data(toyMMD)
head(toyMMD)
## Compute MMD among bootstrapped samples:
resboot <- mmd_boot(
    data = toyMMD,
    B = 50, # number of bootstrap samples
    angular = "Anscombe",
    strategy = "excludeQNPT", # strategy for trait selection
    k = 10 # minimal number of observations required per trait
)
## View part of MMD matrix among bootstrapped samples:
dim(resboot)
print(resboot[1:15, 1:15])

## End(Not run)

Display a multidimensional scaling (MDS) plot using Fidalgo et al's (2022) bootstrap method for MMD

Description

This function plots a 2D MDS to represent the MMD dissimilarities among the groups compared, after a bootstrap resampling performed with mmd_boot.

Usage

## S3 method for class 'anthropmmd_boot'
plot(x, method = c("classical", "interval", "ratio", "ordinal"),
    level = 0.95, pch = 16, gof = FALSE, xlab = NA, ylab = NA,
    main = "MDS plot of original and bootstrapped samples", ...)

Arguments

x

An object of class anthropmmd_boot, produced by the function mmd_boot.

.

method

Algorithm used for MDS computation; see plot.anthropmmd_result.

level

Numeric value between 0 and 1, confidence level for the contour lines displayed after the kernel density estimate.

pch

Passed to plot.

gof

Boolean; whether to display goodness of fit statistic on the plot.

xlab

Passed to plot.

ylab

Passed to plot.

main

Passed to plot.

...

Other arguments possibly passed to plot.

Details

In the current implementation, to stick to Fidalgo et al.'s (2022) protocol, this function does not provide as much freedom as plot.anthropmmd_result as concenrs MDS parameters and other analysis options.

Value

This function returns no value by itself, and only plots a MDS in a new device.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

References

D. Fidalgo, V. Vesolowski and M. Hubbe (2022). Biological affinities of Brazilian pre-colonial coastal communities explored through boostrapped biodistances of dental non-metric traits. Journal of Archaeological Science 138, 105545.

See Also

start_mmd, stats::cmdscale

Examples

## Not run: 
## Load and visualize a raw binary dataset:
data(toyMMD)
head(toyMMD)
## Compute MMD among bootstrapped samples:
resboot <- mmd_boot(
    data = toyMMD,
    B = 50, # number of bootstrap samples
    angular = "Anscombe",
    strategy = "excludeQNPT", # strategy for trait selection
    k = 10 # minimal number of observations required per trait
)
## MDS plot for bootstrapped samples:
plot(
    x = resboot,
    method = "interval", # algorithm used for MDS computation
    level = 0.95 # confidence level for the contour lines
)

## End(Not run)

Display a multidimensional scaling (MDS) plot with the MMD dissimilarities as input

Description

This function plots a 2D or 3D MDS to represent the MMD dissimilarities among the groups compared. Various MDS methods are proposed, and most of them are based on the R package smacof.

Usage

## S3 method for class 'anthropmmd_result'
plot(x, method = c("classical", "interval", "ratio", "ordinal"),
axes = FALSE, gof = FALSE, dim = 2, asp = TRUE, xlim = NULL, ...)

Arguments

x

An object of class anthropmmd_result, produced by the function mmd.

.

method

Specification of MDS type. classical uses the metric MDS implemented in stats::cmdscale; the three other values are passed to the R function smacof::smacofSym (see its help page for more details).

axes

Boolean: should the axes be displayed on the plot?

gof

Boolean: should goodness of fit statistics be displayed on the topleft corner of the plot? More details below.

dim

Numeric value, 2 or 3. Indicates the maximal dimension desired for the MDS plot. It should be noted that, even with dim = 3, the final solution may include only two axes.

asp

Boolean. If TRUE, the same scale is used for all axes. More details below.

xlim

Parameter passed to plot, can be NULL.

...

Other arguments possibly passed to plot.

Details

Value

This function returns no value by itself, and only plots a MDS in a new device.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

References

G. Dzemyda, O. Kurasova and J. Zilinskas (2013) Multidimensional Data Visualization, Springer, chap. 2, p. 39–40.

I. Borg, P. Groenen and P. Mair (2013) Applied Multidimensional Scaling, Springer, chap. 7, p. 79.

See Also

start_mmd, stats::cmdscale, smacof::smacofSym

Examples

## Load and visualize a binary dataset:
data(toyMMD)
head(toyMMD)

## Convert this dataframe into a table of sample sizes and relative
## frequencies:
tab <- binary_to_table(toyMMD, relative = TRUE)
tab

## Compute and display a symmetrical matrix of MMD values:
mmd_out <- mmd(tab, angular = "Freeman")

## Plot a classical metric MDS in two dimensions:
plot(x = mmd_out, method = "classical",
     axes = TRUE, gof = TRUE, dim = 2)

Select a subset of traits meeting certain criteria

Description

This function provides several strategies to discard some useless traits (non-polymorphic, non-discriminatory, etc.) upstream the MMD analysis.

Usage

select_traits(tab, k = 10, strategy = c("none", "excludeNPT",
"excludeQNPT", "excludeNOMD", "keepFisher"), OMDvalue = NULL, groups,
angular = c("Anscombe", "Freeman"))

Arguments

tab

A table of sample sizes and frequencies, typically returned by the function binary_to_table with the argument relative = TRUE.

k

Numeric value: the required minimal number of individuals per group. Any trait that could be taken on fewer individuals in at least one group will be removed from the dataset. This allows to select only the traits with a sufficient amount of information in each group.

strategy

Strategy for trait selection, i.e. for the removal of non-polymorphic traits. The four options are fully described in Santos (2018) and in the help page of StartMMD.

OMDvalue

To be specified if and only if strategy = "excludeNOMD". Set the desired threshold for the “overall measure of divergence” that must be reached for a trait to be kept.

groups

A factor or character vector, indicating the group to be considered in the analysis. Since some groups can have a very low sample size, this will allow to discard those groups in order to facilitate the trait selection via the argument k. (Otherwise, almost all traits would be removed.)

angular

Formula for angular transformation, see Harris and Sjøvold (2004). Useful only for the calculation of overall measure of divergence.

Value

A list with two components:

filtered

The dataset filtered according to the user-defined criteria.

OMD

The “overall measure of divergence” for each trait.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

References

Harris, E. F. and Sjøvold, T. (2004) Calculation of Smith's mean measure of divergence for intergroup comparisons using nonmetric data. Dental Anthropology, 17(3), 83–93.

Santos, F. (2018) AnthropMMD: an R package with a graphical user interface for the mean measure of divergence. American Journal of Physical Anthropology, 165(1), 200–205. doi: 10.1002/ajpa.23336

See Also

start_mmd

Examples

## Load and visualize a binary dataset:
data(toyMMD)
head(toyMMD)

## Convert this dataframe into a table of sample sizes and
## relative frequencies:
tab <- binary_to_table(toyMMD, relative = TRUE)
tab

## Filter this dataset to keep only those traits that have at
## least k=10 individuals in each group:
select_traits(tab, k = 10)
## Only Trait1 is excluded.

## Filter this dataset to keep only those traits that have at
## least k=11 individuals in each group, and show significant
## differences at Fisher's exact test:
select_traits(tab, k = 11, strategy = "keepFisher")
## Traits 1, 5 and 8 are excluded.

An R-Shiny application for the mean measure of divergence

Description

Launches a graphical user interface (GUI) for the calculation of the mean measure of divergence.

Usage

start_mmd()
StartMMD()

Details

The GUI of AnthropMMD is completely autonomous: reading the data file and specifying the parameters of the analysis are done through the interface. Once the dataset is loaded, the output reacts dynamically to any change in the analysis settings.

Value

The function returns no value by itself, but all results can be individually downloaded through the graphical interface.

Note

The R console is not available when the GUI is active. To exit the GUI, type Echap (on MS Windows systems) or Ctrl+C (on Linux systems) in the R console.

On 14-inch (or smaller) screens, for convenience, it may be necessary to decrease the zoom level of your web browser and/or to turn on fullscreen mode.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

References

Harris, E. F. and Sjøvold, T. (2004) Calculation of Smith's mean measure of divergence for intergroup comparisons using nonmetric data. Dental Anthropology, 17(3), 83–93.

Irish, J. (2010) The mean measure of divergence: Its utility in model-free and model-bound analyses relative to the Mahalanobis D2 distance for nonmetric traits. American Journal of Human Biology, 22, 378–395. doi: 10.1002/ajhb.21010

Nikita, E. (2015) A critical review of the mean measure of divergence and Mahalanobis distances using artificial data and new approaches to the estimation of biodistances employing nonmetric traits. American Journal of Physical Anthropology, 157, 284–294. doi: 10.1002/ajpa.22708

Santos, F. (2018) AnthropMMD: an R package with a graphical user interface for the mean measure of divergence. American Journal of Physical Anthropology, 165(1), 200–205. doi: 10.1002/ajpa.23336

Examples

## An example of valid binary dataset:
data(toyMMD)
head(toyMMD)

## An example of valid table:
data(absolute_freqs)
absolute_freqs

## Launch the GUI:
## Not run:  start_mmd()

Converts a table of sample sizes and frequencies into a table of sample sizes and relative frequencies.

Description

Mostly used as an internal function, but could also be convenient to transform frequencies (i.e., number of individuals having a given trait) into relative frequencies (i.e., proportions).

Usage

table_relfreq(tab)

Arguments

tab

A table of sample sizes and frequencies, such as the tables returned by the function binary_to_table.

Value

The last K rows (K being the number of groups) of tab are simply transformed to relative frequencies.

Author(s)

Frédéric Santos, frederic.santos@u-bordeaux.fr

See Also

binary_to_table, start_mmd

Examples

## Load and visualize a binary dataset:
data(toyMMD)
head(toyMMD)

## Convert this dataframe into a table of sample sizes and frequencies:
tab <- binary_to_table(toyMMD, relative = FALSE)
tab

## Convert this table into relative frequencies:
table_relfreq(tab)

A toy example dataset for mean measures of divergence, in a binary format

Description

This artifical dataset includes 200 individuals described by 9 binary traits and splitted into 5 groups. To fit with commonly observed datasets in past sciences, a substantial amount of missing values have been added at random on this dataset.

Usage

data(toyMMD)

Format

A data frame with 200 observations on the following 10 variables:

Group

a factor with 5 levels (group indicator)

Trait1

a numeric vector of zeroes and ones

Trait2

a numeric vector of zeroes and ones

Trait3

a numeric vector of zeroes and ones

Trait4

a numeric vector of zeroes and ones

Trait5

a numeric vector of zeroes and ones

Trait6

a numeric vector of zeroes and ones

Trait7

a numeric vector of zeroes and ones

Trait8

a numeric vector of zeroes and ones

Trait9

a numeric vector of zeroes and ones