Probabilistic modeling has been applied to many different areas, including speech recognition, network performance analysis, and computational radiology. An overview of probabilistic modeling is given in the first chapter, and the authors effectively introduce the concepts without heavy abstract formalism, which for completeness they delegate to the last chapter of the book. Bayesian parameter estimation is introduced as well as maximum likelihood estimation. The authors take a pragmatic attitude in the utility of these different approaches, with both being developed in the book.
This is followed by a treatment of pairwise alignment in Chapter Two, which begins with substitution matrices. They point out, via some exercises, the role of physics in influencing particular alignments (hydrophobicity for example). Global alignment via the Gotoh algorithm and local alignment via the Smith-Waterman algorithm, are both discussed very effectively. Finite state machines with accompanying diagrams are used to discuss dynamic programming approaches to sequence alignment. The BLAST and FASTA packages are briefly discussed, along with the PAM and BLOSUM matrices.
Hidden Markov models are treated thoroughly in the next chapter with the Viterbi and Baum-Welch algorithms playing the central role. HIdden Markov models are then used in Chapter 4 for pairwise alignment. State diagrams are again used very effectively to illustrate the relevant ideas. Profile hidden Markov models which, according to the authors are the most popular application of hidden Markov models, are treated in detail in the next chapter. A very surprising application of Voronoi diagrams from computational geometry to weighting training sequences is given.
Several different approaches, such as Barton-Sternberg, CLUSTALW, Feng-Doolittle, MSA, simulated annealing, and Gibbs sampling are applied to multiple sequence alignment methods in Chapter 6. It is very well written, with the only disappointment being that only one exercise is given in the entire chapter. Phylogenetic trees are covered in Chapter 7, with emphasis placed on tree building algorithms using parsimony. The next chapter discusses the same topic from a probabilistic perspective. This to me was the most interesting part of the book as it connects the sequence alignment algorithms with evolutionary models.
The authors switch gears starting with the next chapter on transformational grammars. It is intriguing to see how concepts used in compiler construction can be generalized to the probabilistic case and then applied to computational biology. The PROSITE database is given as an example of the application of regular grammars to sequence matching. This chapter is fascinating reading, and there are some straightforward exercises illustrating the main points.
The last chapter covers RNA structure analysis, which introduces the concept of a pseudoknot. These are not to be confused with the usual knot constructions that can be applied to the topology of DNA, but instead result from the existence of non-nested base pairs in RNA sequences. The authors discuss many other techniques used in RNA sequence analysis and take care to point out which ones are more practical from a computational point of view. Surprisingly, genetic algorithms and algorithms based on Monte Carlo sampling are not discussed in the book, but the authors do give references for the interested reader.
The best attribute of this book is that the authors take a pragmatic point of view of how mathematics can be applied to problems in computational biology. They are not dogmatic about any particular approach, but instead fit the algorithm to the problem at hand.
As the title implies, "Biological Sequence Analysis" focuses almost exlusively on sequence analysis. After a brief overview of statistics (more a reminder than an introduction), the first half of the book is devoted to alignment algorithms. These algorithms take pairs of sequences of bases making up DNA or sequences of amino acids making up proteins and provide optimal alignments of the sequences or of subsequences according to various statistical models of match likelihoods. Methods analyzed include edit distances with various substitution and gapping penalties (penalties for sections that don't match), Hidden Markov Models (HMMs) for alignment and also for classification against families, and finally, multiple sequence alignment, where alignment is generalized from pairs to sets of sequences. I found the section on building phylogenetic trees by means of hierarchical clustering to be the most fascinating section of the book (especially given its practical application to classifying wine varietals!). The remainder of the book is devoted to higher-order grammars such as context-free grammars, and their stochastic generalization. Stochastic context-free grammars are applied to the analysis of RNA secondary structure (folding). There is a good discussion of the CYK dynamic programming algorithm for non-deterministic context-free grammar parsing; an algorithm that is easily applied to finding the best parse in a probabilistic grammar. The presentations of the dynamic programming algorithms for HMM decoding, edit distance minimization, hierarchical clustering and context-free grammar parsing are as good as I've seen anywhere. They are precise, insightful, and informative without being overly subscripted. The illustrations provided are extremely helpful, including their positioning on pages where they're relevant.
This book is aimed at biologists trying to learn about algorithms, which is clear from the terse descriptions of the underlying biological problems. The technical details were so clear, though, that I was able to easily follow the algorithms even if I wasn't always sure about the genetic applications. After studying some introductions to genetics and coming back to this book, I was able to follow the application discussions much more easily. This book assumes the reader is familiar with algorithms and is comfortable manipulating a lot of statistics; a gentler introduction to exactly the same mathematics and algorithms can be found in Jurafsky and Martin's "Speech and Language Processing". For biologists who want to see how sequence statistics and algorithms applied to language, I would suggest Manning and Schuetze's "Foundations of Statistical Natural Language Processing". Although it is much more demanding computationally, more details on all of these algorithms, as well as some more background on the biology, along with some really nifty complexity analysis can be found in Dan Gusfield's "Algorithms on Strings, Trees and Sequences".
In these days of fly-by-night copy-editing and typesetting, I really appreciate Cambridge University Press's elegant style and attention to detail. Durbin, Eddy, Krogh and Mitchison's "Biological Sequence Analysis" is as beautiful and readable as it is useful.