PHYLOFIT(1)

NAME
phyloFit - Fits one or more tree models to a multiple alignment of DNA

DESCRIPTION
Fits one or more tree models to a multiple alignment of DNA sequences by maximum likelihood, using the specified tree topology and substitution model. If categories of sites are defined via --features and --catmap (see below), then a separate model will be estimated for each category. A description of each model will be written to a separate file, with the suffix ".mod". These .mod files minimally include a substitution rate matrix, a tree with branch lengths, and estimates of nucleotide equilibrium frequencies. They may also include information about parameters for modeling rate variation.

SYNOPSIS
phyloFit [OPTIONS] <msa_fname>

<msa_fname> should be a multiple alignment in FASTA format or one of several alternative formats (see --msa-format). For backward compatibility, this argument may be preceded by '-m' or '--msa'. Note that --tree is required in most cases. By default, all output files will have the prefix "phyloFit" (see --out-root).

EXAMPLE

(If you're like me, you want some basic examples first, and a list of all options later.)

1. Compute the distance between two aligned sequences (in FASTA file pair.fa) under the REV model.

    phyloFit pair.fa

(output is to phyloFit.mod; distance in substitutions per site appears in the TREE line in the output file)

2. Fit a phylogenetic model to an alignment of human, chimp, mouse, and rat sequences. Use the HKY85 substitution model. Write output to files with prefix "myfile".

    phyloFit --tree "((human,chimp),(mouse,rat))" --subst-mod HKY85 --out-root myfile primate-rodent.fa

3. As above, but use the discrete-gamma model for rate variation, with 4 rate categories.

    phyloFit --tree "((human,chimp),(mouse,rat))" --subst-mod HKY85 --out-root myfile --nrates 4 primate-rodent.fa

4. As above, but use genome-wide data, stored in the compact "sufficient-statistics" format (can be produced with "msa_view -o SS").

    phyloFit --tree "((human,chimp),(mouse,rat))" --subst-mod HKY85 --out-root myfile --nrates 4 --msa-format SS primate-rodent.ss

5. Fit a context-dependent phylogenetic model (U2S) to an alignment of human, mouse, and rat sequences. Use an EM algorithm for parameter optimization and relax the convergence criteria a bit (recommended with context-dependent models). Write a log file for the optimization procedure. Consider only non-overlapping pairs of sites.

    phyloFit --tree "(human,(mouse,rat))" --subst-mod U2S --EM --precision MED --non-overlapping --log u2s.log --out-root hmr-u2s hmr.fa

6. As above, but allow overlapping pairs of sites, and compute likelihoods by assuming Markov-dependence of columns (see Siepel & Haussler, 2004). The EM algorithm can no longer be used (optimization will be much slower).

    phyloFit --tree "(human,(mouse,rat))" --subst-mod U2S --precision MED --log u2s-markov.log --markov hmr.fa

7. Compute a likelihood using parameter estimates obtained in (5) and an assumption of Markov dependence. This provides a lower bound on the likelihood of the Markov-dependent model.

    phyloFit --init-model hmr-u2s.mod --lnl --markov hmr.fa

8. Given an alignment of several mammalian sequences (mammals.fa), a tree topology (tree.nh), and a set of gene annotations in GFF (genes.gff), fit separate models to sites in 1st, 2nd, and 3rd codon positions. Use the REV substitution model. Assume coding regions have feature type 'CDS'.

    phyloFit --tree tree.nh --features genes.gff --out-root mammals-rev --catmap "NCATS = 3; CDS 1-3" --do-cats 1,2,3 mammals.fa

(output will be to mammals-rev.cds-1.mod, mammals-rev.cds-2.mod, and mammals-rev.cds-3.mod)

OPTIONS

--tree, -t <tree_fname>|<tree_string>

    (Required if more than three species, or more than two species and a non-reversible substitution model, e.g., UNREST, U2, U3) Name of file or literal string defining tree topology. Tree must be in Newick format, with the label at each leaf equal to the index or name of the corresponding sequence in the alignment (indexing begins with 1). Examples: --tree "(1,(2,3))", --tree "(human,(mouse,rat))". Currently, the topology must be rooted. When a reversible substitution model is used, the root is ignored during the optimization procedure.

--subst-mod, -s JC69|F81|HKY85|HKY85+Gap|REV|SSREV|UNREST|R2|R2S|U2|U2S|R3|R3S|U3|U3S

(default REV).
    Nucleotide substitution model. JC69, F81, HKY85

    REV, and UNREST have the usual meanings (see, e.g., Yang, Goldman, and Friday, 1994). SSREV is a strand-symmetric version of REV. HKY85+Gap is an adaptation of HKY that treats gaps as a fifth character (courtesy of James Taylor). The others, all considered "context-dependent", are as defined in Siepel and Haussler, 2004. The options --EM and --precision MED are recommended with context-dependent models (see below).

--msa-format, -i FASTA|PHYLIP|MPM|MAF|SS (default is to guess format from file contents) Alignment format. FASTA is as usual. PHYLIP is compatible with the formats used in the PHYLIP and PAML packages. MPM is the format used by the MultiPipMaker aligner and some other of Webb Miller's older tools. MAF ("Multiple Alignment Format") is used by MULTIZ/TBA and the UCSC Genome Browser. SS is a simple format describing the sufficient statistics for phylogenetic inference (distinct columns or tuple of columns and their counts). Note that the program "msa_view" can be used for file conversion.

--out-root, -o <output_fname_root> (default "phyloFit"). Use specified string as root filename for all files created.

--min-informative, -I <ninf_sites>

    Require at least <ninf_sites> "informative" sites -- i.e., sites at which at least two non-gap and non-missing-data ('N' or '*') characters are present. Default is 50.

--gaps-as-bases, -G Treat alignment gap characters ('-') like ordinary bases. By

    default, they are treated as missing data.

--ignore-branches, -b <branches>

    Ignore specified branches in likelihood computations and parameter estimation, and treat the induced subtrees as independent. Can be useful for likelihood ratio tests. The argument <branches> should be a comma-separated list of nodes in the tree, indicating the branches above these nodes, e.g., human-chimp,cow-dog. (See tree_doctor --name-ancestors regarding names for ancestral nodes.) This option does not currently work with --EM.

--quiet, -q Proceed quietly.

--help, -h

    Print this help message. (Options for controlling and monitoring the optimization procedure)

--lnl, -L

    (for use with --init-model) Simply evaluate the log likelihood of the specified tree model, without performing any further optimization. Can be used with --post-probs, --expected-subs, and --expected-total-subs.

--EM, -E

    Fit model(s) using EM rather than the BFGS quasi-Newton algorithm (the default).

--precision, -p HIGH|MED|LOW

    (default HIGH) Level of precision to use in estimating model parameters. Affects convergence criteria for iterative algorithms: higher precision means more iterations and longer execution time.

--log, -l <log_fname>

    Write log to <log_fname> describing details of the optimization procedure.

--init-model, -M <mod_fname> Initialize with specified tree model. By choosing good

    starting values for parameters, it is possible to reduce execution time dramatically. If this option is chosen, --tree is not allowed. The substitution model used in the given model will be used unless --subst-mod is also specified. Note: currently only one mod_fname may be specified; it will be used for all categories.

--init-random, -r Initialize parameters randomly. Can be used multiple times to test

    whether the m.l.e. is real.

--seed, -D <seed>

    Provide a random number seed for choosing initial parameter values (usually with --init-random, though random values are used in some other cases as well). Should be an integer >=1. If not provided, seed is chosen based on current time.

--init-parsimony, -y Initialize branch lengths using parsimony counts for given data. Only currently implemented for models with single character state (ie, not di- or tri-nucleotides). Other --init options such as --init-random or --init-model can be used in conjunction to initialize substitution matrix parameters.

--print-parsimony, -Y <filename>

Print parsimony score to given file, and quit.
    (Does not optimize

    or report likelihoods).

--clock, -z Assume a molecular clock in estimation. Causes the distances to all descendant leaves to be equal for each ancestral node and cuts the number of free branch-length parameters roughly in half.

--scale-only, -B

    (for use with --init-model) Estimate only the scale of the tree, rather than individual branch lengths (branch proportions fixed). Equilibrium frequencies and rate-matrix parameters will still be estimated unless --no-freqs and --no-rates are used.

--scale-subtree, -S <node_name> (for use with --scale-only) Estimate separate scale factors for subtree beneath identified node and rest of tree. The branch leading to the subtree is included with the subtree. If ":loss" or ":gain" is appended to <node_name>, subtree scale is constrained to be greater than or less than (respectively) scale for rest of tree.

--estimate-freqs, -F

    Estimate equilibrium frequencies by maximum likelihood, rather than approximating them by the relative frequencies in the data. If using the SSREV model, this option implies --sym-freqs.

--sym-freqs, -W

    Estimate equilibrium frequencies, assuming freq(A)=freq(T) and freq(C)=freq(G). This only works for an alphabet ACGT (and possibly gap). This option implies --estimate-freqs.

--no-freqs, -f

    (for use with --init-model) Do not estimate equilibrium frequencies; just use the ones from the given tree model.

--no-rates, -n

    (for use with --init-model) Do not estimate rate-matrix parameters; just use the ones from the given tree model.

--ancestor, -A <seqname> Treat specified sequence as the root of the tree. The tree topology must define this sequence to be a child of the root (in practice, the branch from the root to the specified sequence will be retained, but will be constrained to have length zero).

--error, -e <filename>

    For each parameter, report estimate, variance, and 95%% confidence interval, printed to given filename, one parameter per line.

--no-opt, -O <param_list> Hold parameters listed in comma-separated param_list constant at initial values. This applies only to the "main" model, and not to any models defined with the --alt-mod option. Param list can contain values such as "branches" to hold branch lengths constant, "ratematrix", "backgd", or "ratevar" to hold entire rate matrix, equilibrium frequencies, or rate variation parameters constant (respectively). There are also substitution model-specific parameters such as "kappa" (transition/transversion rate ratio). Note: to hold certain branches constant, but optimize others, put an exclamation point in the newick-formatted tree after the branch lengths that should be held constant. This can be useful for enforcing a star-phylogeny. However, note that the two branches coming from root of tree are treated as one. So they should both be held constant, or not held constant. This option does *not* work with --scale-only or --clock.

--bound <param_name[lower_bound,upper_bound]> Set boundaries for parameter. lower_bound or upper_bound may be empty string to keep default. For example --bound gc_param[1,] will

    set the lower bound for gc_param to 1 (keeping upper bound at infinity), for a GC model. Only applies to parameters for model in the "main" tree, but similar syntax can be used within the --alt-mod arguments. Can be used multiple times to set boundaries for different parameters.

--selection <selection_param>

    Use selection in the model (is also implied if --init-model is used and contains selection parameter). Selection scales rate matrix entries by selection_param/(1-exp(-selection-param)); this is done after rate matrix is scaled to set expected number of substitutions per unit time to 1. If using codon models selection acts only on nonysynonymous mutations. (Options for modeling rate variation)

--nrates, -k <nratecats> (default 1). Number of rate categories to use. Specifying a

    value of greater than one causes the discrete gamma model for rate variation to be used (Yang, 1994).

--alpha, -a <alpha> (for use with --nrates). Initial value for alpha, the shape parameter of the gamma distribution. Default is 1.

--rate-constants, -K <rate_consts>

    Use a non-parameteric mixture model for rates, instead of assuming a gamma distribution. The argument <rate_consts> must be a comma-delimited list explicitly defining the rate constants to be used. The "weight" (mixing proportion) associated with each rate constant will be estimated by EM (this option implies --EM). If --alpha is used with this option, then the mixing proportions will be initialized to reflect a gamma distribution with the specified shape parameter. (Options for separate handling of sites in different annotation categories)

--features, -g <fname>

    Annotations file (GFF or BED format) describing features on one or more sequences in the alignment. Together with a category map (see --catmap), will be taken to define site categories, and a separate model will be estimated for each category. If no category map is specified, a category will be assumed for each type of feature, and they will be numbered in the order of appearance of the features. Features are assumed to use the coordinate frame of the first sequence in the alignment and should be non-overlapping (see 'refeature --unique').

--catmap, -c <fname>|<string>

    (optionally use with --features) Mapping of feature types to category numbers. Can either give a filename or an "inline" description of a simple category map, e.g., --catmap "NCATS = 3 ; CDS 1-3" or --catmap "NCATS = 1 ; UTR 1". Note that category 0 is reserved for "background" (everything that is not described by a defined feature type).

--do-cats, -C <cat_list>

    (optionally use with --features) Estimate models for only the specified categories (comma-delimited list categories, by name or numbera). Default is to fit a model for every category.

--reverse-groups, -R <tag>

    (optionally use with --features) Group features by <tag> (e.g., "transcript_id" or "exon_id") and reverse complement segments of the alignment corresponding to groups on the reverse strand. Groups must be non-overlapping (see refeature --unique). Useful with categories corresponding to strand-specific phenomena (e.g., codon positions). (Options for context-dependent substitution models)

--markov, -N

    (for use with context-dependent substitutions models and not available with --EM.) Assume Markov dependence of alignment columns, and compute the conditional probability of each column given its N-1 predecessors using the two-pass algorithm described by Siepel and Haussler (2004). (Here, N is the "order" of the model, as defined by --subst-mod; e.g., N=1 for REV, N=2 for U2S, N=3 for U3S.) The alternative (the default) is simply to work with joint probabilities of tuples of columns. (You can ensure that these tuples are non-overlapping with the --non-overlapping option.) The use of joint probabilities during parameter estimation allows the use of the --EM option and can be much faster; in addition, it appears to produce nearly equivalent estimates. If desired, parameters can be estimated without --markov, and then the likelihood can be evaluated using --lnl and --markov together. This gives a lower bound on the likelihood of the Markov-dependent model.

--non-overlapping, -V (for use with context-dependent substitution models; not compatible with --markov, --features, or --msa-format SS) Avoid using overlapping tuples of sites in parameter estimation. If a dinucleotide model is selected, every other tuple will be considered, and if a nucleotide triplet model is selected, every third tuple will be considered. This option cannot be used with an alignment represented only by unordered sufficient statistics. (Option for lineage-specific models)

--label-branches branch1,branch2,branch3...:label

    Create a group of branches by giving a set of branches a single label. The label should be a word which does not contain special characters (in particular, no spaces, brackets, parentheses, pound signs, commas, or colons). The label is for use with --alt-model option below, so that an alternate model can be defined for a set of branches. A branch is specified by the name of the node which is a descendant of that branch.

    For example, --label-branches hg18,chimp,hg18-chimp:HC will apply the label "HC" to the hg18,chimp,and hg18-chimp branches in the following tree: (((hg18,chimp)hg18-chimp, (mouse,rat)mouse-rat)

    The same label could be defined without using --label-branches by specifying the tree (either on the command-line or within init-model) as follows: (((hg18 # HC, chimp #HC)#HC, (mouse,rat))

--label-subtree node[+]:label Similar to label-branches, except labels the entire subtree of the named node. If the node name is followed by a "+" sign, then includes the branch leading up to the node in the subtree.

--alt-model, -d <label:(model|param_list)> Create a lineage-specific substitution model on a group of branches. The group is defined by a label, which can be specified within the tree string (using the # sign notation), or by using the --label-branches or --label-subtree arguments. If the alt-model applies to only a single branch, labelling is not necessary and the name of the node descending from the branch can be used instead. See --label-branches above for more details on labelling groups of branches. If a name of a substitution model (HKY85, REV, UNREST, etc) is given after the colon, then this model will be used for the group of branches, and parameters relevant to the model will be estimated separately in this group. This model may be different (or the same) as the model used in the rest of the tree, but it must have the same number of states and be of the same order as the model used for the rest of the tree.

    Alternately, a list of parameter names can be given after the colon. In this case, the same substitution model will be used for the entire tree, but the parameters listed will be estimated separately in the specified group of branches.

    The parameter names are model-specific, and include "kappa" for HKY models, "alpha" for GC models, "ratematrix" to specify all rate-matrix parameters in general models, and "backgd" for the equilibrium background frequencies. The parameter names may optionally be followed by boundaries in square brackets to specify parameter bounds, as described in --bound option.

    The --alt-model argument may be used multiple times, if one wishes to (for example) optimize a parameter independently on several different groups of branches. Example: phyloFit align.fa --subst-mod HKY85 \ --tree "(human, (mouse#MR, rat#MR)#MR, cow)"\ --alt-model "MR:kappa[0, 1]"

    will estimate the HKY85 parameter kappa separately on the mouse/rat subtree, and constrain kappa between 0 and 1. The quotes are often necessary to prevent the square brakcets from being parsed by the shell. The same model could be achieved with:

    phyloFit align.fa --subst-mod HKY85 \ --tree "(human, (mouse,rat)mouse-rat, cow)"\ --label-branches mouse,rat,mouse-rat:MR \ --alt-model "MR:kappa[0,1]" or

    phyloFit align.fa --subst-mod HKY85 \ --tree "(human, (mouse,rat)mouse-rat, cow)" \ --label-subtree "mouse-rat+:MR" \ --alt-model "MR:kappa[0,1]"

    (Options for posterior probabilities)

--post-probs, -P

    Output posterior probabilities of all bases at all ancestral nodes. Output will be to auxiliary file(s) with suffix ".postprobs".

--expected-subs, -X

    Output posterior expected number of substitutions on each branch at each site, summed across all types of substitutions. Output will be to auxiliary file(s) with suffix ".expsub".

--expected-subs-col, -J

    Output posterior expected number of substitutions of each type on each branch, for each site. Output will be to auxiliary file(s) with suffix .expcolsub

--expected-total-subs, -Z

    Output posterior expected number of substitutions of each type on each branch, summed across all sites. Output will be to auxiliary file(s) with suffix ".exptotsub".

--column-probs, -U

(for use with -init-model; implies --lnl)
    Output a separate log

probability for each type of column in the input.
    Output will

be to a file with suffix ".colprobs".
    Values are log base 2.

    (Options for estimation in sliding window)

--windows, -w <size,shift> Apply a sliding window to the alignment, and fit a separate tree to each window. Arguments specify size of window and amount by which to shift it on each iteration, both in bases of the first sequence in the alignment (assumed to be the reference sequence). Separate versions of all output files will be created for each window.

--windows-explicit, -v <window_coord_list> Like --windows, except that all start and end coordinates must be explicitly specified. Each successive pair of numbers is interpreted as defining the start and end of a window. Can be used with a two-column file and the '*' operator, e.g., --windows-explicit '*mycoords'.

SEE ALSO

A. Siepel and D. Haussler.
    2004. Phylogenetic estimation of context-dependent substitution rates by maximum likelihood. Mol. Biol. Evol., 21:468-488.

Z. Yang, N. Goldman, and A. Friday.
    1994. Comparison of models for nucleotide substution used in maximum likelihood phylogenetic estimation. Mol. Biol. Evol., 11:316-324.

Z. Yang. 1994. Maximum likelihood phylogenetic estimation from
    DNA sequences with variable rates over sites: approximate methods. J. Mol. Evol., 39:306-314.