Phần đầu tiên của vấn đề này là tính toán các thanh lỗi. Không có thứ gọi là tính toán một thanh lỗi, bởi vì một thanh lỗi thể hiện độ chính xác của từng điểm dữ liệu và như vậy, bạn không thể chỉ sử dụng dữ liệu bạn đã phải tính toán.calculating the error bars. There is no such thing as calculating an error bar, because an error bar represents the accuracy of each data point, and as such, you cannot just use the data you already have to calculate it.
Ví dụ, nếu bạn đang vẽ tuổi so với chiều cao [chỉ là một ví dụ tùy ý], bạn sẽ tìm hiểu mức độ chính xác của phép đo chiều cao của bạn - thông thường điều này được thực hiện bằng cách thực hiện trung bình nhiều phép đo.
Phần tiếp theo là vẽ một thanh lỗi. Với matplotlib, điều này khá đơn giản, vì bạn chỉ có thể sử dụng plt.errorbar[x, y, yerr = error_array, fmt = 'o']
, trong đó error_array
là mảng chứa chiều cao thanh lỗi cho mỗi điểm của bạn và 'o'
chỉ là định dạng của thanh lỗi - trong trường hợp này là một đường thẳng đứng. Ví dụ:
import matplotlib.pyplot as plt
X = sorted[[35,12,58,43,27,39,68]] # Age
Y = sorted[[1.75, 1.32, 1.65, 1.49, 1.80, 1.67, 1.83]] # Height
error_array = [0.02, 0.1, 0.04, 0.03, 0.09, 0.12, 0.01] # Error bar for height
fig, ax = plt.subplots[]
plt.scatter[X, Y]
plt.errorbar[X, Y, yerr=error_array]
plt.show[]
EDIT: Ồ, một điều tôi quên đề cập là bạn phải đặt hàng dữ liệu X của mình và có dữ liệu y của bạn tương ứng với thứ tự đó, để bạn có một biểu đồ dòng có ý nghĩa. Làm điều này bằng cách sử dụng hàm inbuild sorted[]
trong Python. Oh, one thing I forgot to mention is that you must order your X data, and have your Y data corresponding to that order, so that you have a line graph that makes sense. Do this using the sorted[]
inbuild function in Python.
Trong một số bài viết trước đó, tôi đã thảo luận về sự phù hợp thống kê với PYMC và EMCEE. Ưu điểm của các phương pháp thống kê là chúng không nhạy cảm với dạng hàm chi bình phương. Điều này rất quan trọng trong một số trường hợp mà chức năng công đức doe snot có mức tối thiểu được xác định rõ. Ưu điểm của các phương pháp Chi-Square là chúng thường nhanh hơn nhiều. Trong bài đăng này, tôi hiển thị một ví dụ điển hình về sự phù hợp bình phương nhỏ nhất với lỗi đo lường. Như thường lệ, chúng tôi quan tâm để ước tính một tham số phù hợp cũng như sự không chắc chắn của chúng.
Nhập Numpy dưới dạng NPFrom pylab Nhập *từ scipy.
from pylab import *
from scipy.optimize
import curve_fit
def func [x, a, b, c]:
Trả lại A *X *X + B *X + C
# Kiểm tra dữ liệu và ERRORX = NP.LINSPACE [-10, 10, 100] Y0 =-0.07 * X * X + 0.5 * X + 2. NIEIO = y0 + tiếng ồn
x = np.linspace[-10, 10, 100]
y0 = – 0.07 * x * x + 0.5 * x + 2.
noise = np.random.normal[0.0, 1.0, len[x]]
y = y0 + noise
# đường cong phù hợp [chỉ có y-error] popt, pcov = curve_fit [func, x, y, sigma = 1 ./ [nhiễu*nhiễu]] perr = np.sqrt [np.diag [pcov]]
popt, pcov = curve_fit[func, x, y, sigma=1./[noise*noise]]
perr =
np.sqrt[np.diag[pcov]]
#dấu hiệu phù hợp với các tham số và ước tính 1-sigma [popt [i]]+'+-'+str [perr [i]]]
print[‘fit parameter 1-sigma error’]
print[‘———————————–‘]
for i in range[len[popt]]:
print[str[popt[i]]+’ +- ‘+str[perr[i]]]
# Chuẩn bị mức độ tin cậy Curvesnstd = 5. # Để vẽ khoảng 5-Sigma
nstd = 5. # to draw 5-sigma intervals
popt_up = popt + nstd * perr
popt_dw = popt – nstd * perr
fit = func [x, *popt] fit_up = func [x, *popt_up] fit_dw = func [x, *popt_dw]
fit_up = func[x, *popt_up]
fit_dw = func[x, *popt_dw]
#plotfig, ax = plt.subplots [1] rcparams ['xtick.labelsize'] = 18 rcparams ['ytick.labelsize'] = 18 rcparams ['font.size'] , xerr = 0, net = true, ecolor = 'k', fmt = 'none', label = 'data']
fig, ax = plt.subplots[1]
rcParams[‘xtick.labelsize’] = 18
rcParams[‘ytick.labelsize’] = 18
rcParams[‘font.size’]= 20
errorbar[x, y0, yerr=noise, xerr=0, hold=True, ecolor=’k’, fmt=’none’, label=’data’]
xlabel ['x', fontsize = 18] ylabel ['y', fontsize = 18] tiêu đề ['phù hợp chỉ với y-error', fontsize = 18] lô [x, fit, 'r', lw = 2, nhãn = 'Đường cong phù hợp nhất'] Lô [x, y0, 'K K Khoảng '] Legend [loc =' dưới bên phải ', fontsize = 18] show []
ylabel[‘y’,
fontsize=18]
title[‘fit with only Y-error’, fontsize=18]
plot[x, fit, ‘r’, lw=2, label=’best fit curve’]
plot[x, y0, ‘k–‘, lw=2, label=’True curve’]
ax.fill_between[x, fit_up, fit_dw, alpha=.25, label=’5-sigma interval’]
legend[loc=’lower right’,fontsize=18]
show[]
Xin lưu ý rằng sử dụng lỗi đo lường là tùy chọn. Nếu bạn không có Y-error, chỉ cần bỏ qua lệnh của nó trong quy trình phù hợp:
# đường cong phù hợp [chỉ có y-error] popt, pcov = curve_fit [func, x, y]
popt, pcov = curve_fit[func, x, y]
Bạn vẫn nhận được ước tính cho độ không đảm bảo của các tham số phù hợp, mặc dù nó ít đáng tin cậy hơn. & NBSP; Trong bài tiếp theo, tôi hiển thị một ví dụ về độ phù hợp bình phương nhỏ nhất với lỗi trên cả hai trục.