bilat.symmetry(A, ind = NULL, side = NULL, replicate = NULL, object.sym = FALSE, land.pairs = NULL, data = NULL, iter = 999, seed = NULL, RRPP = TRUE, print.progress = TRUE)
geomorph.data.frame
. It is imperative
that the variables "ind", "side", and "replicate" in the data frame match these names exactly (as shown in examples below).Analyses of object symmetry is implemented when object.sym=TRUE. Here, a 3D array [p x k x n]
contains the landmark coordinates for all n specimens. To obtain information about asymmetry, the
function generates a second set of objects by reflecting them about one of their coordinate axes.
The landmarks across the line of symmetry are then relabeled to obtain landmark correspondence.
The user must supply a list of landmark pairs. A vector containing information on individuals
must also be supplied. Replicates of each specimen may also be included in the dataset, and
when specified will be used as measurement error.
For both matching and object symmetry, output includes estimates of the symmetric and asymmetric
shape components for each specimen, as well as the fluctuating shape component for each specimen.
In all cases, specimen names for the output are based on the vector that specifies individuals.
Notes for geomorph 3.0
Compared to older versions of geomorph, some results can be expected to be slightly different.
Starting with geomorph 3.0, results use only type I sums of squares (SS) with either full
randomization of raw shape values or RRPP (preferred with nested terms) for analysis of variance
(ANOVA). Older versions used a combination of parametric and non-parametric results, as well
as a combination of type I and type III SS. While analytical conclusions should be consistent
(i.e., "significance" of effects is the same), these updates maintain consistency in analytical
philosophy. This change will require longer computation time for large datasets, but the trade-off
allows users to have more flexibility and eliminates combining disparate analytical philosophies.
Note also that significance of terms in the model are found by comparing F-values for each term
to those obtained via permutation. F-ratios and df are not strictly necessary (a ratio of SS
would suffice), but they are reported as is standard for anova tables. Additionally, users will
notice that the df reported are based on the number of observations rather than a combination
of objects * coordinates * dimensions, as is sometimes found in morphometric studies of symmetry.
However, this change has no effect on hypothesis testing, as only SS vary among permutations
(df, coordinates, and dimensions are constants).
The generic functions, print
, summary
, and plot
all
work with bilat.symmetry
.
Mardia, K.V., F.L. Bookstein, and I.J. Moreton. 2000. Statistical assessment of bilateral symmetry of shapes. Biometrika. 87:285-300.
Klingenberg, C.P., M. Barluenga, and A. Meyer. 2002. Shape analysis of symmetric structures: quantifying variation among individuals and asymmetry. Evolution. 56:1909-1920.
#Example of matching symmetry
data(mosquito)
gdf <- geomorph.data.frame(wingshape = mosquito$wingshape, ind=mosquito$ind, side=mosquito$side,
replicate=mosquito$replicate)
mosquito.sym <- bilat.symmetry(A = wingshape, ind = ind, side = side,
replicate = replicate, object.sym = FALSE, RRPP = TRUE, iter = 499, data = gdf)
summary(mosquito.sym)
plot(mosquito.sym, warpgrids = TRUE)
mosquito.sym$shape.anova # extract just the anova table on shape
#Example of object symmetry
data(scallops)
gdf <- geomorph.data.frame(shape = scallops$coorddata, ind=scallops$ind)
scallop.sym <- bilat.symmetry(A = shape, ind = ind, object.sym = TRUE,
land.pairs=scallops$land.pairs, data = gdf, RRPP = TRUE, iter = 499)
summary(scallop.sym)
# NOTE one can also: plot(scallop.sym, warpgrids = TRUE, mesh = NULL)
# NOTE one can also: scallop.sym$data.type # recall the symmetry type
Run the code above in your browser using DataLab