2011-12-28 56 views
6

Tôi có tập tin data.txt với hai cột và N hàng, một cái gì đó như thế này:Matlab, cách tính AUC (Khu vực dưới đường cong)?

0.009943796 0.4667975 
0.009795735 0.46777886 
0.009623984 0.46897832 
0.009564759 0.46941447 
0.009546991 0.4703958 
0.009428543 0.47224948 
0.009375241 0.47475737 
0.009298249 0.4767201 
[...] 

Mỗi vài giá trị trong các tập tin tương ứng với một tọa độ điểm (x, y). Nếu được vẽ, các điểm này sẽ tạo ra một đường cong. Tôi muốn tính toán diện tích dưới đường cong (AUC) của đường cong này.

Vì vậy, tôi load dữ liệu:

data = load("data.txt"); 
X = data(:,1); 
Y = data(:,2); 

Vì vậy, X chứa tất cả các x tọa độ của điểm, và Y tất cả các tọa độ y.

Làm cách nào để tính diện tích dưới đường cong (AUC)?

+1

Điều đó tùy thuộc. [Quy tắc hình thang] (http://en.wikipedia.org/wiki/Trapezium_rule) có đủ tốt cho bạn không? –

+0

http://www.mathworks.com/matlabcentral/fileexchange/24597-area-under-a-curve –

+0

@Robert: có vẻ như đó là khu vực dưới đường cong của một * chức năng * (Matlab có một nhóm toàn bộ ' các hàm quad'xxxx()). OP đang tìm kiếm tích hợp số liệu. –

Trả lời

3

Cách dễ nhất là hàm quy tắc hình thang trapz.

Nếu dữ liệu của bạn được biết là trơn tru, bạn có thể thử sử dụng quy tắc của Simpson, nhưng không có gì tích hợp với MATLAB để tích hợp dữ liệu số qua quy tắc của Simpson. (& Tôi không chắc chắn làm thế nào để sử dụng nó cho x/dữ liệu y trong đó x không tăng đều đặn)

+0

Thanx guys, tôi đã thử với trapz(), nhưng nó kỳ lạ mang lại cho tôi luôn luôn giá trị tiêu cực. Tại sao lại thê nay? Nếu nó là một khu vực, nó phải luôn luôn tích cực ... Bất kỳ ý tưởng? Thanx! –

+3

Nếu đường cong xuống dưới 0 thì diện tích thực tế sẽ bị giảm. Đây chỉ là tích phân, nhớ lấy. Để có được AUC dương tính, bạn có thể cần phải thay đổi đường cơ sở. Ví dụ, trừ 'min (Y)' từ 'Y'.Hoặc bạn có thể sử dụng 'abs (Y)' để tổng hợp các vùng dương và âm. – yuk

+2

Về mặt kỹ thuật, nếu bạn sử dụng 'trapz (x, y)', dấu hiệu của kết quả phụ thuộc vào dấu của y và dấu hiệu của sự thay đổi trong x. (hãy nhớ: đây là tích phân của y dx) Vì vậy, nếu giá trị y của bạn là dương nhưng x đang giảm, bạn sẽ nhận được một số âm. Nó thực sự phức tạp hơn một chút so với: đối với các đường cong khép kín, dấu hiệu phải dương cho bao quanh theo chiều kim đồng hồ và âm đối với bao quanh ngược chiều kim đồng hồ (xem http://en.wikipedia.org/wiki/Green%27s_theorem#Area_Calculation). –

1

Bạn có thể làm một cái gì đó như thế:

AUC = sum((Y(1:end-1)+Y(2:end))/2.*... 
    (X(2:end)-X(1:end-1))); 
+0

Oli, bạn có thể thêm một lời giải thích hoặc liên kết cho phương trình bạn đã sử dụng không? – Tin

4

chỉ cần thêm AUC = trapz (X , Y) để chương trình của bạn và bạn sẽ nhận được diện tích dưới đường cong

1

Nguồn: Link

Một ví dụ trong MATLAB để giúp bạn nhận được câu trả lời của bạn ...

x=[3 10 15 20 25 30]; 
y=[27 14.5 9.4 6.7 5.3 4.5]; 
trapz(x,y) 

Trong trường hợp bạn có giá trị âm trong y, bạn có thể làm như thế nào,

y=max(y,0) 
0

Có một số tùy chọn để trapz cho người đã sẵn sàng để làm một số mã hóa tự. Liên kết này cho thấy việc thực hiện Simpson's rule, với mã python được bao gồm. Ngoài ra còn có một số File Exchange trên quy tắc simpsons.

Các vấn đề liên quan