Retrieving and merging data on species of amphibians from different sources can be problematic if not the same nomenclature is used. As a first step, compiling data usually requires synchornizing the names used for species which can be tedious if datasets are large. This example introduces such a scenario and shows how AmphiNom can be implemented to derive at a taxonomy that is standardized across datasets.
Do certain life history traits make amphibians more suscpetible to extinction? This is a question extensively addressed in a publication by Cooper et al. 2008, Global Ecol. Biogeogr.17, 211–221, and we can repeat a similar analysis by using the IUCN risk categories as a proxy for species health and the life history characters - body size, egg diameter and clutch size published in Gomez-Mestre et al. 2012, Evolution 66(12):3687-3700. The nomenclature used in Gomez-Mestre is not the same as that used by IUCN however and so the naming of units in these datasets must be inspected first before they can be merged.
Load libraries needed for this example
library(AmphiNom) # if not yet installed follow the instructions here: https://github.com/hcliedtke/AmphiNom
library(phytools)
Set working directory
setwd("~/") # set as needed
Load necessary data
# Life history dataset and phylogeny from Gomez-Mestre et al. 2012 Evolution
gm.dat<-read.csv("gomezmestre_data.csv", header=T) # available as supplementary information from original publication
gm.tree<-read.nexus("gomezmestre_tree.tree")# available upon request from the authors
# Load IUCN data. This particular dataset is a .csv export from a search results for Anura on the IUCN website. Creation of user account is required to be able to export this kind of search result.
iucn.dat<-read.csv("iucn_anura.csv", header=T)
iucn.dat$binomial<-paste(iucn.dat$Genus, iucn.dat$Species) # make a column with binomial names
As is, if we try to match up the two datasets, we find that 87 species in the Gomez-Mestre dataset are not found in the IUCN dataset:
# how many Gomez-Mestre names are not in the IUCN dataset?
length(which(!gm.dat$Species %in% iucn.dat$binomial))
## [1] 87
At this point it is also important to point out that for the example below, we will use the internally stored asw_taxonomy and asw_synonyms datasets. These were last updated in January 2018 and may therefore not be current. To construct the must current datasets, use the getTaxonomy() and getSynonyms() functions.
Check names in dataset match names in tree
all(gm.tree$tip.label==gsub(gm.dat$Species, pattern=" ", replacement = "_")) # gsub() is used to insert underscores in binomial names (the format used in the tree)
## [1] TRUE
Screen names to see how well they match up to ASW and what can be ‘updated’ seamlessly
gm.asw<-aswSync(gm.dat$Species)
synonymReport(gm.asw)
## number_of_units
## queries 470
## names_up_to_date 367
## names_successfully_updated 96
## names_not_found 2
## ambiguities 5
## duplicates_produced 0
This report shows that of the 470 names, 367 are still ‘current’ according to ASW and although a further 96 are not, AmphiNom could find the corresponding ASW species. This means that ASW had the names listed as synonyms for only a single species. We can inspect the names that were updated like so:
gm.asw[gm.asw$status=="updated",c("query","ASW_names")]
## query ASW_names
## 67 Bufo alvarius Incilius alvarius
## 68 Bufo americanus Anaxyrus americanus
## 69 Bufo angusticeps Vandijkophrynus angusticeps
## 70 Bufo arenarum Rhinella arenarum
## 71 Bufo boreas Anaxyrus boreas
## 73 Bufo calamita Epidalea calamita
## 74 Bufo cognatus Anaxyrus cognatus
## 75 Bufo dombensis Poyntonophrynus dombensis
## 77 Bufo garmani Sclerophrys garmani
## 79 Bufo gutturalis Sclerophrys gutturalis
## 80 Bufo ictericus Rhinella icterica
## 82 Bufo maculatus Sclerophrys maculata
## 83 Bufo marinus Rhinella marina
## 84 Bufo melanostictus Duttaphrynus melanostictus
## 85 Bufo microscaphus Anaxyrus microscaphus
## 86 Bufo raddei Strauchbufo raddei
## 87 Bufo regularis Sclerophrys regularis
## 88 Bufo stomaticus Duttaphrynus stomaticus
## 89 Bufo taitanus Mertensophryne taitana
## 90 Bufo viridis Bufotes viridis
## 99 Ceratobatrachus guentheri Cornufer guentheri
## 112 Cyclorana alboguttata Ranoidea alboguttata
## 113 Cyclorana australis Ranoidea australis
## 114 Cyclorana brevipes Ranoidea brevipes
## 115 Cyclorana longipes Ranoidea longipes
## 117 Dendrobates castaneoticus Adelphobates castaneoticus
## 118 Dendrobates histrionicus Oophaga histrionica
## 119 Dendrobates lehmanni Oophaga lehmanni
## 121 Dendrobates pumilio Oophaga pumilio
## 122 Dendrobates reticulatus Ranitomeya reticulata
## 123 Dendrobates ventrimaculatus Ranitomeya ventrimaculata
## 124 Dendrophryniscus minutus Amazophrynella minuta
## 195 Hyla andersonii Dryophytes andersonii
## 197 Hyla avivoca Dryophytes avivoca
## 199 Hyla chrysoscelis Dryophytes chrysoscelis
## 200 Hyla cinerea Dryophytes cinereus
## 201 Hyla femoralis Dryophytes femoralis
## 202 Hyla gratiosa Dryophytes gratiosus
## 203 Hyla japonica Dryophytes japonicus
## 205 Hyla squirella Dryophytes squirellus
## 206 Hyla versicolor Dryophytes versicolor
## 207 Hylomantis lemur Agalychnis lemur
## 212 Hyperolius acuticeps Hyperolius microps
## 225 Hypsiboas albopunctatus Boana albopunctata
## 227 Hypsiboas cinerascens Boana cinerascens
## 228 Hypsiboas fasciatus Boana fasciata
## 229 Hypsiboas geographicus Boana geographica
## 230 Hypsiboas lanciformis Boana lanciformis
## 231 Hypsiboas rosenbergi Boana rosenbergi
## 232 Ingerana baluensis Alcalus baluensis
## 269 Litoria caerulea Ranoidea caerulea
## 270 Litoria genimaculata Ranoidea genimaculata
## 276 Litoria pearsoniana Ranoidea pearsoniana
## 279 Litoria spenceri Ranoidea spenceri
## 294 Nyctimystes dayi Ranoidea dayi
## 311 Pachymedusa dacnicolor Agalychnis dacnicolor
## 330 Phyllomedusa atelopoides Callimedusa atelopoides
## 331 Phyllomedusa hypochondrialis Pithecopus hypochondrialis
## 332 Phyllomedusa palliata Pithecopus palliatus
## 334 Phyllomedusa tomopterna Callimedusa tomopterna
## 341 Platypelis grandis Cophyla grandis
## 363 Pseudacris regilla Hyliola regilla
## 365 Pseudis limellum Lysapsus limellum
## 367 Pseudoamolops sauteri Rana sauteri
## 369 Psychrophrynella wettsteini Microkayla wettsteini
## 375 Rana adenopleura Nidirana adenopleura
## 380 Rana capito Lithobates capito
## 382 Rana catesbeiana Lithobates catesbeianus
## 383 Rana chiricahuensis Lithobates chiricahuensis
## 384 Rana clamitans Lithobates clamitans
## 387 Rana forreri Lithobates forreri
## 389 Rana grylio Lithobates grylio
## 390 Rana heckscheri Lithobates heckscheri
## 391 Rana holsti Babina holsti
## 392 Rana hosii Odorrana hosii
## 394 Rana ishikawae Odorrana ishikawae
## 396 Rana latouchii Hylarana latouchii
## 397 Rana lessonae Pelophylax lessonae
## 400 Rana minima Glandirana minima
## 401 Rana narina Odorrana narina
## 402 Rana nigromaculata Pelophylax nigromaculatus
## 404 Rana palmipes Lithobates palmipes
## 405 Rana palustris Lithobates palustris
## 406 Rana perezi Pelophylax perezi
## 409 Rana plancyi Pelophylax plancyi
## 412 Rana ridibunda Pelophylax ridibundus
## 413 Rana rugosa Glandirana rugosa
## 414 Rana sanguinea Sanguirana sanguinea
## 415 Rana sphenocephala Lithobates sphenocephalus
## 416 Rana supranarina Odorrana supranarina
## 417 Rana swinhoana Odorrana swinhoana
## 418 Rana sylvatica Lithobates sylvaticus
## 421 Rana utsunomiyaorum Odorrana utsunomiyaorum
## 436 Scinax cruentommus Scinax cruentomma
## 455 Stephopaedes anotis Mertensophryne anotis
## 458 Stumpffia grandis Rhombophryne grandis
Instead of checking all 470 names manually, AmphiNom has checked 463 for us already, leaving only 7 species that need a closer look. There are three situations for which AmphiNom needs careful input from the user, detailed below.
The report above shows that two names in the Gomez-Mestre dataset were not found on ASW. These need to be checked mannually. It appears that one name, “Calyptocephallela gayi”, contains a spelling mistake and another name, “Trachycephalus typhonius”, is not explicitly listed as a valid synonym on ASW, but extensively referenced to under the account for T. typhonius and this issue can also be easily resolved by searching for “Trachycephalus venulosus” on the ASW website.
#list the names not found
synonymReport(gm.asw, verbose = T)$names_not_found
## [1] "Calyptocephallela gayi" "Trachycephalus venulosus"
#manually insert the correct names
gm.asw$ASW_names[gm.asw$query=="Calyptocephallela gayi"]<-"Calyptocephalella gayi" #simple spelling mistake
gm.asw$ASW_names[gm.asw$query=="Trachycephalus venulosus"]<-"Trachycephalus typhonius" # T. venulosus is a junior synonym of T. typhonius according to Lavilla et al. 2010, Zootaxa, 2671:17-30.
Five more names were flagged as “ambiguous”. These are cases where a name in the query dataset is listed as a synonym for more than one species on ASW. A decision is required about which species is referred to.
# list ambiguities (both queries and suggested names)
synonymReport(gm.asw, verbose = T)$ambiguities
## $query
## [1] "Bufo granulosus" "Hypsiboas boans" "Kassina maculata"
## [4] "Rana pipiens" "Rhacophorus arboreus"
##
## $ASW_names
## [1] "Incilius nebulifer, Rhinella granulosa"
## [2] "Boana albopunctata, Boana boans"
## [3] "Kassina cochranae, Phlyctimantis maculatus"
## [4] "Lithobates catesbeianus, Lithobates pipiens"
## [5] "Boophis microtympanum, Rhacophorus arboreus"
# we can update these names manually like so:
gm.asw$ASW_names[gm.asw$query=="Bufo granulosus"]<-"Rhinella granulosa" # decision based on phylogenetic positions
gm.asw$ASW_names[gm.asw$query=="Hypsiboas boans"]<-"Boana boans" # H. albocunctatus is already in the dataset
gm.asw$ASW_names[gm.asw$query=="Kassina maculata"]<-"Phlyctimantis maculatus" # decision based on phylogenetic positions
gm.asw$ASW_names[gm.asw$query=="Rana pipiens"]<-"Lithobates pipiens" # L. catesbeiana already in dataset
gm.asw$ASW_names[gm.asw$query=="Rhacophorus arboreus"]<-"Rhacophorus arboreus" # based on phylogenetic position
The final check that AmphiNom performs is to make sure that the resulting list of ASW_names does not contain any duplicates. There may be datasets where this is expected (e.g. datasets with more than a single representative per species), but otherwise, this is an indication that the name updating by AmphiNom has resulted in more than one query being assigned to the same name. This may be the case if the query contains two or more species that have since been collapsed/synonymized under a single name.
In this particular case, no duplicate names were found in the resulting ASW_names suggestions. However, as we have inserted names manually to correct for missing names and ambiguities, it is wise to check again that there are no duplicates.
any(duplicated(gm.asw$ASW_names))
## [1] FALSE
We now have a list of “ASW_names” for the Gomez-Mestre dataset. The idea is that this list of names is now a standardized naming system that we can apply to all other datasets to merge them for downstream analysis.
The IUCN data are a good example to work with here, because it adheres to the ASW taxonomy and it also contains a list of reasonable synonyms per species. That said, running AmphiNom on it, shows quite a number of discrepancies.
iucn.asw<-aswSync(iucn.dat$binomial)
synonymReport(iucn.asw)
## number_of_units
## queries 5866
## names_up_to_date 5387
## names_successfully_updated 412
## names_not_found 33
## ambiguities 34
## duplicates_produced 178
The discordance with the ASW names is in part because the ASW is updated more frequently than the IUCN. For example, the genus “Ranoidea” used in ASW is not used by the IUCN, where Cyclorana and Litoria are used instead. Interesting also is the large number of duplications, which appear to be the result of IUCN providing information for a number of sub-species that are not treated as species by ASW. For example, Bufo gargarizans as recognized by ASW is represented by six IUCN accounts, B. andrewsi, B. gargarizans, B. kabischi, B. minshanicus, B. tibetanus and B. wolongensis.
If we were to use the whole dataset, names not found, ambiguities and diplicates should be addressed as above, but as we are not interested in all ~6000 anurans for this particular example, instead of ‘updating’ all the IUCN names to ASW names, we can try to reduce the dataset first.
# how many Gomez-Mestre names are not in the IUCN dataset?
length(which(!gm.dat$Species %in% iucn.dat$binomial))
## [1] 87
# how many Gomez-Mestre names 'updatade' to ASW names are not in the IUCN dataset?
length(which(!gm.asw$ASW_names %in% iucn.dat$binomial))
## [1] 23
# how many Gomez-Mestre names 'updatade' to ASW names are not in the IUCN dataset 'updated' to ASW names?
length(which(!gm.asw$ASW_names %in% iucn.asw$ASW_names))
## [1] 4
Without AmphiNom, 87 species in the Gomez-Mestre dataset need to be checked manually, which can be reduced to only 4 species when applying the AmphiNom translation to both. These are:
gm.asw$ASW_names[!gm.asw$ASW_names %in% iucn.asw$ASW_names]
## [1] "Cornufer guentheri" "Boana boans"
## [3] "Phlyctimantis maculatus" "Rhacophorus arboreus"
We can focus on resolving naming issues for only these four. As mentioned above, the IUCN data also include reasonable synonyms. As the Gomez-Mestre dataset is relatively recent, there are high chances we can find these four names in the list of synonyms, but the genus “Boana” for example has relatively recently been accepted by ASW and so is not listed.
The AmphiNom approach would be the following. Instead of looking for only the ASW suggested names in the IUCN dataset, we will look for all synonyms for those four names (i.e. essentially doing the reserve process that AmphiNom would usually do). The returned names are the names that are used in the IUCN dataset for each case and we can then update them accordingly.
asw_synonyms$synonyms[asw_synonyms$species=="Cornufer guentheri"][asw_synonyms$synonyms[asw_synonyms$species=="Cornufer guentheri"] %in% iucn.dat$binomial]
## [1] Cornufer guentheri
## 29632 Levels: ? Magnadigita adspersa ... Zweifelia zweifeli
iucn.asw$ASW_names[iucn.asw$query=="Cornufer guentheri"]<-"Cornufer guentheri"
asw_synonyms$synonyms[asw_synonyms$species=="Boana boans"][asw_synonyms$synonyms[asw_synonyms$species=="Boana boans"] %in% iucn.dat$binomial]
## [1] Hypsiboas boans
## 29632 Levels: ? Magnadigita adspersa ... Zweifelia zweifeli
iucn.asw$ASW_names[iucn.asw$query=="Hypsiboas boans"]<-"Boana boans"
asw_synonyms$synonyms[asw_synonyms$species=="Phlyctimantis maculatus"][asw_synonyms$synonyms[asw_synonyms$species=="Phlyctimantis maculatus"] %in% iucn.dat$binomial]
## [1] Kassina maculata
## 29632 Levels: ? Magnadigita adspersa ... Zweifelia zweifeli
iucn.asw$ASW_names[iucn.asw$query=="Kassina maculata"]<-"Phlyctimantis maculatus"
asw_synonyms$synonyms[asw_synonyms$species=="Rhacophorus arboreus"][asw_synonyms$synonyms[asw_synonyms$species=="Rhacophorus arboreus"] %in% iucn.dat$binomial]
## [1] Rhacophorus arboreus
## 29632 Levels: ? Magnadigita adspersa ... Zweifelia zweifeli
iucn.asw$ASW_names[iucn.asw$query=="Rhacophorus arboreus"]<-"Rhacophorus arboreus"
Lets check again whether all the names now match:
all(gm.asw$ASW_names %in% iucn.asw$ASW_names)
## [1] TRUE
We can now keep only the IUCN information for the species in the Gomez-Mestre dataset. But we still have to check whether or not there are duplicates that have been introduced due to the AmphiNom action.
iucn.dat$ASW_names<-iucn.asw$ASW_names #include an additional column of ASW names to the original IUCN dataset
iucn.gm<-iucn.dat[iucn.dat$ASW_names %in% gm.asw$ASW_names,] #make a new IUCN dataset that contains only Gomez-Mestre species
iucn.gm[duplicated(iucn.gm$ASW_names, fromLast = T) | duplicated(iucn.gm$ASW_names),c("binomial","ASW_names")] #check which names are listed in this new dataset more than once. We include the duplicated (with boleen |) function twice to also include the first term of the duplicated set.
## binomial ASW_names
## 75 Agalychnis litodryas Agalychnis spurrelli
## 80 Agalychnis spurrelli Agalychnis spurrelli
## 432 Arthroleptis lonnbergi Arthroleptis stenodactylus
## 447 Arthroleptis stenodactylus Arthroleptis stenodactylus
## 674 Bombina pachypus Bombina variegata
## 675 Bombina variegata Bombina variegata
## 794 Bufo andrewsi Bufo gargarizans
## 800 Bufo gargarizans Bufo gargarizans
## 802 Bufo kabischi Bufo gargarizans
## 803 Bufo minshanicus Bufo gargarizans
## 806 Bufo tibetanus Bufo gargarizans
## 810 Bufo wolongensis Bufo gargarizans
## 1512 Dryophytes japonicus Dryophytes japonicus
## 1810 Fejervarya cancrivora Fejervarya cancrivora
## 1827 Fejervarya raja Fejervarya cancrivora
## 2096 Hyla heinzsteinitzi Dryophytes japonicus
## 2305 Hyperolius kivuensis Hyperolius kivuensis
## 2355 Hyperolius raveni Hyperolius kivuensis
## 2956 Lithobates chiricahuensis Lithobates chiricahuensis
## 2987 Lithobates subaquavocalis Lithobates chiricahuensis
## 3832 Pelophylax bergeri Pelophylax lessonae
## 3842 Pelophylax lessonae Pelophylax lessonae
## 4093 Physalaemus biligonigerus Physalaemus biligonigerus
## 4240 Pleurodema fuscomaculatum Physalaemus biligonigerus
## 4709 Proceratophrys boiei Proceratophrys boiei
## 4714 Proceratophrys fryi Proceratophrys boiei
## 4987 Rana multidenticulata Rana sauteri
## 4996 Rana sauteri Rana sauteri
## 5011 Ranitomeya ignea Ranitomeya reticulata
## 5013 Ranitomeya reticulata Ranitomeya reticulata
By looking at these duplicates, it is apparent that the IUCN recognizes several subspecies that ASW does not (or at least did not at the time the internal dataset used for this example was generated). At this stage, it is crucial that the researcher make a clear decision on how to deal with such cases. As this is only an example to show how one could use AmphiNom to facilitate dataset-merging, we will proceed by simply omitting subspecies.
iucn.gm<-iucn.gm[!((duplicated(iucn.gm$ASW_names, fromLast = T) | duplicated(iucn.gm$ASW_names)) & iucn.gm$ASW_names!=iucn.gm$binomial),]
#check again to see if the names now match across the two datasets
all(iucn.gm$ASW_names %in% gm.asw$ASW_names)
## [1] TRUE
The two datasets now match and we can supplement the Gomez-Mestre dataset with the Red List status
gm.dat$ASW_names<-gm.asw$ASW_names # add ASW names to the Gomez-Mestre dataset
iucn.gm<-iucn.gm[match(gm.asw$ASW_names, iucn.gm$ASW_names),] # re-order the IUCN dataset to match the order of the Gomez-Mestre datasets
all(iucn.gm$ASW_names==gm.asw$ASW_names) # make sure they really match
## [1] TRUE
gm.dat$IUCN<-iucn.gm$Red.List.status #add the IUCN Red List status data to the Gomez-Mestre dataset
gm.dat$IUCN<-factor(gm.dat$IUCN) #update factors
head(gm.dat, 15) #shows the first couple of entries of our working dataset
## Species SVL Egg Clutch ASW_names
## 1 Acanthixalus sonjae 37.00 3.22 9.0 Acanthixalus sonjae
## 2 Acanthixalus spinosus 34.10 2.00 9.0 Acanthixalus spinosus
## 3 Acris crepitans 27.00 1.33 4.5 Acris crepitans
## 4 Acris gryllus 24.50 1.30 8.5 Acris gryllus
## 5 Adelotus brevis 31.25 1.80 270.0 Adelotus brevis
## 6 Adenomera andreae 24.00 3.00 15.0 Adenomera andreae
## 7 Adenomera hylaedactyla 26.50 2.80 14.5 Adenomera hylaedactyla
## 8 Afrixalus dorsalis 27.50 2.00 25.0 Afrixalus dorsalis
## 9 Afrixalus fornasini 35.00 1.60 80.0 Afrixalus fornasini
## 10 Agalychnis annae 69.60 3.53 104.5 Agalychnis annae
## 11 Agalychnis callidryas 65.70 3.70 121.5 Agalychnis callidryas
## 12 Agalychnis moreletii 74.45 3.65 72.5 Agalychnis moreletii
## 13 Agalychnis saltator 54.75 3.55 57.0 Agalychnis saltator
## 14 Agalychnis spurrelli 76.50 3.85 55.5 Agalychnis spurrelli
## 15 Aglyptodactylus laticeps 60.40 1.68 3458.5 Aglyptodactylus laticeps
## IUCN
## 1 NT
## 2 LC
## 3 LC
## 4 LC
## 5 NT
## 6 LC
## 7 LC
## 8 LC
## 9 LC
## 10 EN
## 11 LC
## 12 LC
## 13 LC
## 14 LC
## 15 VU
We have now combined the two data sets and can start to explore the data, such as whether any of the three life history traits (body size, egg size or clutch size) is correlated with a specific conservation risk status:
summary(gm.dat$IUCN) #number of species per IUCN category
## CR DD EN EX LC NT VU
## 11 2 29 1 388 22 17
# as EX and DD have very few individuals, we will drop these from the analysis for this example:
gm.dat<-gm.dat[gm.dat$IUCN!="EX" & gm.dat$IUCN!="DD",]
gm.dat$IUCN<-factor(gm.dat$IUCN) # reset levels
gm.dat$IUCN= factor(gm.dat$IUCN,c("LC","NT","VU","EN","CR")) #re-order factors in increasing risk category (to order the plot in this way)
# plot:
boxplot(gm.dat$SVL~gm.dat$IUCN, lty=1, col="grey90", las=1, pch=20, frame=F,log="y", ylim=c(10,250), ylab="Body Size")
boxplot(gm.dat$Egg~gm.dat$IUCN, lty=1, col="grey90", las=1, pch=20, frame=F,log="y", ylim=c(0.2,10), ylab="Egg Size")
boxplot(gm.dat$Clutch~gm.dat$IUCN, lty=1, col="grey90", las=1, pch=20, frame=F, log="y", ylim=c(1,100000), ylab="Clutch Size")
Using the phylogeny provided by Gomez-Mestre (adpapted from that of Pyron and Wiens 2011, MPE 61(2):543-583), we can test differences in life history traits across IUCN risk categories using a phylogenetic ANOVA (phytools package).
#adjust phylogeny to match dataset
gm.tree<-drop.tip(gm.tree, gm.tree$tip.label[!gm.tree$tip.label %in% gsub(gm.dat$Species, pattern = " ", replacement = "_")])
all(gm.tree$tip.label==gsub(gm.dat$Species, pattern = " ", replacement = "_"))# check rownames match
## [1] TRUE
## BODY SIZE
phylANOVA(tree = gm.tree, x = gm.dat$IUCN, y=log10(gm.dat$SVL))
## Warning: no labels for x. Assuming order of tree$tip.label.
##
## Warning: no labels for y. Assuming order of tree$tip.label.
## ANOVA table: Phylogenetic ANOVA
##
## Response: y
## Sum Sq Mean Sq F value Pr(>F)
## x 0.103651 0.025913 0.531466 0.818
## Residual 22.525855 0.048757
##
## P-value based on simulation.
## ---------
##
## Pairwise posthoc test using method = "holm"
##
## Pairwise t-values:
## LC NT VU EN CR
## LC 0.000000 -0.714187 0.266664 1.061201 0.599842
## NT 0.714187 0.000000 0.689331 1.276171 0.920528
## VU -0.266664 -0.689331 0.000000 0.452479 0.303210
## EN -1.061201 -1.276171 -0.452479 0.000000 -0.058984
## CR -0.599842 -0.920528 -0.303210 0.058984 0.000000
##
## Pairwise corrected P-values:
## LC NT VU EN CR
## LC 1 1 1 1 1
## NT 1 1 1 1 1
## VU 1 1 1 1 1
## EN 1 1 1 1 1
## CR 1 1 1 1 1
## ---------
## EGG SIZE
phylANOVA(tree = gm.tree, x = gm.dat$IUCN, y=log10(gm.dat$Egg))
## Warning: no labels for x. Assuming order of tree$tip.label.
##
## Warning: no labels for y. Assuming order of tree$tip.label.
## ANOVA table: Phylogenetic ANOVA
##
## Response: y
## Sum Sq Mean Sq F value Pr(>F)
## x 1.585814 0.396454 8.573098 0.001
## Residual 21.364687 0.046244
##
## P-value based on simulation.
## ---------
##
## Pairwise posthoc test using method = "holm"
##
## Pairwise t-values:
## LC NT VU EN CR
## LC 0.000000 -1.417651 -3.007683 -4.895663 -1.666578
## NT 1.417651 0.000000 -1.345792 -2.234516 -0.538544
## VU 3.007683 1.345792 0.000000 -0.645530 0.609155
## EN 4.895663 2.234516 0.645530 0.000000 1.222507
## CR 1.666578 0.538544 -0.609155 -1.222507 0.000000
##
## Pairwise corrected P-values:
## LC NT VU EN CR
## LC 1.000 1.000 0.207 0.010 0.567
## NT 1.000 1.000 0.654 0.208 1.000
## VU 0.207 0.654 1.000 1.000 1.000
## EN 0.010 0.208 1.000 1.000 1.000
## CR 0.567 1.000 1.000 1.000 1.000
## ---------
## CLUTCH SIZE
phylANOVA(tree = gm.tree, x = gm.dat$IUCN, y=log10(gm.dat$Clutch))
## Warning: no labels for x. Assuming order of tree$tip.label.
##
## Warning: no labels for y. Assuming order of tree$tip.label.
## ANOVA table: Phylogenetic ANOVA
##
## Response: y
## Sum Sq Mean Sq F value Pr(>F)
## x 22.79925 5.699813 7.513786 0.002
## Residual 350.46427 0.758581
##
## P-value based on simulation.
## ---------
##
## Pairwise posthoc test using method = "holm"
##
## Pairwise t-values:
## LC NT VU EN CR
## LC 0.000000 -0.170903 1.401420 4.432277 3.176205
## NT 0.170903 0.000000 1.191362 3.150380 2.731295
## VU -1.401420 -1.191362 0.000000 1.656503 1.612293
## EN -4.432277 -3.150380 -1.656503 0.000000 0.332907
## CR -3.176205 -2.731295 -1.612293 -0.332907 0.000000
##
## Pairwise corrected P-values:
## LC NT VU EN CR
## LC 1.00 1.000 1.000 0.010 0.01
## NT 1.00 1.000 0.800 0.016 0.07
## VU 1.00 0.800 1.000 0.594 0.80
## EN 0.01 0.016 0.594 1.000 1.00
## CR 0.01 0.070 0.800 1.000 1.00
## ---------
Interestingly enough, this analysis suggests that although there is no trend in body size across IUCN risk categories and only one significant pair-wise difference in egg size (endangered species have larger eggs than least concern species), species which are listed under greater threat categories (endangered, EN and critically endangered, CR) have significantly smaller clutch sizes than species ranked under lesser threat categories (least concern, LC and near threatened, NT). The result that low fecundity species are at greater extinction risk conforms to the results of Cooper et al. 2008, but their more inclusive study stressed that this link may not be direct and rather geographic range size is a more important ecological variable determining extinction risk.