# ASR OF TROPHIC HABITS IN CALLIPHORIDAE
## BUILDING THE DATASET
after having the tree, you need a "traits file" with species sorted just like the tree; we do this in R
```
# this is how the traits file looked initially:
Auchmeromyia_bequaerti P
Auchmeromyia_luteola P
Cordylobia_anthropophaga P
Pachychoeromyia_praegrandis P
# one column for the species and one for the trait (you can use only ONE letter for the trait)
# R code to sort the species:
tree <- read.nexus(file = "TREE5_zumpt.nex")
data_zumpt <- read.table("phenotype_zumpt.txt")
# is the tree tip order the same as the V1 order?
phylo_species <- tree$tip.label
data_zumpt_sorted <- data_zumpt[match(phylo_species, data_zumpt$V1),]
sum(tree$tip.label == data_zumpt_sorted$V1) == nrow(data_zumpt_sorted)
# prints TRUE, so ready to go:
#write table
write.table(data_zumpt_sorted, "data_zumpt_sorted.txt", quote=F, row.names=F, col.names=F, sep='\t')
```
We also need the help of R to make a "control file" with will be used to pass the analyses commands to bayestraits; first the packages I will be using:
```
library(here)
library(posterior)
library(tidybayes)
library(coda)
library(btw) # remotes::install_github('rgriff23/btw')
library(tidytree)
library(ape)
library(tidyverse)
library(patchwork)
library(tidyr)
library(dplyr)
library(readr)
library(phytools)
library(EBImage)
library(ggtree)
```
the next steps are necessary to tell bayestraits to reconstruct ALL internal nodes in the tree (it will not be done by default):
```
# convert tree to a dataframe
tree_data <- as_tibble(tree)
# create an empty column for tip labels
d_nodes <- tibble(nodes = dplyr::filter(tree_data, is.na(label)) %>% pull(node),
label = NA)
for(i in 1:nrow(d_nodes)){
temp_node = d_nodes$nodes[i]
temp_offspring <- offspring(tree_data, temp_node, tiponly = TRUE)
d_nodes$label[i] <- temp_offspring$label %>% paste0(collapse = ' ')
}
d_nodes <- mutate(d_nodes, first_command = paste('AddTag', paste('T', nodes, sep = ''), label, sep = ' '),
second_command = paste('AddNode', nodes, paste('T', nodes, sep = ''), sep = ' '))
to_save <- select(d_nodes, first_command, second_command) %>%
pivot_longer(everything(), names_to = 'blah', values_to = 'command') %>%
pull(command)
write.table(to_save, "tags_zumpt", quote=FALSE, col.names = FALSE, row.names = FALSE)
```
Now we create the control file using these info generated by the previous R script; this is how the control file looks like (the big block starting with AddTag was the one built in R):
```
1 # tells the program to run in multistate mode
2 # run in MCMC mode (1 would be ML)
RJHP exp 0 2 # set a reverse jump hyperprior with an exponential distribution seeded from 0 to 2
Iterations 10000000 # number of iterations
Sample 10000 # frequency of sampling
Burnin 1000000 # set burnin
Stones 100 10000 # this will be used to run a BayesFactor test
LogFile LOG_zumpt_exp02 # name of output
AddTag T55 Pachychoeromyia_praegrandis Auchmeromyia_luteola Auchmeromyia_bequaerti Cordylobia_anthropophaga Aldrichina_grahami Calliphora_vomitoria Calliphora_nigribarbis Calliphora_lata Calliphora_lopesi Calliphora_nigribasis Calliphora_vicina Calliphora_croceipalpis Sarconesia_chlorogaster Lucilia_silvarum Lucilia_richardsi Lucilia_sericata Lucilia_cuprina Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis Lucilia_caesar Hemipyrellia_pulchra Hemipyrellia_fernandica Hemipyrellia_ligurriens Lucilia_lucigerens Lucilia_cluvia Lucilia_mexicana Lucilia_eximia Lucilia_caeruleiviridis Protophormia_terraenovae Phormia_regina Protocalliphora_sialia Protocalliphora_azurea Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps Chrysomya_marginalis Chrysomya_putoria Chrysomya_chloropyga Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala Chrysomya_bezziana Chrysomya_chani Compsomyiops_verena Cochliomyia_minima Cochliomyia_macellaria Cochliomyia_hominivorax Paralucilia_pseudolyrcea Paralucilia_fulvinota Paralucilia_paraensis Hemilucilia_semidiaphana Hemilucilia_segmentaria
AddNode 55 T55
AddTag T56 Pachychoeromyia_praegrandis Auchmeromyia_luteola Auchmeromyia_bequaerti Cordylobia_anthropophaga
AddNode 56 T56
AddTag T57 Pachychoeromyia_praegrandis Auchmeromyia_luteola Auchmeromyia_bequaerti
AddNode 57 T57
AddTag T58 Auchmeromyia_luteola Auchmeromyia_bequaerti
AddNode 58 T58
AddTag T59 Aldrichina_grahami Calliphora_vomitoria Calliphora_nigribarbis Calliphora_lata Calliphora_lopesi Calliphora_nigribasis Calliphora_vicina Calliphora_croceipalpis Sarconesia_chlorogaster Lucilia_silvarum Lucilia_richardsi Lucilia_sericata Lucilia_cuprina Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis Lucilia_caesar Hemipyrellia_pulchra Hemipyrellia_fernandica Hemipyrellia_ligurriens Lucilia_lucigerens Lucilia_cluvia Lucilia_mexicana Lucilia_eximia Lucilia_caeruleiviridis Protophormia_terraenovae Phormia_regina Protocalliphora_sialia Protocalliphora_azurea Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps Chrysomya_marginalis Chrysomya_putoria Chrysomya_chloropyga Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala Chrysomya_bezziana Chrysomya_chani Compsomyiops_verena Cochliomyia_minima Cochliomyia_macellaria Cochliomyia_hominivorax Paralucilia_pseudolyrcea Paralucilia_fulvinota Paralucilia_paraensis Hemilucilia_semidiaphana Hemilucilia_segmentaria
AddNode 59 T59
AddTag T60 Aldrichina_grahami Calliphora_vomitoria Calliphora_nigribarbis Calliphora_lata Calliphora_lopesi Calliphora_nigribasis Calliphora_vicina Calliphora_croceipalpis Sarconesia_chlorogaster Lucilia_silvarum Lucilia_richardsi Lucilia_sericata Lucilia_cuprina Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis Lucilia_caesar Hemipyrellia_pulchra Hemipyrellia_fernandica Hemipyrellia_ligurriens Lucilia_lucigerens Lucilia_cluvia Lucilia_mexicana Lucilia_eximia Lucilia_caeruleiviridis
AddNode 60 T60
AddTag T61 Aldrichina_grahami Calliphora_vomitoria Calliphora_nigribarbis Calliphora_lata Calliphora_lopesi Calliphora_nigribasis Calliphora_vicina Calliphora_croceipalpis
AddNode 61 T61
AddTag T62 Calliphora_vomitoria Calliphora_nigribarbis Calliphora_lata Calliphora_lopesi Calliphora_nigribasis Calliphora_vicina Calliphora_croceipalpis
AddNode 62 T62
AddTag T63 Calliphora_vomitoria Calliphora_nigribarbis Calliphora_lata Calliphora_lopesi Calliphora_nigribasis
AddNode 63 T63
AddTag T64 Calliphora_vomitoria Calliphora_nigribarbis Calliphora_lata Calliphora_lopesi
AddNode 64 T64
AddTag T65 Calliphora_nigribarbis Calliphora_lata Calliphora_lopesi
AddNode 65 T65
AddTag T66 Calliphora_nigribarbis Calliphora_lata
AddNode 66 T66
AddTag T67 Calliphora_vicina Calliphora_croceipalpis
AddNode 67 T67
AddTag T68 Sarconesia_chlorogaster Lucilia_silvarum Lucilia_richardsi Lucilia_sericata Lucilia_cuprina Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis Lucilia_caesar Hemipyrellia_pulchra Hemipyrellia_fernandica Hemipyrellia_ligurriens Lucilia_lucigerens Lucilia_cluvia Lucilia_mexicana Lucilia_eximia Lucilia_caeruleiviridis
AddNode 68 T68
AddTag T69 Lucilia_silvarum Lucilia_richardsi Lucilia_sericata Lucilia_cuprina Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis Lucilia_caesar Hemipyrellia_pulchra Hemipyrellia_fernandica Hemipyrellia_ligurriens Lucilia_lucigerens Lucilia_cluvia Lucilia_mexicana Lucilia_eximia Lucilia_caeruleiviridis
AddNode 69 T69
AddTag T70 Lucilia_silvarum Lucilia_richardsi Lucilia_sericata Lucilia_cuprina Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis Lucilia_caesar Hemipyrellia_pulchra Hemipyrellia_fernandica Hemipyrellia_ligurriens
AddNode 70 T70
AddTag T71 Lucilia_silvarum Lucilia_richardsi Lucilia_sericata Lucilia_cuprina
AddNode 71 T71
AddTag T72 Lucilia_silvarum Lucilia_richardsi Lucilia_sericata
AddNode 72 T72
AddTag T73 Lucilia_silvarum Lucilia_richardsi
AddNode 73 T73
AddTag T74 Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis Lucilia_caesar Hemipyrellia_pulchra Hemipyrellia_fernandica Hemipyrellia_ligurriens
AddNode 74 T74
AddTag T75 Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis Lucilia_caesar
AddNode 75 T75
AddTag T76 Lucilia_porphyrina Lucilia_ampullacea Lucilia_papuensis
AddNode 76 T76
AddTag T77 Lucilia_porphyrina Lucilia_ampullacea
AddNode 77 T77
AddTag T78 Hemipyrellia_pulchra Hemipyrellia_fernandica Hemipyrellia_ligurriens
AddNode 78 T78
AddTag T79 Hemipyrellia_pulchra Hemipyrellia_fernandica
AddNode 79 T79
AddTag T80 Lucilia_lucigerens Lucilia_cluvia Lucilia_mexicana Lucilia_eximia Lucilia_caeruleiviridis
AddNode 80 T80
AddTag T81 Lucilia_lucigerens Lucilia_cluvia
AddNode 81 T81
AddTag T82 Lucilia_mexicana Lucilia_eximia Lucilia_caeruleiviridis
AddNode 82 T82
AddTag T83 Lucilia_mexicana Lucilia_eximia
AddNode 83 T83
AddTag T84 Protophormia_terraenovae Phormia_regina Protocalliphora_sialia Protocalliphora_azurea Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps Chrysomya_marginalis Chrysomya_putoria Chrysomya_chloropyga Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala Chrysomya_bezziana Chrysomya_chani Compsomyiops_verena Cochliomyia_minima Cochliomyia_macellaria Cochliomyia_hominivorax Paralucilia_pseudolyrcea Paralucilia_fulvinota Paralucilia_paraensis Hemilucilia_semidiaphana Hemilucilia_segmentaria
AddNode 84 T84
AddTag T85 Protophormia_terraenovae Phormia_regina Protocalliphora_sialia Protocalliphora_azurea Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps Chrysomya_marginalis Chrysomya_putoria Chrysomya_chloropyga Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala Chrysomya_bezziana Chrysomya_chani
AddNode 85 T85
AddTag T86 Protophormia_terraenovae Phormia_regina
AddNode 86 T86
AddTag T87 Protocalliphora_sialia Protocalliphora_azurea Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps Chrysomya_marginalis Chrysomya_putoria Chrysomya_chloropyga Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala Chrysomya_bezziana Chrysomya_chani
AddNode 87 T87
AddTag T88 Protocalliphora_sialia Protocalliphora_azurea
AddNode 88 T88
AddTag T89 Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps Chrysomya_marginalis Chrysomya_putoria Chrysomya_chloropyga Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala Chrysomya_bezziana Chrysomya_chani
AddNode 89 T89
AddTag T90 Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps Chrysomya_marginalis Chrysomya_putoria Chrysomya_chloropyga
AddNode 90 T90
AddTag T91 Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps Chrysomya_marginalis
AddNode 91 T91
AddTag T92 Chrysomya_villeneuvi Chrysomya_rufifacies Chrysomya_albiceps
AddNode 92 T92
AddTag T93 Chrysomya_rufifacies Chrysomya_albiceps
AddNode 93 T93
AddTag T94 Chrysomya_putoria Chrysomya_chloropyga
AddNode 94 T94
AddTag T95 Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala Chrysomya_bezziana Chrysomya_chani
AddNode 95 T95
AddTag T96 Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala Chrysomya_bezziana
AddNode 96 T96
AddTag T97 Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes Chrysomya_megacephala
AddNode 97 T97
AddTag T98 Chrysomya_thanomthini Chrysomya_pinguis Chrysomya_nigripes
AddNode 98 T98
AddTag T99 Chrysomya_pinguis Chrysomya_nigripes
AddNode 99 T99
AddTag T100 Compsomyiops_verena Cochliomyia_minima Cochliomyia_macellaria Cochliomyia_hominivorax Paralucilia_pseudolyrcea Paralucilia_fulvinota Paralucilia_paraensis Hemilucilia_semidiaphana Hemilucilia_segmentaria
AddNode 100 T100
AddTag T101 Compsomyiops_verena Cochliomyia_minima Cochliomyia_macellaria Cochliomyia_hominivorax Paralucilia_pseudolyrcea Paralucilia_fulvinota Paralucilia_paraensis
AddNode 101 T101
AddTag T102 Cochliomyia_minima Cochliomyia_macellaria Cochliomyia_hominivorax Paralucilia_pseudolyrcea Paralucilia_fulvinota Paralucilia_paraensis
AddNode 102 T102
AddTag T103 Cochliomyia_minima Cochliomyia_macellaria Cochliomyia_hominivorax
AddNode 103 T103
AddTag T104 Cochliomyia_minima Cochliomyia_macellaria
AddNode 104 T104
AddTag T105 Paralucilia_pseudolyrcea Paralucilia_fulvinota Paralucilia_paraensis
AddNode 105 T105
AddTag T106 Paralucilia_pseudolyrcea Paralucilia_fulvinota
AddNode 106 T106
AddTag T107 Hemilucilia_semidiaphana Hemilucilia_segmentaria
AddNode 107 T107
Run
```
To run bayestraits:
```
./BayesTraitsV4 TREE5_zumpt.nex data_zumpt_sorted.txt < control_zumpt_covarion.txt
```
Now we take the output and remove all unecessary data keeping only the reconstructed states and calculate the average. Easy to do in excel. Then parse an awk to get the following format:
```
awk -v RS='\t' '{printf $0 "\t"} NR%3 == 0 {print ""}' input.txt > output
```
The final file should look like:
```
0.409900477777777 0.173865247777778 0.416234034444443
0.252614996666667 0.500092979999999 0.247291871111112
0.197729334444445 0.612524225555555 0.189746361111111
0.155221598888889 0.694552817777778 0.150225552222222
```
where each row is a node in the phylogeny and each column is the probability of one of the 3 states
Lastly we add a new column with the corresponding node number. Nodes will always start with n+1 where n is the number of taxa in the phylogeny. So in this case, where we have 54 taxa, node numbers start with 55; the output will look like:
```
X0 X1 X2 node
0.409900477777777 0.173865247777778 0.416234034444443 55
0.252614996666667 0.500092979999999 0.247291871111112 56
0.197729334444445 0.612524225555555 0.189746361111111 57
0.155221598888889 0.694552817777778 0.150225552222222 58
0.421222236666667 0.107296277777778 0.471481452222222 59
```