Hướng dẫn python linear fit with error bars - tuyến tính phù hợp với python với các thanh lỗi

Không hoàn toàn chắc chắn liệu đây có phải là ý của bạn không, nhưng sử dụng gấu trúc, statsmodels và patsy, chúng ta có thể so sánh phù hợp bình phương nhỏ nhất bình thường và phù hợp với bình phương nhỏ nhất sử dụng nghịch đảo bạn cung cấp như một ma trận trọng lượng ( Nhân tiện, StatSmodels sẽ phàn nàn về kích thước mẫu <20).

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['figure.dpi'] = 300

import statsmodels.formula.api as sm

x_list = [0.3333333333333333, 0.2886751345948129, 0.25, 0.23570226039551587, 0.22360679774997896, 0.20412414523193154, 0.2, 0.16666666666666666]
y_list = [0.13250359351851854, 0.12098339583333334, 0.12398501145833334, 0.09152715, 0.11167239583333334, 0.10876248333333333, 0.09814170444444444, 0.08560799305555555]
y_err = [0.003306749165349316, 0.003818446389148108, 0.0056036878203831785, 0.0036635292592592595, 0.0037034897788415424, 0.007576672222222223, 0.002981084130692832, 0.0034913019065973983]

# put x and y into a pandas DataFrame, and the weights into a Series
ws = pd.DataFrame({
    'x': x_list,
    'y': y_list
})
weights = pd.Series(y_err)

wls_fit = sm.wls('x ~ y', data=ws, weights=1 / weights).fit()
ols_fit = sm.ols('x ~ y', data=ws).fit()

# show the fit summary by calling wls_fit.summary()
# wls fit r-squared is 0.754
# ols fit r-squared is 0.701

# let's plot our data
plt.clf()
fig = plt.figure()
ax = fig.add_subplot(111, facecolor='w')
ws.plot(
    kind='scatter',
    x='x',
    y='y',
    style='o',
    alpha=1.,
    ax=ax,
    title='x vs y scatter',
    edgecolor='#ff8300',
    s=40
)

# weighted prediction
wp, = ax.plot(
    wls_fit.predict(),
    ws['y'],
    color='#e55ea2',
    lw=1.,
    alpha=1.0,
)
# unweighted prediction
op, = ax.plot(  
    ols_fit.predict(),
    ws['y'],
    color='k',
    ls='solid',
    lw=1,
    alpha=1.0,
)
leg = plt.legend(
    (op, wp),
    ('Ordinary Least Squares', 'Weighted Least Squares'),
    loc='upper left',
    fontsize=8)

plt.tight_layout()
fig.set_size_inches(6.40, 5.12)
plt.show()

Hướng dẫn python linear fit with error bars - tuyến tính phù hợp với python với các thanh lỗi

Phần dư WLS:

[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]

Lỗi bình phương trung bình của phần dư cho độ phù hợp có trọng số (wls_fit.mse_resid hoặc wls_fit.scale) là 0,2296480249892287 và giá trị R-bình phương của độ phù hợp là 0,754.0.22964802498892287, and the r-squared value of the fit is 0.754.

Bạn có thể có được vô số dữ liệu về sự phù hợp bằng cách gọi phương thức summary() của họ và/hoặc thực hiện dir(wls_fit), nếu bạn cần một danh sách mọi tài sản và phương thức có sẵn.

Phù hợp với dữ liệu với Errorlor

Giả sử bạn có một tập hợp các điểm dữ liệu $ n $ $ \ {x_i, y_i \} $ và một tập hợp các độ không đảm bảo ước tính cho các giá trị $ y $ $ \ {\ delta y_i \} $. Bạn muốn lắp dữ liệu vào hàm $$ y (x) = a x + b, $$ trong đó $ a $ và $ b $ là các tham số có thể điều chỉnh cho "phù hợp nhất". Trang này chỉ mô tả chương trình cần phải thực hiện để tìm các tham số phù hợp nhất $ A $ và $ B $ và độ không đảm bảo liên quan của chúng và tính giá trị $ \ chi^2 $ để xác định chất lượng của sự phù hợp. Chúng tôi sẽ sử dụng dữ liệu từ một thí nghiệm để đo hằng số của Planck để minh họa quá trình. Bạn có thể đọc thêm về những gì cấu thành "phù hợp nhất" trên trang web Hộp công cụ máy tính khoa học hoặc tham khảo một trong những cuốn sách được tham chiếu dưới đây.

Một bảng dữ liệu với độ không đảm bảo được hiển thị bên dưới. Một tệp văn bản với dữ liệu này được gọi là FakeData_with_error.txt được bao gồm trong tệp fitting_with_error.zip.

$x$$y$$ \ delta_ {y} $
8.213 3.261 9.71
7.402 2.52 5.59
6.876 2.239 7.08
5.491 1.299 6.83
5.196 1.175 8.93

Mã này rất giống với mã cho sự phù hợp mà không có sự không chắc chắn, nhưng lần này chúng ta phải đọc các độ không đảm bảo từ tệp và chuyển một mảng có chứa các sự không chắc chắn này sang curvefit().

Tiếp theo chúng tôi có chương trình của chúng tôi đọc dữ liệu từ tệp FakeData_with_error.txt. Thật đơn giản để đọc các tác dụng không chắc chắn thành một mảng. Tệp chứa ba cột dữ liệu. Cột đầu tiên chứa các giá trị dữ liệu $ x $, giá trị dữ liệu $ y $ thứ hai và thứ ba độ không đảm bảo trong $ y $.

Chúng ta cần bao gồm

[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
0 để đảm bảo
[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
1 được sử dụng theo nghĩa tuyệt đối và hiệp phương sai tham số ước tính
[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
2 được tính toán với các giá trị
[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
1 thực tế. Nếu
[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
4 (mặc định), cường độ tương đối của các giá trị
[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
1 được sử dụng để trọng lượng phù hợp, nhưng độ dốc ước tính và độ không đảm bảo chặn được tính toán giả sử $ \ chi_r^2 = 1 $. Xem TOOBOX tính toán khoa học: Trang phù hợp dữ liệu hoặc các tài liệu tham khảo được liệt kê ở cuối trang này để thảo luận đầy đủ hơn về sự khác biệt tinh tế này.

Chúng tôi có được độ dốc phù hợp nhất và độ không đảm bảo từ

[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
6 và
[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
2.

Chúng tôi sử dụng hàm

[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
8 để vẽ dữ liệu hiển thị các thanh lỗi trên các điểm dữ liệu. Hàm này hoạt động rất giống với lệnh
[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
9. Chúng tôi chỉ cần chỉ định một mảng phụ gia chứa các độ không đảm bảo với đối số wls_fit.mse_resid0. Hàm
[0.025624005084707302,
 0.013611438189866154,
 -0.033569595462217161,
 0.044110895217014695,
 -0.025071632845910546,
 -0.036308252199571928,
 -0.010335514810672464,
 -0.0081511479431851663]
8 cũng yêu cầu chúng tôi chỉ định định dạng được sử dụng để hiển thị các điểm dữ liệu. Trong trường hợp này, đối số wls_fit.mse_resid2 sẽ hiển thị dữ liệu dưới dạng các chấm đỏ.

Khi chúng tôi ước tính sự không chắc chắn trong dữ liệu, thì chúng tôi có thể ước tính mức độ phù hợp của sự phù hợp bằng cách tính toán thống kê chi bình phương giảm. Đối với một tuyến tính phù hợp với một tập hợp các điểm dữ liệu $ n $ \ {x_i, y_i \} $ có độ không đảm bảo trong các giá trị $ y_i $ của $ \ {\ delta y_i \} $, $$ \ chi_r^2 = \ frac {1} {n-2} \ sum_ {i = 1}^n \ frac {\ left (y_i-y (x_i) $ y (x) = a + bx $. Để phù hợp, $ \ chi_r^2 $ phải bằng một.
$$ \chi_r^2 = \frac{1}{N-2}\sum_{i=1}^N \frac{\left(y_i-y(x_i)\right)^2}{\delta y_i}, $$ where for a linear fit $y(x) = a + bx$. For a good fit, $\chi_r^2$ should be approximatly equal to one.

Mã trên là tất cả những gì bạn cần để thực hiện phù hợp với dữ liệu. Khi bạn phải đối mặt với một vấn đề phân tích dữ liệu mới đòi hỏi phải có sự phù hợp, thường sẽ nhanh hơn để sửa đổi mã hiện có hơn là phát minh lại mọi lúc. Tôi đã bao gồm một tập lệnh Python, tệp dữ liệu và sổ ghi chép Jupyter đã tạo trang này trong một tệp zip. (Tải xuống tệp fitting_with_error.zip) Vui lòng sửa đổi chương trình và sử dụng nó khi bạn cần thực hiện phù hợp tuyến tính.

Một bảng có mô tả ngắn về các hàm Python được sử dụng trong hướng dẫn này được đăng trên hộp công cụ điện toán khoa học: Trang Tóm tắt lệnh.

Làm thế nào để bạn thêm các thanh lỗi vào biểu đồ dòng trong Python?

Phương thức ErrorBar () được sử dụng để tạo biểu đồ dòng với các thanh lỗi.Hai đối số vị trí được cung cấp cho AX.Lỗi () là các danh sách hoặc mảng của các điểm dữ liệu x, y.Hai đối số từ khóa xerr = và yerr = xác định độ dài thanh lỗi theo hướng x và y. is used to create a line plot with error bars. The two positional arguments supplied to ax. errorbar() are the lists or arrays of x, y data points. The two keyword arguments xerr= and yerr= define the error bar lengths in the x and y directions.

Làm thế nào để bạn phù hợp với một hồi quy tuyến tính trong Python?

Sự khác biệt chính là mảng X của bạn bây giờ sẽ có hai hoặc nhiều cột ...
Bước 1 và 2: Nhập các gói và lớp và cung cấp dữ liệu.Đầu tiên, bạn nhập Numpy và Sklearn.linear_model.linearregression và cung cấp các đầu vào và đầu ra đã biết: ....
Bước 3: Tạo một mô hình và phù hợp với nó.....
Bước 4: Nhận kết quả.....
Bước 5: Dự đoán phản hồi ..

Làm thế nào để bạn phù hợp với một đường thẳng trong Python?

Làm thế nào để bạn phù hợp với một đường thẳng trong Python ?..
x = np.Mảng ([1, 3, 5, 7]).
y = np.Mảng ([6, 3, 9, 5]).
m, b = np.polyfit (x, y, 1) m = độ dốc, b = đánh chặn ..
plt.Lô đất (x, y, 'o') Tạo cốt truyện phân tán ..
plt.Biểu đồ (x, m*x + b) Thêm dòng phù hợp nhất ..