Skip to main content
Biology LibreTexts

16.6: Morphometic Analysis

  • Page ID
    24920
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Morphometrics and Physical Markers

    Morphometrics (morpho– shape; metrics– measurements) is the use of physical measurements to determine the relatedness of organisms. With extinct organisms that have died out long ago, DNA extraction proves to be difficult. Likewise, prior to DNA technologies to analyze species, Linnean taxonomy was ascribed to organisms based on similarities in features.

    Describing Species and Variation of Morphologies

    Below are images of skull landmarks of the lizard family Varanidae. This family includes monitor lizards and Komodo Dragons. As can be seen below, the general morphology of the skulls is similar enough that they all retain the same landmarks. The figure below also illustrates the diversity in these lizards that illustrate a large variation between species.

    journal.pone_.0130625.g005-776x1024.png

    Skulls of the species involved in this analysis. McCurry et al. (2015) (CC-BY)

    Landmarks Standardize Measurements

    Having a set of shared landmarks provides the opportunity to make systematic measurements of morphometric features.

    journal.pone_.0130625.g002-1024x829.png

    Landmarks and measurement metrics for the morphometric analysis of skulls. McCurry et al. (2015) (CC-BY)

    Euclidean Distance to Measure Relatedness

    Euclidean distance is a measurement derived from Pythagorean geometry that describes the shortest distance (\(d\)) between 2 points (\(A\) and \(B\)) as a straight line using triangulation. In a Cartesian space, the points can be defined:

    \[A = \left( x _ { A } , y _ { A } \right)\nonumber \]

    and

    \[B = \left( x _ { B } , y _ { B } \right)\nonumber \]

    Standard Pythagorean theorem can be expressed as:

    \[x ^ { 2 } + y ^ { 2 } = d ^ { 2 }\nonumber \]

    To find the distance between the 2 points, we utilize algebra to calculate for d.

    \[d = \sqrt { x ^ { 2 } + y ^ { 2 } }\nonumber \]

    In this case, we expand to comparing the coordinates of the two points:

    \[\Delta x = x _ { B } - x _ { A }\nonumber \]

    and

    \[\Delta y = y _ { B } - y _ { A }\nonumber \]

    distance.png

    We can then expand this idea to include the differences in data points that describe the comparisons of multiple measurements.

    \[d \left( \mathbf { X } _ { \mathbf { i } } , \mathbf { X } _ { \mathbf { j } } \right) = \sqrt { \sum _ { k = 1 } ^ { p } \left( X _ { i k } - X _ { j k } \right) ^ { 2 } }\nonumber \]

    Calculating Distance with R

    varanoid_tree.png

    1. Download the dataset (McCurry et al. 2015) associated with this activity (a Comma Separated Value .csv file). This can be used in a spreadsheet or in a text editor. This data can be imported into R to determine the Euclidean distances of landmarks.
    2. The following code in R will download the data set into a variable called “varanoid”, measure Euclidean distance and save a plot into a PDF file in a directory called “/tmp”.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    ## install curl for fetching from internet if it isn't

    install.packages('curl')

    ## Load the curl library

    library(curl)

    ## read the data of measurements and assign it to a variable 'varanoid'

    varanoid = read.csv(curl('https://raw.githubusercontent.com/jeremyseto/bio-oer/master/data/varanoid.csv'))

    ## set the row names to the Species column

    row.names(varanoid) = varanoid$Species

    ## remove the first column of the table to have purely numeric data

    varanoid_truncated = (varanoid[,2:14])

    ## calculate distance using euclidean as the method

    dist_measure = dist(varanoid_truncated, method='euclidean')

    ## display dist_measure to look at the comparisons

    dist_measure

    varanoid_cluster = hclust(dist_measure)

    ## open PDF as a graphics device to save a file in the '/tmp' directory

    pdf(file='/tmp/varanoid_tree.pdf')

    plot(varanoid_cluster)

    dev.off()

    ## close the device to save the plot as pdf

    DNA Analysis

    Before starting this activity, review bioinformatics and sequence analysis.

    1. Search NCBI for mitochondrial sequences from the species involved in McCurry 2015. The data has been submitted by Ast (2001).
    2. Find the sequences and identify/extract elements that are common to all.
    3. Assemble the shared sequences in a text editor as a single FASTA file where each species is separated by a header (“>Species A”).
      • Notepad on Windows (but it’s better to download notepad++)
      • Textedit on Mac (but probably better to download TextWrangler)
      • Gedit on Linux
    4. Save the file as “something.fasta”.
    5. Perform a multiple sequence analysis using UGENE.
    6. Generate a phylogenetic tree using UGENE. For this exercise, use Maximum Likelihood (PhyML) as the algorithm. File the tutorial below.
    7. Compare the DNA with the morphometric analyses. What problems could we imagine arise if we rely solely on morphometry?

    References


    This page titled 16.6: Morphometic Analysis is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by Bio-OER.

    • Was this article helpful?