Tôi đang cố gắng để phù hợp với một biểu đồ với một số dữ liệu trong nó bằng cách sử scipy.optimize.curve_fit
. Nếu tôi muốn thêm lỗi trong y
, tôi có thể chỉ cần làm như vậy bằng cách áp dụng weight
cho phù hợp. Nhưng làm thế nào để áp dụng các lỗi trong x
(i. E lỗi do binning trong trường hợp của biểu đồ)?Lắp đúng với đường cong scipy bao gồm các lỗi trong x?
Câu hỏi của tôi cũng áp dụng cho các lỗi trong x
khi thực hiện hồi quy tuyến tính với curve_fit
hoặc polyfit
; Tôi biết cách thêm lỗi trong y
, nhưng không phải trong x
.
Dưới đây là một ví dụ (một phần từ matplotlib documentation):
import numpy as np
import pylab as P
from scipy.optimize import curve_fit
# create the data histogram
mu, sigma = 200, 25
x = mu + sigma*P.randn(10000)
# define fit function
def gauss(x, *p):
A, mu, sigma = p
return A*np.exp(-(x-mu)**2/(2*sigma**2))
# the histogram of the data
n, bins, patches = P.hist(x, 50, histtype='step')
sigma_n = np.sqrt(n) # Adding Poisson errors in y
bin_centres = (bins[:-1] + bins[1:])/2
sigma_x = (bins[1] - bins[0])/np.sqrt(12) # Binning error in x
P.setp(patches, 'facecolor', 'g', 'alpha', 0.75)
# fitting and plotting
p0 = [700, 200, 25]
popt, pcov = curve_fit(gauss, bin_centres, n, p0=p0, sigma=sigma_n, absolute_sigma=True)
x = np.arange(100, 300, 0.5)
fit = gauss(x, *popt)
P.plot(x, fit, 'r--')
Bây giờ, phù hợp này (khi nó không thất bại) không xem xét các y-lỗi sigma_n
, nhưng tôi đã không tìm thấy một cách để làm cho nó xem xét sigma_x
. Tôi quét một vài chủ đề trên mailing list scipy và phát hiện ra làm thế nào để sử dụng giá trị absolute_sigma
và một bài đăng trên Stackoverflow về asymmetrical errors, nhưng không về lỗi trong cả hai hướng. Có thể đạt được không?
Tôi không biết liệu curve_fit có thể xử lý những sai sót trong x nhưng scipy.optimize.odr làm. Trên thực tế nó làm hồi quy khoảng cách trực giao hơn là các ô vuông đơn giản nhất trên biến phụ thuộc. –
Cảm ơn bạn đã bình luận! Tôi đã không tìm thấy một chức năng phù hợp (odr là trong scipy.odr, bằng cách này, không phải trong scipy.optimize.odr). Nó hoạt động hoàn hảo, cảm ơn! Nếu bạn đăng bình luận của bạn như một câu trả lời, tôi vui mừng chấp nhận nó như là một giải pháp. :-) – Zollern
@ChristianK. bạn có thể đăng bình luận của bạn như là một câu trả lời ... –