Content Description

Many biological objects display some sort of symmetry. Morphometric analyses often investigate symmetry in some manner: either by evaluating components of variation attributed to different symmetry effects (e.g., directional, fluctuating, etc.), or by accounting for symmetry prior to the analysis (e.g., obtain ‘symmetrized’ shapes for subsequent investigation).

library(geomorph)
## Loading required package: RRPP
## Loading required package: rgl
## Loading required package: Matrix

Example of matching symmetry

data(mosquito)
Y.gpa <- gpagen(mosquito$wingshape, print.progress = FALSE)
plot(Y.gpa)

mosquito.sym <- bilat.symmetry(A = Y.gpa, ind = mosquito$ind, side=mosquito$side, 
                           object.sym = FALSE, print.progress = FALSE)
summary(mosquito.sym)
## 
## Call:
## bilat.symmetry(A = Y.gpa, ind = mosquito$ind, side = mosquito$side,  
##     object.sym = FALSE, print.progress = FALSE) 
## 
## 
## Symmetry (data) type: Matching 
## 
## Type I (Sequential) Sums of Squares and Cross-products
## Randomized Residual Permutation Procedure Used
## 1000 Permutations
## 
## Shape ANOVA
##          Df       SS        MS     Rsq      F       Z Pr(>F)   
## ind       9 0.104888 0.0116542 0.45533 2.7646  4.7037  0.001 **
## side      1 0.003221 0.0032209 0.01398 0.7641 -0.3558  0.635   
## ind:side 29 0.122249 0.0042155 0.53069                         
## Total    39 0.230358                                           
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Centroid Size ANOVA
##          Df         SS         MS     Rsq      F        Z Pr(>F)
## ind       9 4.1497e-09 4.6107e-10 0.18555 0.7484 -0.42684  0.665
## side      1 3.4740e-10 3.4738e-10 0.01553 0.5638  0.15779  0.471
## ind:side 29 1.7867e-08 6.1609e-10 0.79891                       
## Total    39 2.2364e-08

Example of object symmetry

data('lizards')
Y.gpa <- gpagen(lizards$coords, print.progress = FALSE)
plot(Y.gpa)

lizard.sym <- bilat.symmetry(A = Y.gpa, ind = lizards$ind, replicate = lizards$rep,
                           object.sym = TRUE, land.pairs = lizards$lm.pairs, print.progress = FALSE)
summary(lizard.sym)
## 
## Call:
## bilat.symmetry(A = Y.gpa, ind = lizards$ind, replicate = lizards$rep,  
##     object.sym = TRUE, land.pairs = lizards$lm.pairs, print.progress = FALSE) 
## 
## 
## 
## Symmetry (data) type: Object 
## 
## Type I (Sequential) Sums of Squares and Cross-products
## Randomized Residual Permutation Procedure Used
## 1000 Permutations
## 
## Shape ANOVA
##                     Df       SS        MS     Rsq       F       Z Pr(>F)   
## ind                 48 0.236788 0.0049331 0.83194  7.3721 -0.1011  0.536   
## side                 1 0.009432 0.0094317 0.03314 14.0951  3.7540  0.001 **
## ind:side            48 0.032119 0.0006692 0.11285 10.4367 19.7078  0.001 **
## ind:side:replicate  98 0.006283 0.0000641 0.02208                          
## Total              195 0.284622                                            
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(lizard.sym, warpgrids = TRUE)

NOTE: One may wish to remove asymmetry from the data and perform all subsequent analyses on ‘symmetrized’ structures. This can be easily achieved by obtaining the $symm.shape component from the bilat.symmetry object result.

Scatterplots of specimens (full shape and symmetrized shape)

plotAllSpecimens(Y.gpa$coords)

plotAllSpecimens(lizard.sym$symm.shape)