def test_information_criteria(self): """test get information criteria from a model.""" lf = self._makeLikelihoodFunction() nfp = lf.getNumFreeParams() lnL = lf.getLogLikelihood() l = len(self.data) self.assertFloatEqual(lf.getAic(), aic(lnL, nfp)) self.assertFloatEqual(lf.getAic(second_order=True), aic(lnL, nfp, l)) self.assertFloatEqual(lf.getBic(), bic(lnL, nfp, l))
def getAic(self, second_order=False): """returns Aikake Information Criteria Arguments: - second_order: if true, the second-order AIC is returned, adjusted by the alignment length""" if second_order: sequence_length = sum(len(self.getParamValue('lht', locus=l).index) for l in self.locus_names) else: sequence_length = None lnL = self.getLogLikelihood() nfp = self.getNumFreeParams() return aic(lnL, nfp, sequence_length)
def test_aic_corrected(self): """correctly compute AIC corrected for small sample size""" # from Burnham & Anderson 2002, p102 self.assertFloatEqual(aic(-9.7039, 4, sample_size=13), 32.4078)
def test_aic(self): """correctly compute AIC from Burnham & Anderson 2002, p102""" self.assertFloatEqual(aic(-9.7039, 4), 27.4078)