- docs/SPEC.md sostituito da un file per argomento (indice in docs/README.md) - assunzioni A1-A24 con dove nel codice e cosa succede se false - formule in LaTeX corrette (nessuno spazio prima del dollaro di chiusura), simboli e chiavi in tabella - diagrammi Mermaid per il flusso degli algoritmi e le dipendenze dei moduli - figura dei domini sul seed 1 (docs/img/domini_esempio.png) - README ridotto a indice con avvio rapido; CLAUDE.md e docstring allineati Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
"""Regola di scelta del modello (docs/algoritmi.md §6) su fit finti."""
|
|
|
|
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,
|
|
"parametri_a_limite": [], "non_identificabile": False}
|
|
return {**base, **extra}
|
|
|
|
|
|
def test_vince_meno_parametri_entro_delta(cfg):
|
|
scelto, _, _ = scegli([fit("a", 1, -100.0), fit("b", 3, -101.0)], 0.1, cfg) # ΔAICc = 1 < 2
|
|
assert scelto["modello"] == "a"
|
|
|
|
|
|
def test_vince_il_migliore_oltre_delta(cfg):
|
|
scelto, _, _ = scegli([fit("a", 1, -100.0), fit("b", 3, -110.0)], 0.1, cfg)
|
|
assert scelto["modello"] == "b"
|
|
|
|
|
|
def test_scarta_non_validi(cfg):
|
|
fits = [fit("a", 1, -200.0, non_identificabile=True), fit("b", 2, -100.0),
|
|
fit("c", 2, -300.0, parametri_a_limite=["tau"]), fit("d", 2, -400.0, convergenza=False)]
|
|
assert scegli(fits, 0.1, cfg)[0]["modello"] == "b"
|
|
|
|
|
|
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
|
|
|
|
|
|
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)
|
|
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
|