Title: | Euclidean Distance Matrix Analysis in R |
---|---|
Description: | A coordinate-free approach for comparing biological shapes using landmark data based on Lele and Richtsmeier (1991) <doi:10.1002/ajpa.1330860307>. |
Authors: | Peter Solymos [aut, cre] , Subhash R. Lele [aut], Theodore M. Cole [aut], Liangyuan Hu [aut], Joan T. Richtsmeier [aut], Kevin M. Middleton [ctb] |
Maintainer: | Peter Solymos <[email protected]> |
License: | GPL-2 |
Version: | 0.3-0 |
Built: | 2024-12-03 04:42:26 UTC |
Source: | https://github.com/psolymos/EDMAinR |
A coordinate-free approach for comparing biological shapes using landmark data based on Lele and Richtsmeier (1991) <doi:10.1002/ajpa.1330860307>.
EDMA data: read_xyz
Nonparametric fit: edma_fit
Form difference: edma_fdm
Growth and growth difference:
edma_gm
, edma_gdm
Shape difference: edma_sdm
Peter Solymos [aut, cre] (<https://orcid.org/0000-0001-7337-1740>), Subhash R. Lele [aut], Theodore M. Cole [aut], Liangyuan Hu [aut], Joan T. Richtsmeier [aut], Kevin M. Middleton [ctb] (<https://orcid.org/0000-0003-4704-1064>)
Maintainer: Peter Solymos <[email protected]>
Lele, S. R., 1991. Some comments on coordinate-free and scale-invariant methods in morphometrics. American Journal of Physical Anthropology 85:407–417. <doi:10.1002/ajpa.1330850405>
Lele, S. R., and Richtsmeier, J. T., 1991. Euclidean distance matrix analysis: A coordinate-free approach for comparing biological shapes using landmark data. American Journal of Physical Anthropology 86(3):415–27. <doi:10.1002/ajpa.1330860307>
Lele, S. R., and Richtsmeier, J. T., 1992. On comparing biological shapes: detection of influential landmarks. American Journal of Physical Anthropology 87:49–65. <doi:10.1002/ajpa.1330870106>
Lele, S. R., and Richtsmeier, J. T., 1995. Euclidean distance matrix analysis: confidence intervals for form and growth differences. American Journal of Physical Anthropology 98:73–86. <doi:10.1002/ajpa.1330980107>
Hu, L., 2007. Euclidean Distance Matrix Analysis of Landmarks Data: Estimation of Variance. Thesis, Master of Science in Statistics, Department of Mathematical and Statistical Sciences, University of Alberta, Edmonton, Alberta, Canada. Pp. 49.
Lele, S. R., and Cole, T. M. III., 1996. A new test for shape differences when variance-covariance matrices are unequal. Journal of Human Evolution 31:193–212. <doi:10.1006/jhev.1996.0057>
Check and manipulate the default color values.
edma_colors(n, type=c("diverging", "sequential", "qualitative"), alpha=1, rev=FALSE) plot_edma_colors(n=9, maxq=9)
edma_colors(n, type=c("diverging", "sequential", "qualitative"), alpha=1, rev=FALSE) plot_edma_colors(n=9, maxq=9)
n |
the number of colors (>0) to be in the palette. |
type |
the type of palette. |
alpha |
the alpha transparency, a number in [0,1]. |
rev |
logical, should colors be reversed. |
maxq |
maximum number of qualitative colors to plot. |
edma_colors
create a vector of n
colors
based on the settings in getOption("edma_options")
.
The options can be set via options
(see Examples).
The options can either be the name of a palette hcl.colors
.
When the option is set to multiple values, those are treated
as colors to be interplolated with colorRampPalette
.
For qualitative palettes, the color values are used directly
(recycled as needed).
Sequential palettes are produced as the higher half of the diverging palette for consistency.
edma_colors
returns a vector of hax color codes,
plot_edma_colors
produces a plot with the
diverging, sequential, and qualitative default palettes
given settings in getOption("edma_options")
.
Peter Solymos
hcl.colors
, colorRampPalette
, col2rgb
## default palettes plot_edma_colors(101) ## change default palettes op <- options("edma_options" = list( diverging = "Green-Orange", qualitative = "Dark 2")) plot_edma_colors(101) ## use color names options("edma_options" = list( diverging = c("black", "grey", "pink"), qualitative = "Warm")) plot_edma_colors(101) ## reset defaults options(op) plot_edma_colors(101)
## default palettes plot_edma_colors(101) ## change default palettes op <- options("edma_options" = list( diverging = "Green-Orange", qualitative = "Dark 2")) plot_edma_colors(101) ## use color names options("edma_options" = list( diverging = c("black", "grey", "pink"), qualitative = "Warm")) plot_edma_colors(101) ## reset defaults options(op) plot_edma_colors(101)
Functions for reading, simulating, and manipulating EDMA data.
## read xyz files read_xyz(file, ...) ## write xyz files write_xyz(x, file) ## data generation edma_simulate_data(n, M, SigmaK) ## print ## S3 method for class 'edma_data' print(x, truncate=40, ...) ## accessors ## S3 method for class 'edma_data' dim(x) ## S3 method for class 'edma_data' dimnames(x) landmarks(x, ...) dimensions(x, ...) specimens(x, ...) ## S3 method for class 'edma_data' landmarks(x, ...) ## S3 method for class 'edma_data' dimensions(x, ...) ## S3 method for class 'edma_data' specimens(x, ...) landmarks(x) <- value dimensions(x) <- value specimens(x) <- value ## subsetting ## S3 method for class 'edma_data' subset(x, subset, ...) ## S3 method for class 'edma_data' x[i, j, k] ## coercion ## S3 method for class 'edma_data' stack(x, ...) ## S3 method for class 'edma_data' as.matrix(x, ...) ## S3 method for class 'edma_data' as.data.frame(x, ...) ## S3 method for class 'edma_data' as.array(x, ...) as.edma_data(x, ...) ## S3 method for class 'array' as.edma_data(x, ...) combine_data(a, b, ga="G1", gb="G2") combine_data4(a1, a2, b1, b2, ga1="A1", ga2="A2", gb1="B1", gb2="B2") ## plot methods plot_2d(x, ...) plot_ord(x, ...) plot_clust(x, ...) ## S3 method for class 'edma_data' plot(x, which=NULL, ask=dev.interactive(), ...) ## S3 method for class 'edma_data' plot_2d(x, which=NULL, ...) ## S3 method for class 'edma_data' plot_ord(x, ...) ## S3 method for class 'edma_data' plot_clust(x, ...) ## dissimilarities ## S3 method for class 'edma_data' as.dist(m, diag=FALSE, upper=FALSE)
## read xyz files read_xyz(file, ...) ## write xyz files write_xyz(x, file) ## data generation edma_simulate_data(n, M, SigmaK) ## print ## S3 method for class 'edma_data' print(x, truncate=40, ...) ## accessors ## S3 method for class 'edma_data' dim(x) ## S3 method for class 'edma_data' dimnames(x) landmarks(x, ...) dimensions(x, ...) specimens(x, ...) ## S3 method for class 'edma_data' landmarks(x, ...) ## S3 method for class 'edma_data' dimensions(x, ...) ## S3 method for class 'edma_data' specimens(x, ...) landmarks(x) <- value dimensions(x) <- value specimens(x) <- value ## subsetting ## S3 method for class 'edma_data' subset(x, subset, ...) ## S3 method for class 'edma_data' x[i, j, k] ## coercion ## S3 method for class 'edma_data' stack(x, ...) ## S3 method for class 'edma_data' as.matrix(x, ...) ## S3 method for class 'edma_data' as.data.frame(x, ...) ## S3 method for class 'edma_data' as.array(x, ...) as.edma_data(x, ...) ## S3 method for class 'array' as.edma_data(x, ...) combine_data(a, b, ga="G1", gb="G2") combine_data4(a1, a2, b1, b2, ga1="A1", ga2="A2", gb1="B1", gb2="B2") ## plot methods plot_2d(x, ...) plot_ord(x, ...) plot_clust(x, ...) ## S3 method for class 'edma_data' plot(x, which=NULL, ask=dev.interactive(), ...) ## S3 method for class 'edma_data' plot_2d(x, which=NULL, ...) ## S3 method for class 'edma_data' plot_ord(x, ...) ## S3 method for class 'edma_data' plot_clust(x, ...) ## dissimilarities ## S3 method for class 'edma_data' as.dist(m, diag=FALSE, upper=FALSE)
file |
the name of the file which the data are to be read from, or written to,
see |
x , m
|
an EDMA data object of class 'edma_data'. |
which |
if a subset of the specimens is required. |
value |
a possible value for |
ask |
logical, if |
subset , i , j , k
|
subset is for subsetting specimens (e.g. for bootstrap). [i, j, k] indices refer to [landmarks, dimensions, specimens]. |
n , M , SigmaK
|
number of specimens (n), mean form matrix (M, K x D), variance-covariance matrix (K x K symmetric). |
truncate |
numeric, number of characters to print for the object title. |
diag , upper
|
logical, indicating whether the diagonal
and the upper triangle of the distance matrix should be printed.
See |
a , b , a1 , a2 , b1 , b2
|
EDMA data objects to be combined together. Landmarks must be homologous (determined by dimension names). |
ga , gb , ga1 , ga2 , gb1 , gb2
|
character, group names that are prepended to the specimen names to differentiate the groups. |
... |
other arguments passed to methods.
For |
The xyz landmark data has the following structure, see Examples:
- Header: this is the description of the data.
- XYZ: indicates dimensions, XYZ means 3D landmark data.
- 42L 3 9
: dimensions, e.g. 42 landmarks (K), 3 dimensions (D), 9 specimens (n).
- Landmark names, separated by space.
- The stacked data of landmark coordinates, e.g. 3 columns, space separated numeric values with K*n rows, the K landmarks per individuals stacked n times.
- Blank line.
- Date on of scans for each specimen (n rows), this part is also used to get specimen IDs.
After reading in or simulating and EDMA data object, the methods help extracting info, or manipulate these objects. See Values and Examples.
The EDMA data object (class 'edma_data') is a list with two
elements: $name
is the data set name (header information from
the .xyz file), $data
is a list of n matrices (the list can be
named if speciemen information is present),
each matrix is of dimension K x D, dimension names for the
matrices describing landmark names and coordinate names.
edma_simulate_data
returns an EDMA data object of
class 'edma_data'.
The dim
returns the number of landmarks (K), dimensions (D),
and specimens (n) in a data object.
landmarks
, dimensions
, and specimens
are dimensions names, dimnames
returns these as a list.
Landmark names and dimensions are used to check
if landmarks are homogeneous among objects.
It is possible to set the dimansion names as
dimnames(x) <- value
where value
is the
new value for the name.
The print
method prints info about the data object.
The methods stack
and as.matrix
return a stacked
2D array (K*n x D) with the landmark coordinates,
as.data.frame
turns the same 2D stacked array into a data frame,
as.array
returns a 3D array (K x D x n).
as.edma_data
turns a 3D array to an EDMA data object,
this is useful to handle 3D array objects returned by many
functions of the geomorph package (i.e. after reding
Morphologika, NTS, TPS files).
combine_data
and combine_data4
combines
2 or 4 EDMA data sets together, landmarks must be homologous.
as.dist
calculates the dissimilarity matrix (n x n, object
of class 'dist', see dist
) containing
pairwise dissimilarities among the specimens.
Dissimilarity is based on the T-statistic (max/min distance)
averaged (so that it is symmetric) and on the log scale
(so that self dissimilarity is 0).
subset
and [i,j,k]
returns an EDMA data object
with the desired dimensions or permutations. See Examples.
plot
and plot_2d
produces a series of plots
as a side effect, returning the data object invisibly.
The functions provide diagnostics for each specimen
or just the specimen selected by the which
argument.
The 2D projection is used in case of 3D landmark data.
The convex hull of the specimens (excluding the one being
selected) is compared with the actual specimen's landmarks.
This allows easy spotting of erroneous data.
The plot_ord
and plot_clust
are based on the
dissimilarities among specimens and provide ordination
(metric multidimensional scaling using cmdscale
based on square rooted dissimilarities and Cailliez's correction).
and hierarchical cluster dendrogram (using the hclust
function with Ward's clustering method).
Peter Solymos
plot.edma_data
for visualizing EDMA data objects.
edma_fit
for EDMA analysis.
dist
for dissimilarity matrices and
global_test
for description of the T-statistic.
## read xyz files file <- system.file( "extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR") x <- read_xyz(file) x ## test writing xyz file f <- tempfile(fileext = ".xyz") write_xyz(x, file=f) tmp <- read_xyz(file=f) stopifnot(identical(dimnames(x), dimnames(tmp))) unlink(f) ## the orignal structure l <- readLines(file) cat(l[1:10], sep="\n") cat(l[(length(l)-10):length(l)], sep="\n") ## plots plot(x[,,1:5]) # steps through all individuals plot_2d(x) # all speciemns in 1 plot plot_2d(x, which=2) # show specimen #2 plot_ord(x) plot_clust(x) ## dimensions and names dim(x) dimnames(x) landmarks(x) specimens(x) dimensions(x) ## subsets x[1:10, 2:3, 1:5] subset(x, 1:10) ## coercion str(as.matrix(x)) str(as.data.frame(x)) str(stack(x)) str(as.array(x)) as.edma_data(as.array(x)) ## simulate data K <- 3 # number of landmarks D <- 2 # dimension, 2 or 3 sig <- 0.75 rho <- 0 SigmaK <- sig^2*diag(1, K, K) + sig^2*rho*(1-diag(1, K, K)) M <- matrix(c(0,1,0,0,0,1), 3, 2) M[,1] <- M[,1] - mean(M[,1]) M[,2] <- M[,2] - mean(M[,2]) M <- 10*M edma_simulate_data(10, M, SigmaK)
## read xyz files file <- system.file( "extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR") x <- read_xyz(file) x ## test writing xyz file f <- tempfile(fileext = ".xyz") write_xyz(x, file=f) tmp <- read_xyz(file=f) stopifnot(identical(dimnames(x), dimnames(tmp))) unlink(f) ## the orignal structure l <- readLines(file) cat(l[1:10], sep="\n") cat(l[(length(l)-10):length(l)], sep="\n") ## plots plot(x[,,1:5]) # steps through all individuals plot_2d(x) # all speciemns in 1 plot plot_2d(x, which=2) # show specimen #2 plot_ord(x) plot_clust(x) ## dimensions and names dim(x) dimnames(x) landmarks(x) specimens(x) dimensions(x) ## subsets x[1:10, 2:3, 1:5] subset(x, 1:10) ## coercion str(as.matrix(x)) str(as.data.frame(x)) str(stack(x)) str(as.array(x)) as.edma_data(as.array(x)) ## simulate data K <- 3 # number of landmarks D <- 2 # dimension, 2 or 3 sig <- 0.75 rho <- 0 SigmaK <- sig^2*diag(1, K, K) + sig^2*rho*(1-diag(1, K, K)) M <- matrix(c(0,1,0,0,0,1), 3, 2) M[,1] <- M[,1] - mean(M[,1]) M[,2] <- M[,2] - mean(M[,2]) M <- 10*M edma_simulate_data(10, M, SigmaK)
Form difference matrix based inference based on Lele and Richtsmeier (1992, 1995).
edma_fdm(numerator, denominator, B=0, ref_denom=TRUE, mix=FALSE) get_influence(object, ...) ## S3 method for class 'edma_dm' get_influence(object, level=0.95, ...) ## S3 method for class 'edma_influence' plot(x, ...) get_fdm(object, ...) ## S3 method for class 'edma_fdm' get_fdm(object, sort=FALSE, level=0.95, what="all", ...) global_test(object, ...) ## S3 method for class 'edma_fdm' global_test(object, ...) ## S3 method for class 'edma_dm' confint(object, parm, level=0.95, ...) ## S3 method for class 'edma_fdm' print(x, ...) ## S3 method for class 'edma_fdm' landmarks(x, ...) ## S3 method for class 'edma_fdm' dimensions(x, ...) plot_ci(x, ...) plot_test(x, ...) ## S3 method for class 'edma_dm' plot(x, ...) ## S3 method for class 'edma_dm' plot_2d(x, ...) ## S3 method for class 'edma_dm' plot_3d(x, ...) ## S3 method for class 'edma_dm' plot_test(x, ...) ## S3 method for class 'edma_fdm' plot_ci(x, ...) ## S3 method for class 'edma_fdm' plot_ord(x, ...) ## S3 method for class 'edma_fdm' plot_clust(x, ...)
edma_fdm(numerator, denominator, B=0, ref_denom=TRUE, mix=FALSE) get_influence(object, ...) ## S3 method for class 'edma_dm' get_influence(object, level=0.95, ...) ## S3 method for class 'edma_influence' plot(x, ...) get_fdm(object, ...) ## S3 method for class 'edma_fdm' get_fdm(object, sort=FALSE, level=0.95, what="all", ...) global_test(object, ...) ## S3 method for class 'edma_fdm' global_test(object, ...) ## S3 method for class 'edma_dm' confint(object, parm, level=0.95, ...) ## S3 method for class 'edma_fdm' print(x, ...) ## S3 method for class 'edma_fdm' landmarks(x, ...) ## S3 method for class 'edma_fdm' dimensions(x, ...) plot_ci(x, ...) plot_test(x, ...) ## S3 method for class 'edma_dm' plot(x, ...) ## S3 method for class 'edma_dm' plot_2d(x, ...) ## S3 method for class 'edma_dm' plot_3d(x, ...) ## S3 method for class 'edma_dm' plot_test(x, ...) ## S3 method for class 'edma_fdm' plot_ci(x, ...) ## S3 method for class 'edma_fdm' plot_ord(x, ...) ## S3 method for class 'edma_fdm' plot_clust(x, ...)
numerator , denominator
|
EDMA fit object to compare forms. |
B |
nonnegative integer, the number of bootstrap replicates. |
ref_denom |
logical, when |
mix |
logical, to use mixed bootstrap (numerator and denominator populations are mixed with replacement) or not (only the non-reference population is resampled with replacement, reference is fixed). |
x , object
|
an EDMA FDM object of class 'edma_fdm'. |
sort |
logical, if stacked distances are to be sorted, see Examples. |
level |
numeric, between 0 and 1, alpha level for confidence interval. |
parm |
a specification of which parameters are to be given
confidence intervals, either a vector of numbers or a vector of names.
See |
what |
what part of the ford differences to return: |
... |
other arguments passed to methods. |
Form difference (FDM) is calculated as the ratio of form matrices (FM) from the numerator and denominator objects following Lele and Richtsmeier (1992, 1995): FDM(A,B) = FM(B)/FM(A). Form matrices are formed as pairwise Euclidean distances between landmarks from EDMA fit objects using the estimated mean forms.
Bootstrap distribution is based on either 'mixed' or not mixed bootstrap distribution. The 'mixed' bootstrap means that the bootstrap distribution represents n1+n2 specimens from the pooled sample of the numerator and denominator populations.
The default is mix=FALSE
in which case we fix the
reference FM and taking the ratio between the reference FM
and the bootstrap FMs from the other non-reference object
(depending on the ref_denom
argument).
The T-statistic is based on the pairwise distanced in the FM,
taking the max/min of the distances. Confidence intervals for local testing
(via confint
, get_fdm
, and plot_ci
)
and T-test for global testing
(via global_test
, and plot_test
)
is based on the observed T-statistic and the bootstrap distribution.
The global testing algorithm is as follows: Suppose population 1 is the 'reference' population. Step 1: Resample n1 observations from the first sample and compute FM1*. Step 2: Resample n2 observations from the first sample and compute FM2*. Step 3: Compute the FDM* = FM2*/FM1* and T* = max(FDM*)/min(FDM*) Step 4: Repeat the above three steps B times to get the p-value.
Local testing (CI: confidence interval calculation) for elements of the FDM is based on the following algorithm: Step 1: Resample n1 observations from the first sample and compute FM1*. Step 2: Resample n2 observations from the second sample and compute FM2*. Step 3: Compute the FDM* = FM2*/FM1* Step 4: Repeat the above three steps B times to get the confidence intervals for the elements of the FDM.
Influential landmarks are identified by leaving one landmark out,
then comparing the T-statistic with the value based on all the
landmarks. The existing bootstrap distribution of
the mean form is used (i.e. no re-estimation of the mean form)
in get_influence
.
edma_fdm
compares two EDMA fit objects and calculates
form difference.
confint
returns the confidence intervals for FDM,
the get_fdm
extract the stacked FDM with confidence intervals,
the plot_ci
visualizes the ordered form differences with
confidence intervals.
get_influence
extracts landmark influence information,
the plot method visualizes this.
global_test
presents the global T-test,
the bootstrap distribution and observed T-value is
visualized by plot_test
.
plot
and plot_2d
produces a 2D plot of the mean form
from the reference object ('prototype').
plot_3d
use the rgl package to make a 3D plot using the same
mean form. Influential landmarks are colored red.
Lines represent distances between landmarks,
<1 differences are colored blue, >1 differences are colored red.
The plot_ord
and plot_clust
produce plots based on dissimilarities among specimens
in the two objects.
Peter Solymos, Subhash R. Lele, Theodore M. Cole, Joan T. Richtsmeier
Lele, S. R., and Richtsmeier, J. T., 1992. On comparing biological shapes: detection of influential landmarks. American Journal of Physical Anthropology 87:49–65. <doi:10.1002/ajpa.1330870106>
Lele, S. R., and Richtsmeier, J. T., 1995. Euclidean distance matrix analysis: confidence intervals for form and growth differences. American Journal of Physical Anthropology 98:73–86. <doi:10.1002/ajpa.1330980107>
Nonparametric fit: edma_fit
Growth difference: edma_gdm
Shape difference: edma_sdm
file1 <- system.file("extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR") x1 <- read_xyz(file1) file2 <- system.file("extdata/crouzon/Crouzon_P0_Global_NON-MUT.xyz", package="EDMAinR") x2 <- read_xyz(file2) numerator <- edma_fit(x1, B=10) denominator <- edma_fit(x2, B=10) fdm <- edma_fdm(numerator, denominator, B=10) fdm2 <- edma_fdm(numerator, denominator, B=10, ref_denom=FALSE) fdm fdm2 head(get_fdm(fdm)) head(get_fdm(fdm, sort=TRUE, decreasing=TRUE)) head(get_fdm(fdm, sort=TRUE, decreasing=FALSE)) global_test(fdm) global_test(fdm2) head(confint(fdm)) head(infl <- get_influence(fdm)) plot(infl) plot_ord(fdm) plot_clust(fdm) plot_test(fdm) plot_ci(fdm) plot_2d(fdm) if (interactive()) plot_3d(fdm)
file1 <- system.file("extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR") x1 <- read_xyz(file1) file2 <- system.file("extdata/crouzon/Crouzon_P0_Global_NON-MUT.xyz", package="EDMAinR") x2 <- read_xyz(file2) numerator <- edma_fit(x1, B=10) denominator <- edma_fit(x2, B=10) fdm <- edma_fdm(numerator, denominator, B=10) fdm2 <- edma_fdm(numerator, denominator, B=10, ref_denom=FALSE) fdm fdm2 head(get_fdm(fdm)) head(get_fdm(fdm, sort=TRUE, decreasing=TRUE)) head(get_fdm(fdm, sort=TRUE, decreasing=FALSE)) global_test(fdm) global_test(fdm2) head(confint(fdm)) head(infl <- get_influence(fdm)) plot(infl) plot_ord(fdm) plot_clust(fdm) plot_test(fdm) plot_ci(fdm) plot_2d(fdm) if (interactive()) plot_3d(fdm)
Estimate mean form and SigmaKstar matrix based on Lele (1991), Lele and Richtsmeier (1991) and Hu (2007).
edma_fit(x, B=0, ncores=getOption("Ncpus", 1L)) ## generics Meanform(object, ...) SigmaKstar(object, ...) get_fm(object, ...) ## methods ## S3 method for class 'edma_fit_np' print(x, truncate=40, ...) ## S3 method for class 'edma_fit' Meanform(object, ...) ## S3 method for class 'edma_fit' SigmaKstar(object, ...) ## S3 method for class 'edma_fit' get_fm(object, sort=FALSE, level=0.95, ...) ## S3 method for class 'edma_fit' confint(object, parm, level=0.95, ...) ## S3 method for class 'edma_fit' as.edma_data(x, ...) ## plot methods plot_3d(x, ...) ## S3 method for class 'edma_fit' plot(x, ...) ## S3 method for class 'edma_fit' plot_2d(x, ...) ## S3 method for class 'edma_fit' plot_3d(x, ...) ## S3 method for class 'edma_fit' plot_ord(x, ...) ## S3 method for class 'edma_fit' plot_clust(x, ...) ## distance manipulation ## S3 method for class 'edma_fit' as.dist(m, diag=FALSE, upper=FALSE) ## S3 method for class 'dist' stack(x, ...)
edma_fit(x, B=0, ncores=getOption("Ncpus", 1L)) ## generics Meanform(object, ...) SigmaKstar(object, ...) get_fm(object, ...) ## methods ## S3 method for class 'edma_fit_np' print(x, truncate=40, ...) ## S3 method for class 'edma_fit' Meanform(object, ...) ## S3 method for class 'edma_fit' SigmaKstar(object, ...) ## S3 method for class 'edma_fit' get_fm(object, sort=FALSE, level=0.95, ...) ## S3 method for class 'edma_fit' confint(object, parm, level=0.95, ...) ## S3 method for class 'edma_fit' as.edma_data(x, ...) ## plot methods plot_3d(x, ...) ## S3 method for class 'edma_fit' plot(x, ...) ## S3 method for class 'edma_fit' plot_2d(x, ...) ## S3 method for class 'edma_fit' plot_3d(x, ...) ## S3 method for class 'edma_fit' plot_ord(x, ...) ## S3 method for class 'edma_fit' plot_clust(x, ...) ## distance manipulation ## S3 method for class 'edma_fit' as.dist(m, diag=FALSE, upper=FALSE) ## S3 method for class 'dist' stack(x, ...)
x , object , m
|
an EDMA data object of class 'edma_data'. |
B |
nonnegative integer, the number of bootstrap replicates. |
ncores |
positive integer, the number of cores to use when bootstrapping.
Use |
truncate |
numeric, number of characters to print for the object title. |
sort |
logical, if stacked distances are to be sorted, see Examples. |
level |
numeric, between 0 and 1, alpha level for confidence interval. |
parm |
a specification of which parameters are to be given
confidence intervals, either a vector of numbers or a vector of names.
See |
diag , upper
|
logical, indicating whether the diagonal
and the upper triangle of the distance matrix should be printed.
See |
... |
other arguments passed to methods. E.g.
for |
The function estimates mean form and SigmaKstar matrix based on Lele (1991), Lele and Richtsmeier (1991) and Hu (2007).
edma_fit
returns and EDMA fit object of class 'edma_fit'.
.edma_fit_np
is the workhorse function behind edma_fit
.
stack.dist
takes any distance matrix of class 'dist'
and turns that into a long form data frame with
columns row
and col
indicating the row and column
labels, dist
giving the value in that cell.
Only returns the values from the lower triangle of the matrix.
get_fm
is the intended user interface to extract
the form matrix (FM) from EDMA fit objects.
This has the stacked distances based on the mean form.
When the object has bootstrap replicates,
get_fm
also returns confidence intervals
for the distances based on bootstrap and the confint
method.
Meanform
extracts the mean form (K x D) matrix,
SigmaKstar
extracts the corresponding uncertainties
(K x K) based on the EDMA fit object.
plot
and plot_2d
produces a 2D plot of the mean form.
2D projection is used in case of 3D landmark data based on
metric multidimensional scaling.
plot_3d
use the rgl package to make a 3D plot.
The sizes of the dots correspond to
square root of the SigmaKstar diagonal elements.
The plot_ord
and plot_clust
produce plots based on dissimilarities among specimens,
see plot_ord.edma_data
for details.
Peter Solymos, Subhash R. Lele, Theodore M. Cole, Liangyuan Hu, Joan T. Richtsmeier
Lele, S. R., 1991. Some comments on coordinate-free and scale-invariant methods in morphometrics. American Journal of Physical Anthropology 85:407–417. <doi:10.1002/ajpa.1330850405>
Lele, S. R., and Richtsmeier, J. T., 1991. Euclidean distance matrix analysis: A coordinate-free approach for comparing biological shapes using landmark data. American Journal of Physical Anthropology 86(3):415–27. <doi:10.1002/ajpa.1330860307>
Hu, L., 2007. Euclidean Distance Matrix Analysis of Landmarks Data: Estimation of Variance. Thesis, Master of Science in Statistics, Department of Mathematical and Statistical Sciences, University of Alberta, Edmonton, Alberta, Canada. Pp. 49.
EDMA data: read_xyz
Form difference: edma_fdm
Growth difference: edma_gdm
Shape difference: edma_sdm
file <- system.file( "extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR") x <- read_xyz(file) x <- x[,,1:10] # 10 specimens ## nonparametric fit fit <- edma_fit(x, B=9) fit str(Meanform(fit)) str(SigmaKstar(fit)) ## form matrix str(as.dist(fit)) str(stack(as.dist(fit))) head(get_fm(fit)) head(get_fm(fit, sort=TRUE, decreasing=TRUE)) head(get_fm(fit, sort=TRUE, decreasing=FALSE)) plot_ord(fit) plot_clust(fit) plot(fit) plot_2d(fit) if (interactive()) plot_3d(fit)
file <- system.file( "extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR") x <- read_xyz(file) x <- x[,,1:10] # 10 specimens ## nonparametric fit fit <- edma_fit(x, B=9) fit str(Meanform(fit)) str(SigmaKstar(fit)) ## form matrix str(as.dist(fit)) str(stack(as.dist(fit))) head(get_fm(fit)) head(get_fm(fit, sort=TRUE, decreasing=TRUE)) head(get_fm(fit, sort=TRUE, decreasing=FALSE)) plot_ord(fit) plot_clust(fit) plot(fit) plot_2d(fit) if (interactive()) plot_3d(fit)
Growth matrix and growth difference matrix based inference based on Lele and Richtsmeier (1992, 1995).
edma_gm(a1, a2, ...) get_gm(object, ...) ## S3 method for class 'edma_gm' get_gm(object, sort=FALSE, level=0.95, what="all", ...) edma_gdm(a1, a2, b1, b2, ...) get_gdm(object, ...) ## S3 method for class 'edma_gdm' get_gdm(object, sort=FALSE, level=0.95, what="all", ...) ## S3 method for class 'edma_gm' print(x, ...) ## S3 method for class 'edma_gdm' print(x, ...) ## S3 method for class 'edma_gm' global_test(object, ...) ## S3 method for class 'edma_gdm' global_test(object, ...) ## S3 method for class 'edma_gdm' landmarks(x, ...) ## S3 method for class 'edma_gdm' dimensions(x, ...) ## S3 method for class 'edma_gdm' plot_ord(x, ...) ## S3 method for class 'edma_gdm' plot_clust(x, ...)
edma_gm(a1, a2, ...) get_gm(object, ...) ## S3 method for class 'edma_gm' get_gm(object, sort=FALSE, level=0.95, what="all", ...) edma_gdm(a1, a2, b1, b2, ...) get_gdm(object, ...) ## S3 method for class 'edma_gdm' get_gdm(object, sort=FALSE, level=0.95, what="all", ...) ## S3 method for class 'edma_gm' print(x, ...) ## S3 method for class 'edma_gdm' print(x, ...) ## S3 method for class 'edma_gm' global_test(object, ...) ## S3 method for class 'edma_gdm' global_test(object, ...) ## S3 method for class 'edma_gdm' landmarks(x, ...) ## S3 method for class 'edma_gdm' dimensions(x, ...) ## S3 method for class 'edma_gdm' plot_ord(x, ...) ## S3 method for class 'edma_gdm' plot_clust(x, ...)
a1 , a2 , b1 , b2
|
EDMA fit object to compare growths. |
x , object
|
an EDMA GM or GDM objects. |
sort |
logical, if stacked distances are to be sorted, see Examples. |
level |
numeric, between 0 and 1, alpha level for confidence interval. |
what |
what part of the ford differences to return: |
... |
other arguments passed to |
Growth matrix (GM) is calculated as the ratio of form matrices (FM) from the numerator and denominator objects following Lele and Richtsmeier (1992, 1995): GM(A1,A2) = FM(A2)/FM(A1). Form matrices are formed as pairwise Euclidean distances between landmarks from EDMA fit objects using the estimated mean forms.
Growth difference matrix (GDM) is calculated as GDM(A1,A2,B1,B2) = GM(B1,B2) / GM(A1,A2).
Inference and visualization is similar to how it is done for FDMs.
edma_gm
compares two EDMA fit objects and calculates GM.
edma_gdm
compares 4 EDMA fit objects and calculates GDM.
The plot_ord
and plot_clust
produce plots based on dissimilarities among specimens
in the 2 or 4 objects (for GM and GDM, respectively).
Peter Solymos, Subhash R. Lele, Theodore M. Cole, Joan T. Richtsmeier
Lele, S. R., and Richtsmeier, J. T., 1992. On comparing biological shapes: detection of influential landmarks. American Journal of Physical Anthropology 87:49–65. <doi:10.1002/ajpa.1330870106>
Lele, S. R., and Richtsmeier, J. T., 1995. Euclidean distance matrix analysis: confidence intervals for form and growth differences. American Journal of Physical Anthropology 98:73–86. <doi:10.1002/ajpa.1330980107>
Nonparametric fit: edma_fit
Form difference: edma_fdm
Shape difference: edma_sdm
file_a1 <- system.file("extdata/growth/CZEM_wt_global.xyz", package="EDMAinR") file_a2 <- system.file("extdata/growth/CZP0_wt_global.xyz", package="EDMAinR") l <- c("amsph", "bas", "loci", "lpto", "lsqu", "lsyn", "roci", "rpto", "rsqu", "rsyn") a1 <- read_xyz(file_a1)[l,,] a2 <- read_xyz(file_a2)[l,,] a1 a2 fit_a1 <- edma_fit(a1, B=10) fit_a2 <- edma_fit(a2, B=10) ## --- growth matrix --- gm <- edma_gm(a1=fit_a1, a2=fit_a2, B=10) gm global_test(gm) head(confint(gm)) head(get_gm(gm)) head(get_gm(gm, sort=TRUE, decreasing=TRUE)) head(get_gm(gm, sort=TRUE, decreasing=FALSE)) plot_ord(gm) plot_clust(gm) plot_test(gm) plot_ci(gm) plot_2d(gm) if (interactive()) plot_3d(gm) ## --- growth difference matrix --- file_b1 <- system.file("extdata/growth/CZEM_mut_global.xyz", package="EDMAinR") file_b2 <- system.file("extdata/growth/CZP0_mut_global.xyz", package="EDMAinR") b1 <- read_xyz(file_b1)[l,,] b2 <- read_xyz(file_b2)[l,,] b1 b2 fit_b1 <- edma_fit(b1, B=10) fit_b2 <- edma_fit(b2, B=10) gdm <- edma_gdm(a1=fit_a1, a2=fit_a2, b1=fit_b1, b2=fit_b2, B=10) gdm global_test(gdm) head(confint(gdm)) head(get_gdm(gdm)) head(get_gdm(gdm, sort=TRUE, decreasing=TRUE)) head(get_gdm(gdm, sort=TRUE, decreasing=FALSE)) plot_ord(gdm) plot_clust(gdm) plot_test(gdm) plot_ci(gdm) plot_2d(gdm) # need real data if (interactive()) plot_3d(gdm)
file_a1 <- system.file("extdata/growth/CZEM_wt_global.xyz", package="EDMAinR") file_a2 <- system.file("extdata/growth/CZP0_wt_global.xyz", package="EDMAinR") l <- c("amsph", "bas", "loci", "lpto", "lsqu", "lsyn", "roci", "rpto", "rsqu", "rsyn") a1 <- read_xyz(file_a1)[l,,] a2 <- read_xyz(file_a2)[l,,] a1 a2 fit_a1 <- edma_fit(a1, B=10) fit_a2 <- edma_fit(a2, B=10) ## --- growth matrix --- gm <- edma_gm(a1=fit_a1, a2=fit_a2, B=10) gm global_test(gm) head(confint(gm)) head(get_gm(gm)) head(get_gm(gm, sort=TRUE, decreasing=TRUE)) head(get_gm(gm, sort=TRUE, decreasing=FALSE)) plot_ord(gm) plot_clust(gm) plot_test(gm) plot_ci(gm) plot_2d(gm) if (interactive()) plot_3d(gm) ## --- growth difference matrix --- file_b1 <- system.file("extdata/growth/CZEM_mut_global.xyz", package="EDMAinR") file_b2 <- system.file("extdata/growth/CZP0_mut_global.xyz", package="EDMAinR") b1 <- read_xyz(file_b1)[l,,] b2 <- read_xyz(file_b2)[l,,] b1 b2 fit_b1 <- edma_fit(b1, B=10) fit_b2 <- edma_fit(b2, B=10) gdm <- edma_gdm(a1=fit_a1, a2=fit_a2, b1=fit_b1, b2=fit_b2, B=10) gdm global_test(gdm) head(confint(gdm)) head(get_gdm(gdm)) head(get_gdm(gdm, sort=TRUE, decreasing=TRUE)) head(get_gdm(gdm, sort=TRUE, decreasing=FALSE)) plot_ord(gdm) plot_clust(gdm) plot_test(gdm) plot_ci(gdm) plot_2d(gdm) # need real data if (interactive()) plot_3d(gdm)
This function implements the landmark scaling procedures described in Lele and Cole (1996) which are used to rescale the landmarks for specimens in which the variance-covariance matrices to two populations are unequal.
edma_scale(x, scale_by, L1 = NULL, L2 = NULL, scale_constant = NULL)
edma_scale(x, scale_by, L1 = NULL, L2 = NULL, scale_constant = NULL)
x |
an EDMA data object of class |
scale_by |
string specifying the type of scaling. Valid options are
|
L1 |
string specifying first landmark to use if
|
L2 |
string specifying second landmark to use if
|
scale_constant |
numeric specifying the scaling constant to use for
|
scale_by
determines the interlandmark scaling value. Options are:
constant
Interlandmark distances are scaled by a numeric
constant that is applied to all specimens.
endpoints
Interlandmark distances are scaled by the distance
between a pair of landmarks (L1
and L2
) for each specimen.
geometric mean
Interlandmark distances are scaled by th
geometric mean of all pairwise distances for each specimen.
maximum
Interlandmark distances are scaled by the maximum of
all pairwise distances for each specimen.
median
Interlandmark distances are scaled by the median of all
pairwise distances for each specimen.
sneath
Interlandmark distances are scaled using the method
described by Sneath (1967), which uses the square-root of the mean squared
distances of each landmark to the centroid. Also see Creel (1986).
object of class 'edma_data', with landmarks scaled according to scale_by parameter. See details for details of scaling procedures. The object x are appended with a list including the the scaling method string and the values used for scaling. The latter can be useful for comparisons, e.g., of geometric means.
Creel, N. 1986. Size and Phylogeny in Hominoid Primates. Syst. Zool. 35:81-99.
Lele, S., and T. M. Cole III. 1996. A new test for shape differences when variance-covariance matrices are unequal. J. Hum. Evol. 31:193-212.
Sneath, P. H. A. 1967. Trend-surface analysis of transformation grids. J. Zool. 151:65-122. Wiley.
# Following the example in Lele and Cole (1996) X <- matrix(c(0, 0, 2, 3, 4, 1), byrow = TRUE, ncol = 2) Y <- matrix(c(0, 0, 3, 3, 3, 0), byrow = TRUE, ncol = 2) # Bind matrices into 3d array and convert to edma_data XY <- as.edma_data(array(dim = c(3, 2, 2), data = cbind(X, Y))) # Scale by a constant XY_const <- edma_scale(XY, scale_by = "constant", scale_constant = 2) print(XY_const) XY_const$data XY_const$scale # Scale by distance between two landmarks XY_endpt <- edma_scale(XY, scale_by = "endpoints", L1 = "L1", L2 = "L3") print(XY_endpt) XY_endpt$data XY_endpt$scale # Scale by geometric mean of all interlandmark distances XY_geomean <- edma_scale(XY, scale_by = "geometric_mean") print(XY_geomean) XY_geomean$data XY_geomean$scale # Scale by maximum of all interlandmark distances XY_max <- edma_scale(XY, scale_by = "maximum") print(XY_max) XY_max$data XY_max$scale # Scale by median of all interlandmark distances XY_median <- edma_scale(XY, scale_by = "median") print(XY_median) XY_median$data XY_median$scale # Scale using root mean squared distance from each landmark to # the centroid (Sneath, 1967). XY_sneath <- edma_scale(XY, scale_by = "sneath") print(XY_sneath) XY_sneath$data XY_sneath$scale
# Following the example in Lele and Cole (1996) X <- matrix(c(0, 0, 2, 3, 4, 1), byrow = TRUE, ncol = 2) Y <- matrix(c(0, 0, 3, 3, 3, 0), byrow = TRUE, ncol = 2) # Bind matrices into 3d array and convert to edma_data XY <- as.edma_data(array(dim = c(3, 2, 2), data = cbind(X, Y))) # Scale by a constant XY_const <- edma_scale(XY, scale_by = "constant", scale_constant = 2) print(XY_const) XY_const$data XY_const$scale # Scale by distance between two landmarks XY_endpt <- edma_scale(XY, scale_by = "endpoints", L1 = "L1", L2 = "L3") print(XY_endpt) XY_endpt$data XY_endpt$scale # Scale by geometric mean of all interlandmark distances XY_geomean <- edma_scale(XY, scale_by = "geometric_mean") print(XY_geomean) XY_geomean$data XY_geomean$scale # Scale by maximum of all interlandmark distances XY_max <- edma_scale(XY, scale_by = "maximum") print(XY_max) XY_max$data XY_max$scale # Scale by median of all interlandmark distances XY_median <- edma_scale(XY, scale_by = "median") print(XY_median) XY_median$data XY_median$scale # Scale using root mean squared distance from each landmark to # the centroid (Sneath, 1967). XY_sneath <- edma_scale(XY, scale_by = "sneath") print(XY_sneath) XY_sneath$data XY_sneath$scale
Shape difference matrix based inference following Lele and Cole (1996).
edma_sdm(a, b, log=TRUE, size=TRUE, edge = NULL) get_sdm(object, ...) ## S3 method for class 'edma_sdm' get_sdm(object, sort=FALSE, level = 0.95, ...) ## S3 method for class 'edma_sdm' print(x, level = 0.95, ...) Z_test(object, ...) ## S3 method for class 'edma_sdm' Z_test(object, level = 0.95, ...) ## S3 method for class 'edma_sdm' landmarks(x, ...) ## S3 method for class 'edma_sdm' dimensions(x, ...) ## S3 method for class 'edma_sdm' confint(object, parm, level=0.95, ...) ## S3 method for class 'edma_sdm' get_influence(object, statistic=c("Z", "C"), level=0.95, ...) plot_Ztest(x, ...) ## S3 method for class 'edma_sdm' plot_Ztest(x, statistic=c("Z", "C"), level = 0.95, ...)
edma_sdm(a, b, log=TRUE, size=TRUE, edge = NULL) get_sdm(object, ...) ## S3 method for class 'edma_sdm' get_sdm(object, sort=FALSE, level = 0.95, ...) ## S3 method for class 'edma_sdm' print(x, level = 0.95, ...) Z_test(object, ...) ## S3 method for class 'edma_sdm' Z_test(object, level = 0.95, ...) ## S3 method for class 'edma_sdm' landmarks(x, ...) ## S3 method for class 'edma_sdm' dimensions(x, ...) ## S3 method for class 'edma_sdm' confint(object, parm, level=0.95, ...) ## S3 method for class 'edma_sdm' get_influence(object, statistic=c("Z", "C"), level=0.95, ...) plot_Ztest(x, ...) ## S3 method for class 'edma_sdm' plot_Ztest(x, statistic=c("Z", "C"), level = 0.95, ...)
a , b
|
EDMA fit object to compare shapes. |
x , object
|
a SDM object. |
log |
logical, if form matrix is to be log transformed before calculating the differences. |
size |
logical, if size difference (C) is to be estimated ( |
edge |
numeric or character, numeric IDs or the name of the 2 landmarks
to be used to calculate C (C=db/da, where da and db are the edge distances
between the two landmarks for object a and b respectively).
C is calculated using total least squares (TLS) when |
sort |
logical, if stacked distances are to be sorted, see Examples. |
level |
numeric, between 0 and 1, alpha level for confidence interval. |
parm |
a specification of which parameters are to be given
confidence intervals, either a vector of numbers or a vector of names.
See |
statistic |
character, the Z or C statistic to be plotted. |
... |
other arguments passed to other functions. |
Shape difference matrix (SDM) is defined as
the difference between the scaled form matrices S(A) and S(B).
S(A) = C * FM(A), S(B) = FM(B),
where C is a scaling factor and is calculated using total least
squares (TLS). Shape difference matrix is S(A) - S(B) when log=FALSE
and log(S(A)) - log(S(B)) when log=TRUE
.
Inference and visualization is similar to how it is done for FDMs.
Note: the original implementation is usinga particular edge
to calculate the size (C) parameter (size=TRUE
and
edge
not NULL
). edge=NULL
uses total least
squares to estimate C based on all the edges of all the landmarks.
When size=FALSE
we set C=1, assuming sizez are the same.
edma_sdm
compares 2 EDMA fit objects and calculates SDM.
Peter Solymos, Subhash R. Lele, Theodore M. Cole
Lele, S. R., and Cole, T. M. III., 1996. A new test for shape differences when variance-covariance matrices are unequal. Journal of Human Evolution 31:193–212. <doi:10.1006/jhev.1996.0057>
Nonparametric fit: edma_fit
Form difference: edma_fdm
Growth difference: edma_gdm
file_a <- system.file("extdata/growth/CZP0_wt_global.xyz", package="EDMAinR") file_b <- system.file("extdata/growth/CZP0_mut_global.xyz", package="EDMAinR") l <- c("amsph", "bas", "loci", "lpto", "lsqu", "lsyn", "roci", "rpto", "rsqu", "rsyn") a <- read_xyz(file_a)[l,,] b <- read_xyz(file_b)[l,,] a b fit_a <- edma_fit(a, B=10) fit_b <- edma_fit(b, B=10) sdm <- edma_sdm(a=fit_a, b=fit_b) sdm Z_test(sdm) head(confint(sdm)) head(get_sdm(sdm)) head(get_sdm(sdm, sort=TRUE, decreasing=TRUE)) head(get_sdm(sdm, sort=TRUE, decreasing=FALSE)) get_influence(sdm) plot_Ztest(sdm, "Z") plot_Ztest(sdm, "C") plot_ci(sdm) plot(get_influence(sdm))
file_a <- system.file("extdata/growth/CZP0_wt_global.xyz", package="EDMAinR") file_b <- system.file("extdata/growth/CZP0_mut_global.xyz", package="EDMAinR") l <- c("amsph", "bas", "loci", "lpto", "lsqu", "lsyn", "roci", "rpto", "rsqu", "rsyn") a <- read_xyz(file_a)[l,,] b <- read_xyz(file_b)[l,,] a b fit_a <- edma_fit(a, B=10) fit_b <- edma_fit(b, B=10) sdm <- edma_sdm(a=fit_a, b=fit_b) sdm Z_test(sdm) head(confint(sdm)) head(get_sdm(sdm)) head(get_sdm(sdm, sort=TRUE, decreasing=TRUE)) head(get_sdm(sdm, sort=TRUE, decreasing=FALSE)) get_influence(sdm) plot_Ztest(sdm, "Z") plot_Ztest(sdm, "C") plot_ci(sdm) plot(get_influence(sdm))
Fit GPA or WGPA to landmark data.
gpa_fit(x, B = 0, ncores = getOption("Ncpus", 1L), weighted=FALSE, ...) ## S3 method for class 'gpa_fit' print(x, truncate=40, ...)
gpa_fit(x, B = 0, ncores = getOption("Ncpus", 1L), weighted=FALSE, ...) ## S3 method for class 'gpa_fit' print(x, truncate=40, ...)
x |
an EDMA data object of class 'edma_data'. |
B |
nonnegative integer, the number of bootstrap replicates. |
weighted |
logical, use |
ncores |
positive integer, the number of cores to use when bootstrapping.
Use |
truncate |
numeric, number of characters to print for the object title. |
... |
arguments passed to |
Returns only form matrix, SigmaKstar is NA
.
Peter Solymos wrote the wrapper for shapes::procGPA
.
Gower, J.C. (1975). Generalized Procrustes analysis, Psychometrika, 40, 33–50.
file <- system.file( "extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR") x <- read_xyz(file) x <- x[,,1:10] # 10 specimens ## nonparametric fit fit <- gpa_fit(x, B=9) fit str(Meanform(fit)) str(SigmaKstar(fit))
file <- system.file( "extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR") x <- read_xyz(file) x <- x[,,1:10] # 10 specimens ## nonparametric fit fit <- gpa_fit(x, B=9) fit str(Meanform(fit)) str(SigmaKstar(fit))
Writes output into a text file following close the WinEDMA implementation.
edma_fdm_report(numerator, denominator, output="edma_output.txt", landmarks=NULL, B=0, level=0.95, ref_denom=TRUE, mix=FALSE, digits=4) edma_gdm_report(numerator_yng, numerator_old, denominator_yng, denominator_old, output="edma_output.txt", landmarks=NULL, B=0, level=0.95, ref_denom=TRUE, mix=FALSE, digits=4)
edma_fdm_report(numerator, denominator, output="edma_output.txt", landmarks=NULL, B=0, level=0.95, ref_denom=TRUE, mix=FALSE, digits=4) edma_gdm_report(numerator_yng, numerator_old, denominator_yng, denominator_old, output="edma_output.txt", landmarks=NULL, B=0, level=0.95, ref_denom=TRUE, mix=FALSE, digits=4)
numerator , denominator , numerator_yng , numerator_old , denominator_yng , denominator_old
|
input file names or EDMA data objects. |
output |
path and file name for the output file. |
landmarks |
a subset of landmarks to be specified, or |
B |
number of bootstrap samples. |
level |
confidence level. |
ref_denom |
logical, when |
mix |
logical, to use mixed bootstrap (numeriator and denominator populations are mixed with replacement) or not (only the non-reference population is resampled with replacement). |
digits |
significant digits to print. |
## Not run: edma_fdm_report( numerator = system.file( "extdata/crouzon/Crouzon_P0_Global_NON-MUT.xyz", package="EDMAinR"), denominator = system.file( "extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR"), output="edma_output.txt", landmarks=c("locc", "lpfl", "lpsq", "lpto", "lsqu", "rocc", "rpfl", "rpsq", "rpto", "rsqu"), B=1000, level=0.9, ref_denom=FALSE, mix=TRUE) ## End(Not run)
## Not run: edma_fdm_report( numerator = system.file( "extdata/crouzon/Crouzon_P0_Global_NON-MUT.xyz", package="EDMAinR"), denominator = system.file( "extdata/crouzon/Crouzon_P0_Global_MUT.xyz", package="EDMAinR"), output="edma_output.txt", landmarks=c("locc", "lpfl", "lpsq", "lpto", "lsqu", "rocc", "rpfl", "rpsq", "rpto", "rsqu"), B=1000, level=0.9, ref_denom=FALSE, mix=TRUE) ## End(Not run)