Fit lineare

Questo notebook mostra due usi tipici di mp.lin_fit con un dataset placebo incluso nella cartella examples.

Import

import mespy as mp


df = mp.load_csv(
    "data/test_linear_fit.csv",
    required_columns=[
        "tempo_s",
        "spazio_m",
        "sigma_spazio_m",
        "sigma_tempo_s",
    ],
    missing="error",
)

tempo = df["tempo_s"]
spazio = df["spazio_m"]
sigma_spazio = df["sigma_spazio_m"]
sigma_tempo = df["sigma_tempo_s"]

Fit lineare con sole incertezze su y

Il primo esempio usa lo stesso dataset ma considera solo le incertezze su y, ignorando la colonna sigma_tempo_s.

fit_base = mp.lin_fit(
    tempo,
    spazio,
    sigma_spazio,
    xlabel="tempo [s]",
    ylabel="spazio [m]",
    title="Fit lineare con sole incertezze su y",
    show_fit_params=True,
)

{
    "slope": round(fit_base.slope, 3),
    "intercept": round(fit_base.intercept, 3),
    "reduced_chi2": round(fit_base.reduced_chi2, 3),
}
{'slope': 2.114, 'intercept': 0.65, 'reduced_chi2': 0.2}
../_images/e773811a4ec7dac69421bd1ae67a7db4fc7fae8a56a958ddaf9f5b5bfeaefab9.png

Esempio con sigma_x

Se fornisci anche l’incertezza su x, lin_fit usa la varianza efficace e aggiorna iterativamente i pesi del fit.

fit_sigma_x = mp.lin_fit(
    tempo,
    spazio,
    sigma_spazio,
    sigma_x=sigma_tempo,
    xlabel="tempo [s]",
    ylabel="spazio [m]",
    title="Fit lineare con sigma_x e sigma_y",
    show_fit_params=True,
)

{
    "slope": round(fit_sigma_x.slope, 3),
    "slope_std": round(fit_sigma_x.slope_std, 3),
    "intercept": round(fit_sigma_x.intercept, 3),
    "iterations": fit_sigma_x.iterations,
    "converged": fit_sigma_x.converged,
}
{'slope': 2.112,
 'slope_std': 0.034,
 'intercept': 0.66,
 'iterations': 4,
 'converged': True}
../_images/d304a7b22f817830740cd658d78a7cd313a5f2395b3ba30521923eba64200403.png

Pagine collegate