Test: validazione contro i parametri veri di gen_data, report, CLI e regressioni
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cbcbb7122b
commit
b223cf5fdc
7 files changed
+281
-58
No files matched your search
+23
-7
@@ -3,8 +3,8 @@
|
||||
from fitseg.analisi import scegli
|
||||
|
||||
|
||||
def fit(nome, k, aicc, rmse=0.1, **extra):
|
||||
base = {"modello": nome, "n_parametri": k, "aicc": aicc, "rmse": rmse, "convergenza": True,
|
||||
def fit(nome, k, aicc, rmse=0.1, scala_residui=0.1, **extra):
|
||||
base = {"modello": nome, "n_parametri": k, "aicc": aicc, "rmse": rmse, "scala_residui": scala_residui, "convergenza": True,
|
||||
"parametri_a_limite": [], "non_identificabile": False}
|
||||
return {**base, **extra}
|
||||
|
||||
@@ -27,15 +27,31 @@ def test_scarta_non_validi(cfg):
|
||||
|
||||
def test_nessun_valido_indeterminato(cfg):
|
||||
scelto, motivo, adeguato = scegli([fit("a", 1, -1.0, non_identificabile=True)], 0.1, cfg)
|
||||
assert scelto is None and not adeguato and "indeterminato" in motivo
|
||||
assert scelto is None and not adeguato and "nessun modello" in motivo
|
||||
|
||||
|
||||
def test_preferisce_i_modelli_adeguati(cfg):
|
||||
# b ha AICc molto migliore ma RMSE oltre soglia·σ; a è adeguato: vince tra gli adeguati
|
||||
scelto, _, adeguato = scegli([fit("a", 1, -50.0, rmse=0.1), fit("b", 3, -500.0, rmse=1.0)], 0.1, cfg)
|
||||
# b ha AICc molto migliore ma la scala dei residui supera soglia·σ; a è adeguato: vince tra gli adeguati
|
||||
scelto, _, adeguato = scegli([fit("a", 1, -50.0, scala_residui=0.1), fit("b", 3, -500.0, scala_residui=1.0)], 0.1, cfg)
|
||||
assert scelto["modello"] == "a" and adeguato
|
||||
|
||||
|
||||
def test_nessun_adeguato_lo_segnala(cfg):
|
||||
scelto, _, adeguato = scegli([fit("a", 1, -50.0, rmse=1.0)], 0.1, cfg)
|
||||
assert scelto["modello"] == "a" and not adeguato
|
||||
scelto, _, adeguato = scegli([fit("a", 1, -50.0, scala_residui=1.0)], 0.1, cfg)
|
||||
assert scelto["modello"] == "a" and adeguato is False
|
||||
|
||||
|
||||
def test_adeguatezza_usa_la_scala_robusta_non_la_rmse(cfg):
|
||||
# RMSE enorme per via degli scarti casuali, ma la scala robusta dei residui è vicina al rumore: adeguato
|
||||
scelto, _, adeguato = scegli([fit("a", 3, -50.0, rmse=0.5, scala_residui=0.11)], 0.1, cfg)
|
||||
assert scelto["modello"] == "a" and adeguato is True
|
||||
|
||||
|
||||
def test_sigma_non_stimabile_adeguatezza_non_valutabile(cfg):
|
||||
scelto, motivo, adeguato = scegli([fit("a", 1, -50.0)], None, cfg)
|
||||
assert scelto["modello"] == "a" and adeguato is None and "non valutabile" in motivo
|
||||
|
||||
|
||||
def test_motivo_senza_clausola_di_parsimonia_con_un_solo_candidato(cfg):
|
||||
assert "meno parametri" not in scegli([fit("a", 1, -50.0)], 0.1, cfg)[1]
|
||||
assert "meno parametri" in scegli([fit("a", 1, -50.0), fit("b", 3, -50.5)], 0.1, cfg)[1]
|
||||
Reference in new issue
Block a user