import numpy as np
import pandas as pd
df = pd.read_excel("/content/lab_2_chi2_tut.xlsx")
df
X = df["X"].values
y = df["y"].values
y_err = df["y_err"].values
def lin_fun(X,a,b):
return a * X + b
exp_fun = lambda X,a,b: a * np.exp(b * X)
!pip install -q matplotlib-venn probfit
from probfit import Chi2Regression
reg = Chi2Regression(lin_fun,X,y, error=y_err)
!pip install -q matplotlib-venn iminuit
from iminuit import Minuit
opt = Minuit(reg)
opt.migrad()
chi2 = opt.fval
chi2_ndof = chi2/(6-2)
chi2_ndof
import matplotlib.pyplot as plt
plt.scatter(X,y)
plt.rc("font", family="Times New Roman", size=18)
plt.figure(figsize=(5, 5))
plt.style.use("classic")
plt.xlabel("X_data", fontdict={"size":20, "fontname": "Times New Roman"})
plt.ylabel("Y_data", fontdict={"size":20, "fontname": "Times New Roman"})
plt.errorbar(x=X, y=y, y_err=y_err, elinewidth=10, fmt='none', ecolor="blue")
reg.show(opt)
X = df["X"].values
y = df["y"].values
y_err = df["y_err"].values
exp_fun = lambda X,a,b: a * np.exp(b * X)
reg = Chi2Regression(exp_fun,X,y, error=y_err)
opt = Minuit(reg)
opt.migrad()
plt.rc("font", family="Times New Roman", size=18)
plt.figure(figsize=(5, 5))
plt.style.use("classic")
plt.xlabel("X_data", fontdict={"size":20, "fontname": "Times New Roman"})
plt.ylabel("Y_data", fontdict={"size":20, "fontname": "Times New Roman"})
plt.errorbar(x=X, y=y, y_err=y_err, elinewidth=10, fmt='none', ecolor="blue")
reg.show(opt)