Source code for threeML.test.test_goodness_of_fit

import pytest

import numpy as np
import scipy.stats

from astromodels import Powerlaw
from threeML.plugins.XYLike import XYLike


[docs] def test_goodness_of_fit(): # Let's generate some data with y = Powerlaw(x) gen_function = Powerlaw() # Generate a dataset using the power law, and a # constant 30% error x = np.logspace(0, 2, 50) xyl_generator = XYLike.from_function( "sim_data", function=gen_function, x=x, yerr=0.3 * gen_function(x) ) y = xyl_generator.y y_err = xyl_generator.yerr fit_function = Powerlaw() xyl = XYLike("data", x, y, y_err) result = xyl.fit(fit_function) like_values = result.get_statistic_frame() #parameters, like_values = xyl.fit(fit_function) gof, all_results, all_like_values = xyl.goodness_of_fit() # Compute the number of degrees of freedom n_dof = len(xyl.x) - len(fit_function.free_parameters) # Get the observed value for chi2 obs_chi2 = 2 * like_values["-log(likelihood)"]["data"] theoretical_gof = scipy.stats.chi2(n_dof).sf(obs_chi2) assert np.isclose(theoretical_gof, gof["total"], rtol=0.1)