There are now many methods which could be used to build phylogenetic tree. However, as I know, ML is thought to be the best one. Because we do not know what really happened in the evolutionary history, I was wondering whether people were able to say which method might be better? So why is ML the best one in most cases? Thanks!
Theoretically speaking, NJ only uses pairwise distance and ignores the detailed alignment. It does not fully utilize the information in a multi-alignment. Parsimony in some sense uses the simplest evolution model, which may deviate from the true evolution. ML and Bayesian use more information in a multi-alignment and allow you to define a model. They are better in theory. When I was working on phylogenetics, Bayesian methods gave excessively high confidence score. Personally, I did not like this "feature". I do not know if this has been resolved.
Practically speaking, ML/Bayesian are also believed to be the best. By "best", we usually mean for hundreds of branches, ML tends to recover more of them correctly. However, frequently NJ and parsimony may give a better local topology than ML. That is why we usually try multiple methods to build a tree. We cannot simply trust the ML tree alone.
There are multiple ways to evaluate the accuracy of a tree building algorithm. For gene trees with a known species phylogeny, my favorite is to infer gene losses/duplications with tree reconciliation. Given hundreds of gene trees, a method that leads to fewer overall gene losses/duplications tends to be better. With this methods, my PhD thesis suggests ML is a little better. TreeFam and Ensembl-Compara also use gene losses/duplications for tree building.
There is still an ongoing debate about Maximum Likelihood and Bayesian phylogenetic methods. Really it comes down to understanding the uncertainly.
Question 1: What does my tree look like?
Question 2: How confident am I that I have the correct tree. At this point you want a probabilistic way of determining the "goodness" of your tree. Both Maximum likelihood and Bayesian methods can provide answers.
I wouldn't say ML is the best method for phylogenetic reconstruction, but it definitely provides reasonable trade-off between computation time and the quality of the results.
But keep in mind, that for some scenarios even neighbour joining (NJ) would be enough, while for some ML and Bayesian approach will fail.
There are some paper that actually compare performance of different algorithms. the one below showed that ML and Bayesian trees algorithm outperform NJ, and MP one in accuracy, and there are some factor such as branch length, and neighbor branch length affect the accuracy.
Ogden, T.H., and M.S. Rosenberg (2006) Multiple sequence alignment accuracy and phylogenetic inference. Systematic Biology 55(2):314–328. (freely accesible here)
Having said that, if you want to just show a sequences and its closest relatives, then most of the algorithm will make a good work. For me the selection of the algorithm depends on time (which used to be a bigger problem before), accuracy, and interpretability (I prefer an algorithm that outputs only one tree).
Can you please provide a reference on a source that states maximum likelihood "to be the best way to build phylogenetic tree"?