~ubuntu-branches/ubuntu/natty/python-cogent/natty

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from __future__ import division

import numpy

__author__ = "Gavin Huttley"
__copyright__ = "Copyright 2007-2009, The Cogent Project"
__credits__ = ["Gavin Huttley"]
__license__ = "GPL"
__version__ = "1.5.0"
__maintainer__ = "Gavin Huttley"
__email__ = "Gavin.Huttley@anu.edu.au"
__status__ = "Production"


def aic(lnL, nfp, sample_size=None):
    """returns Aikake Information Criterion
    
    Arguments:
        - lnL: the maximum log-likelihood of a model
        - nfp: the number of free parameters in the model
        - sample_size: if provided, the second order AIC is returned
    """
    if sample_size is None:
        correction = 1
    else:
        assert sample_size > 0, "Invalid sample_size %s" % sample_size
        correction = sample_size / (sample_size - nfp - 1)
    
    return -2* lnL + 2 * nfp * correction

def bic(lnL, nfp, sample_size):
    """returns Bayesian Information Criterion
    
    Arguments:
        - lnL: the maximum log-likelihood of a model
        - nfp: the number of free parameters in the model
        - sample_size: size of the sample
    """
    return -2* lnL + nfp * numpy.log(sample_size)