Learn R Programming

monogeneaGM (version 1.1)

procrustesFit: Generalized Procrustes Analysis

Description

This function aligns a set of landmark configurations using Generalized Procrustes Analysis (GPA).

Usage

procrustesFit(dat, anchor.index, x, PrinAxes = FALSE, showplot = FALSE)

Arguments

dat
a list containing landmark coordinate data of anchor from the specimens of interest
anchor.index
a numeric constant for the anchor of interest; 1 for ventral right; 2 for ventral left; 3 for dorsal right; 4 for dorsal left
x
a list providing the indices of specimens with anti-clockwise and clockwise orientation of landmarks for the anchor with index anchor.index
PrinAxes
logical; controls the argument with the same name in gpagen
showplot
logical; if TRUE, a scatter plot of the GPA coordinates of all specimens of interest is returned

Value

a list where the components are arrays of GPA coordinates for the specimens of interest

Details

This function is essentially a wrapper for the gpagen function in the geomorph package (version 3.0.0) to help convert raw landmark coordinates of monogenean anchors to GPA coordinates for downstream analysis.

References

Khang TF, Soo OYM, Tan WB, Lim LHS. (2016). Monogenean anchor morphometry: systematic value, phylogenetic signal, and evolution. PeerJ 4:e1668.

Adams DC, Otarola-Castillo E. (2013). geomorph: an R package for the collection and analysis of geometric morphometric shape data. Methods in Ecology and Evolution 4:393-399.

See Also

matrix2list, anglePolygon

Examples

Run this code
library(geomorph)

data(ligophorus_tpsdata)

#A data processing step to parse out the orientation of landmarks
#from samples of L.parvicopulatrix

O <- matrix(0, length(ligophorus_tpsdata$parvicopulatrix), 4)
for(w in 1:length(ligophorus_tpsdata$parvicopulatrix)){
	result <- mapply(function(k)
	anglePolygon(matrix2list(ligophorus_tpsdata$parvicopulatrix[[w]][(11*(k-1)+1):(11*k),]),
	degree=TRUE), k=1:4)

	result_angle <- mapply(function(k) list(result[[2*k-1]]), k=1:4)
	result_orientation <- mapply(function(k) list(result[[2*k]]), k=1:4)
	names(result_angle) <- names(result_orientation) <- c("VR","VL","DR","DL")
	O[w,] <- unlist(result_orientation)
}

mdir <- apply(O, 2, function(k) which(k == "m") )
pdir <- apply(O, 2, function(k) which(k == "p") )

e <- 1 #Ventral right anchor
result <- procrustesFit(ligophorus_tpsdata$parvicopulatrix, e,
list(mdir[[e]], pdir[[e]]), PrinAxes=TRUE, showplot=TRUE)

#Standardize the x-coordinate of Landmark 7 by rotating the x-coordinate
#of its mean GPA xy-coordinate to x=0.
coordinates <- stdLM(result$coords, reflect=FALSE, swap=TRUE, sgn=c(1,-1))

plotLM(coordinates, "VR", pointscale=0.8,axispointscale=0.8,
meansize=1.2,polygon.outline=TRUE,c(-.6,.6),c(-.6,.6) )

Run the code above in your browser using DataLab