This wiki presents some minor edits of Joe Bielawski's (much prettier) PAML tutorial PAML
2013 Workshop on Molecular Evolution at MBL
The objective of this activity is to help you understand how to use different codon models, and how to test for selection using PAML (and specifically the CODEML program).
Here are the slides for the PAML learning activity: Demo.pdf.
Here is a copy of the book chapter that accompanies these exercises: Book_Chapter.pdf.
Log in to the cluster.
Download and unzip the files for these exercises:
wget https://molevol.mbl.edu/wiki/images/5/53/Woodshole2013_paml_lab.zip unzip Woodshole2013_paml_lab.zip cd woodshole2013_paml_lab
Don't forget to load the software!
module load bioware
The objective of this activity is to use CODEML to evaluate the likelihood of the GstD1 sequences for a variety of ω values. Plot log-likelihood scores against the values of ω and determine the maximum likelihood estimate of ω. Check your finding by running CODEML’s hill-climbing algorithm.
1. Change to the directory for exercise 1
cd ex1 ls
and familiarize yourself with the files there (ex1_codeml.ctl.txt, ex1_seqfile.txt). Pay close attention to the modified control file called ex1_codeml.ctl.txt. The standard name for the control file is codeml.ctl. If you don't give a specific path, codeml will look for a file with that name. Open the control file (the .ctl) using a text editor (e.g. nano or cyberduck), and change the sequence file parameter to the name of your sequence file (ex1_seqfile.txt) "seqfile = ex1_seqfile.txt"
2. Run CODEML using the command in the control file included.
3. Familiarize yourself with the results ( an example is here : helpfile). If you have not edited the control file the results will be written to a file called results_0.0001.txt. Identify the line within the results file that gives the likelihood score for the example dataset.
The next step is to change the control files to different values of omega and re-run CODEML. The objective is to compute the likelihood of the example dataset given a fixed value of omega.
4. Change the name of your result file (via outfile= in the control file) or you will overwrite your previous results!
5. Change the fixed value for omega by changing the value for omega= in the control file. The values for this exercise are provided as comments at the bottom of the example control file that has been provided to you.
6. Repeat steps 4 and 5 for each value of omega given in the comments of the example control file. Use your favorite spread sheet or statistical package to plot the likelihood score (y-axis) against the fixed value for omega (x-axis). Use a logarithmic scale for the x-axis (do not transform omega). Your figure should look something like this: FigE1. From the plot, try to guess the value of omega that will maximize the likelihood score (i.e., the MLE).
7. Now change the control file so that CODEML will use its hill-climbing algorithm to find the MLE; set fix_omega=0 in the control file. Compare the result to your guess from step 7.
In this exercise you will investigate the sensitivity of your estimate of ω to the transition/transversion ratio (κ), and to the assumed model for codon frequencies (π’s). After you collect the required data you will determine which assumptions yield the largest and smallest values of S, and what effect it as on the value of ω.
1. Change to the directory for exercise 2
cd ../ex2 ls
Familiarize yourself with the files there (ex2_codeml.ctl.txt, ex2_seqfile.txt). Edit the ex2_codeml.ctl.txt to reflect your sequence file.
2. Run CODEML using the settings in the control file for exercise 2, ex2_codeml.ctl.txt.
Familiarize yourself with the results (ex2_HelpFile.pdf). In addition to the likelihood score you must be able to identify the part of the result file that provides estimates of the following:
a. Number of synonymous or nonsynonymous sites (S and N)
b. Synonymous and nonsynonymous rates (dS and dN)
3. As in exercise 1, you will need to change the control files and re-run CODEML. The objective is to compute the likelihood of the example dataset under different model assumptions. To do this you must:
a. Change the name of the main result file (via outfile= in the control file) or you will overwrite your previous results
b. Change the model assumptions about codon frequencies (via CodonFreq=) and kappa (via kappa= and fix_kappa=).
4. Repeat step 3 for each set of assumptions about codon frequencies and kappa given as comments at the bottom of the example control file.
5. In your favorite spreadsheet program create a table like “Table E2” in the slides (TableE2.pdf) and fill it in with your results.
6. Use your table to determine which assumptions yield the largest and smallest values of S. What is the effect on omega?
The objective of this exercise is to use three LRTs to evaluate the following hypotheses: (1) the mutation rate of Ldh-C has increased relative to Ldh-A, (2) a burst of positive selection for functional divergence occurred following the duplication event that gave rise to Ldh-C, and (3) there was a long term shift in selective constraints following the duplication event that gave rise to Ldh-C.
1. Change to the directory for exercise 3
cd ../ex3 ls
Familiarize yourself with the files there (codeml.ctl, seqfile.txt, treeH0.txt, treeH1.txt, treeH2.txt, treeH3.txt). Edit the codeml.ctl file to reflect the correct sequence file. The tree files represent different hypotheses denoted H0, H1, H2 & H3 (LDH_gene_tree.pdf). For a thorough explanation of the tree hypothesis files see: Tree file explanation These hypotheses represent the following concepts: H0: homogeneous selection pressure over the tree H1: episodic change in selection pressure in Ldh-C (only in the branch that immediately follows the gene duplication event). H2: Long term shift in selection pressure in Ldh-C only; Ldh-C has a permanent change in selection pressure (as compared to its ancestors) whereas Ldh-A remains subject to the ancestral level of selection pressure. H3: Long term shift in selection on both Ldh-C and Ldh-A; those lineages are subject to selection pressures different from each other and from the ancestor.
2. Run CODEML using the settings in the control file for Exercise 3.
Familiarize yourself with the results (ex3_HelpFile.pdf). In addition to the likelihood score you must be able to identify the branch-specific estimates of the omega parameter. (In the first run, the branch specific values for omega will all be the same. In later runs there will be differences among some branches).
3. As in the previous exercises, you will need to change the control files and re-run CODEML. The objective is to compute the likelihood, and estimate omega parameters, under different models of how selection pressure changes in different parts of the tree. Because the relevant model information is contained in the tree file, you will need several tree files (obtained from the course web site) and change the control file so that it reads the different tree files.
4. As always, you should change the name of the main result file (via outfile= in the control file) or you will overwrite your previous results.
5. Change the model assumptions about branch specific omega values by changing the tree files (via treefile= and model=) set within the control file.
6. Repeat step 3 for each of the four tree files that have been provided to you. Again, keep track of your results by using a table like “Table E3” shown in the slides (TableE3.pdf). In addition, carry out likelihood ratio tests (LRT) of the hypotheses below. See the lecture notes for additional details about LRTs. Use 1 degree of freedom to obtain the P-value for each LRT. Helpful: Chi-Square Calculator. H0 vs. H1 H0 vs. H2 H2 vs. H3
The objective of this exercise is to use a series of LRTs to test for sites evolving under positive selection in the nef gene. If you find significant evidence for positive selection, then identify the involved sites by using empirical Bayes methods.
1. Change to the directory for exercise 4
cd ../ex4 ls
Familiarize yourself with the files there. (ex4_codeml.ctl.txt, ex4_seqfile.txt, treeM0.txt, treeM1.txt, treeM2.txt, treeM3.txt, treeM7.txt, treeM8.txt).
2. If you plan to run two or more models at the same time, then create a separate directory for each run and place a sequence file, control file and tree file in each one.
3. As in all the previous exercises, you will need to change the control file and re-run CODEML several times. In this case you will be fitting six different codon models (M0, M1a, M2a, M3, M7 & M8) to the example dataset.
a. If you are running your analyses sequentially in the same directory, then you should change the name of the main result file (via outfile= in the control file) or you will overwrite your previous results.
b. Set the tree file with treefile=. I have supplied tree files pre-loaded with the ML branch lengths for each model (hence you need to set a different tree for each model). This will greatly speed up your analyses, giving you more “beer time”. See the example control file for more details about treefile names.
c. Set the codon model with NSsites=.
d. Fix the value of kappa at the ML estimate with kappa=. Again, this will help speed up the analysis. See the control file for the value of kappa for each model.
e. For some models you will also need to set the number of categories (ncatG) in the omega distribution: For M3 set ncatG=3 For M7 set ncatG=10 For M8 set ncatG=10 f. Once the analysis is complete, rename the rst file because subsequent runs will overwrite it! g. Repeat steps a. through f. for each of the six codon models listed above.
5. In addition, carry out the following likelihood ratio tests: M0 vs. M3 (4 degrees of freedom) M1a vs. M2a (2 degrees of freedom) M7 vs. M8 (2 degrees of freedom)
6. Lastly, open the rst file generated when you ran model M3 (ex4_rst_HelpFile.pdf). Locate the columns of posterior probabilities for each site under the three site-categories of this model. Use these data to reproduce the plot shown in the slides.
This is not part of the exercises, it's just for your future information.
To run the analyses described here, you will need a codon alignment (i.e. a nucleotide alignment that, when translated, corresponds perfectly to a good amino acid alignment). You can't just align nucleotides because most alignment programs don't look for codons, so the program may put gap characters in the middle of codons, throwing the sequences out of frame. You have to align the amino acids, and then force your unaligned nucleotides to fit that alignment.
We have shown you how to translate the nucleotides in SeaView and align amino acids using MAFFT or Muscle, but not how to get back to codons. The Pal2Nal server is good for this. You will upload your protein alignment and nucleotide sequences, and it will spit out the codon alignment. Please be aware that your nucleotides must be multiples of three (i.e. a full open reading frame).