Giới thiệu chung về CDF và tầm quan trọng trong phân tích dữ liệu

Trong thống kê và xác suất, hàm phân phối tích lũy (Cumulative Distribution Function – viết tắt là CDF) là một công cụ vô cùng quan trọng giúp chúng ta hiểu rõ hơn về cách một biến ngẫu nhiên phân bố. CDF cho biết xác suất mà biến ngẫu nhiên X có giá trị nhỏ hơn hoặc bằng một giá trị x nào đó, tức là

F_X(x) = P(X \le x)

Việc vẽ CDF không chỉ giúp trực quan hoá phân bố dữ liệu mà còn hỗ trợ trong việc so sánh các mô hình, kiểm định giả thuyết, và thực hiện các bước tiếp theo như tính toán quantile, xác suất ngưỡng, hoặc xây dựng các phương pháp mô phỏng Monte Carlo.

MATLAB, với bộ công cụ thống kê mạnh mẽ (Statistics and Machine Learning Toolbox), cung cấp nhiều hàm và lớp hỗ trợ việc tính toán và vẽ CDF một cách nhanh chóng và chính xác. Bài viết này sẽ đưa bạn từ những kiến thức cơ bản nhất, qua các ví dụ thực tế, đến những kỹ thuật nâng cao để tùy biến biểu đồ CDF phù hợp với nhu cầu nghiên cứu và báo cáo.

1. Cơ sở lý thuyết: CDF là gì và các dạng phân bố thường gặp

1.1. Định nghĩa CDF

Với một biến ngẫu nhiên rời rạc (X):

F_X(x) = \sum_{t \le x} P(X = t)

Với một biến ngẫu nhiên liên tục (Y):

F_Y(y) = \int_{-\infty}^{y} f_Y(t) \, dt

trong đó (f_Y(t)) là hàm mật độ xác suất (PDF).

1.2. Các phân bố phổ biến

Phân bố Tham số PDF CDF (đóng gói trong MATLAB)
Normal (Gaussian) (\mu, \sigma) (\frac{1}{\sigma\sqrt{2\pi}} e^{-(x-\mu)^2/(2\sigma^2)}) normcdf(x, mu, sigma)
Exponential (\lambda) (\lambda e^{-\lambda x}) (x≥0) expcdf(x, lambda)
Uniform a, b (\frac{1}{b-a}) (a ≤ x ≤ b) unifcdf(x, a, b)
Poisson (rời rạc) (\lambda) (\frac{\lambda^k e^{-\lambda}}{k!}) poisscdf(k, lambda)
Binomial n, p (\binom{n}{k} p^k (1-p)^{n-k}) binocdf(k, n, p)

Việc hiểu các công thức trên sẽ giúp bạn xác định đúng hàm CDF khi mô phỏng hoặc khi tính toán thủ công. Tuy nhiên, trong thực tế, MATLAB đã cung cấp sẵn các hàm như normcdf, expcdf, unifcdf, … giúp bạn tránh những lỗi tính toán phức tạp.

2. Chuẩn bị môi trường MATLAB

2.1. Cài đặt Toolbox cần thiết

Cách Vẽ Cdf Trong Matlab
Cách Vẽ Cdf Trong Matlab

Đối với các hàm CDF, Statistics and Machine Learning Toolbox là bắt buộc. Để kiểm tra xem toolbox đã được cài đặt chưa, chạy:

ver

Nếu không thấy Statistics and Machine Learning Toolbox, bạn cần mua hoặc tải bản trial từ MathWorks.

2.2. Khởi tạo dữ liệu mẫu

Chúng ta sẽ tạo một số bộ dữ liệu mẫu để minh hoạ:

% Dữ liệu liên tục: mẫu Normal
mu = 0; sigma = 1;
X_cont = normrnd(mu, sigma, 1000, 1); % Dữ liệu rời rạc: mẫu Poisson
lambda = 4;
X_disc = poissrnd(lambda, 1000, 1);

3. Vẽ CDF cho dữ liệu liên tục

3.1. Sử dụng hàm ecdf (Empirical CDF)

ecdf là hàm chuẩn để vẽ CDF thực nghiệm từ một mẫu dữ liệu. Cú pháp cơ bản:

f, x = ecdf(data);
stairs(x, f, 'LineWidth', 2);
grid on;
xlabel('Giá trị');
ylabel('F(x)');
title('Empirical CDF của mẫu Normal');
  • f là vector các giá trị CDF tại các điểm x.
  • stairs tạo đồ thị dạng “bậc thang”, phản ánh tính rời rạc của CDF thực nghiệm.

3.2. Vẽ CDF lý thuyết cùng với ECDF

Để so sánh thực nghiệm và lý thuyết:

% ECDF
f_emp, x_emp = ecdf(X_cont);
stairs(x_emp, f_emp, 'b', 'LineWidth', 1.5);
hold on; % CDF lý thuyết
x_grid = linspace(min(X_cont), max(X_cont), 200);
f_theo = normcdf(x_grid, mu, sigma);
plot(x_grid, f_theo, 'r--', 'LineWidth', 2); legend('Empirical CDF', 'Normal CDF (theory)', 'Location', 'best');
xlabel('X');
ylabel('F_X(x)');
title('So sánh Empirical CDF và Normal CDF');
grid on;
hold off;

Kết quả sẽ cho thấy hai đường cong gần nhau nếu mẫu đủ lớn (theorem of large numbers).

3.3. Tùy biến đồ thị

MATLAB cho phép tùy chỉnh màu, kiểu đường, nhãn, và thậm chí thêm confidence bounds (độ tin cậy) cho ECDF:

% Vẽ ECDF với confidence bounds
~,~,~,~,ci = ecdf(X_cont, 'Alpha',0.05); % 95% confidence interval
stairs(x_emp, f_emp, 'b', 'LineWidth', 1.5);
hold on;
plot(x_emp, ci(:,1), 'k--', x_emp, ci(:,2), 'k--');
legend('Empirical CDF','95% CI');

3.4. Lưu đồ thị dưới dạng file

saveas(gcf, 'cdf_normal_empirical.png');

4. Vẽ CDF cho dữ liệu rời rạc

4.1. Dùng ecdf cho dữ liệu rời rạc

Cũng như dữ liệu liên tục, ecdf áp dụng cho dữ liệu rời rạc:

f_disc, x_disc = ecdf(X_disc);
stairs(x_disc, f_disc, 'LineWidth', 2);
xlabel('Số sự kiện (k)');
ylabel('F(k)');
title('Empirical CDF cho mẫu Poisson');
grid on;

4.2. So sánh với CDF lý thuyết

Cách Vẽ Cdf Trong Matlab
Cách Vẽ Cdf Trong Matlab
% ECDF
f_emp, x_emp = ecdf(X_disc);
stairs(x_emp, f_emp, 'b', 'LineWidth', 1.5);
hold on; % CDF lý thuyết
k_grid = 0:max(X_disc);
f_theo = poisscdf(k_grid, lambda);
stem(k_grid, f_theo, 'r', 'Marker','none'); % stem để hiển thị bước
legend('Empirical CDF','Poisson CDF (theory)');
xlabel('k');
ylabel('F(k)');
title('Empirical vs Theoretical CDF (Poisson)');
grid on;
hold off;

4.3. Hiển thị xác suất riêng lẻ (PMF)

Thường khi làm việc với dữ liệu rời rạc, chúng ta muốn đồng thời hiển thị hàm mật độ xác suất (PMF). Bạn có thể vẽ chúng trên cùng một trục phụ:

% PMF
pmf = poisspdf(k_grid, lambda);
yyaxis right
stem(k_grid, pmf, 'g','Marker','none');
ylabel('PMF (p(k))');
yyaxis left

5. Vẽ CDF cho các phân bố đã biết (không cần dữ liệu mẫu)

Khi bạn chỉ cần biểu diễn hàm CDF của một phân bố đã biết, sử dụng các hàm tích hợp sẵn:

% Uniform distribution trên 2,5
x = linspace(-1,7,300);
F = unifcdf(x, 2, 5);
plot(x, F, 'm', 'LineWidth', 2);
xlabel('x');
ylabel('F(x)');
title('Uniform CDF trên 2,5');
grid on;

Bạn có thể tạo đồ thị nhiều CDF trong cùng một hình để so sánh:

x = linspace(-4,4,400);
plot(x, normcdf(x,0,1), 'b', 'LineWidth', 1.5); hold on;
plot(x, normcdf(x,0,2), 'r--', 'LineWidth', 1.5);
plot(x, normcdf(x,0,0.5), 'g:', 'LineWidth', 1.5);
legend('\sigma=1','\sigma=2','\sigma=0.5');
title('So sánh Normal CDF với các độ lệch chuẩn khác nhau');
grid on;

6. Tùy biến nâng cao và các mẹo thực hành

6.1. Thay đổi kiểu trục (logarithmic)

Trong một số trường hợp, đặc biệt là khi dữ liệu có giá trị rất lớn hoặc rất nhỏ, bạn muốn hiển thị trục log:

semilogx(x, F, 'b', 'LineWidth', 2);
xlabel('log(x)');
ylabel('F(x)');
title('CDF trên trục logarit');
grid on;

6.2. Thêm annotation (chú thích)

Bạn có thể đánh dấu các quantile quan trọng (ví dụ median, 95th percentile) trực tiếp trên đồ thị:

% Median
med = norminv(0.5, mu, sigma);
plot(med med, 0 0.5, 'k--');
text(med, 0.05, sprintf('Median = %.2f', med), 'HorizontalAlignment','right'); % 95th percentile
p95 = norminv(0.95, mu, sigma);
plot(p95 p95, 0 0.95, 'k:');
text(p95, 0.1, sprintf('95%% = %.2f', p95), 'HorizontalAlignment','left');

6.3. Định dạng và xuất file chất lượng cao

Khi chuẩn bị cho báo cáo hoặc bài báo khoa học, bạn thường cần hình ảnh vector (PDF, EPS). Sử dụng:

Cách Vẽ Cdf Trong Matlab
Cách Vẽ Cdf Trong Matlab
print(gcf, 'cdf_normal_empirical','-dpdf','-r300'); % PDF 300 DPI

6.4. Vẽ CDF cho dữ liệu đa chiều (multivariate)

MATLAB không có hàm trực tiếp cho CDF đa chiều, nhưng bạn có thể đánh giá CDF biên bằng cách lấy một biến và cố định các biến còn lại, hoặc dùng Monte Carlo để ước tính:

% X ~ N(mu1 mu2, Sigma)
mu = 0 0;
Sigma = 1 0.5; 0.5 1;
R = mvnrnd(mu, Sigma, 2000);
% CDF của X1 (biên)
f_X1, x_X1 = ecdf(R(:,1));
stairs(x_X1, f_X1, 'b','LineWidth',2);
title('Empirical CDF của X_1 trong phân bố đa biến');

7. Ứng dụng thực tiễn của CDF trong các lĩnh vực

Lĩnh vực Ứng dụng CDF Ví dụ thực tế
Tài chính Đánh giá rủi ro (Value-at-Risk), mô hình giá tài sản VaR = quantile(0.95) của lợi nhuận
Kỹ thuật Độ tin cậy thiết bị, thời gian hỏng CDF thời gian sống của linh kiện
Y sinh học Phân tích thời gian sống, phân bố bệnh CDF thời gian tới khi bệnh tái phát
Machine Learning Kiểm định giả thuyết, ROC curves (dựa trên CDF) So sánh phân bố dự đoán vs thực tế
Môi trường Phân bố lượng mưa, nhiệt độ CDF lượng mưa hàng năm

Hiểu cách vẽ và phân tích CDF trong MATLAB giúp bạn truy cập nhanh tới những thông tin quan trọng trong dữ liệu, từ đó đưa ra quyết định dựa trên thống kê vững chắc.

8. Tổng hợp các bước thực hiện (Checklist)

  1. Chuẩn bị dữ liệu
  2. Dữ liệu thực nghiệm (X_cont, X_disc) hoặc xác định phân bố lý thuyết.
  3. Chọn hàm phù hợp
  4. ecdf cho dữ liệu mẫu.
  5. normcdf, expcdf, unifcdf, … cho phân bố đã biết.
  6. Vẽ đồ thị
  7. Dùng stairs cho ECDF, plot/stem cho CDF lý thuyết.
  8. Thêm confidence bounds nếu cần (Alpha trong ecdf).
  9. Tùy biến
  10. Màu, kiểu đường, nhãn, tiêu đề, legend.
  11. Thêm quantile, annotation, trục log.
  12. Lưu và xuất
  13. saveas, print với định dạng PNG, PDF, EPS.
  14. Kiểm tra
  15. So sánh ECDF và CDF lý thuyết, kiểm tra độ phù hợp (Kolmogorov‑Smirnov test).

9. Kiểm tra độ phù hợp bằng Kolmogorov‑Smirnov (KS test)

MATLAB cung cấp hàm kstest để kiểm tra giả thuyết mẫu đúng với một phân bố cụ thể:

% Kiểm tra mẫu Normal
h,p = kstest(X_cont, 'CDF', @(z) normcdf(z, mu, sigma));
fprintf('KS test: h = %d, p = %.4f\n', h, p);
  • h = 0 → không bác bỏ giả thuyết (mẫu phù hợp).
  • p là giá trị p‑value; nếu > 0.05 thường chấp nhận.

Bạn có thể vẽ QQ plot để trực quan hoá:

qqplot(X_cont);
title('QQ Plot: Kiểm tra chuẩn hóa');

10. Kết luận

Việc vẽ CDF trong MATLAB không chỉ là một thao tác đồ họa đơn thuần mà còn là cầu nối giữa dữ liệu thực nghiệm và các mô hình xác suất lý thuyết. Từ các hàm nền tảng như ecdf, normcdf, poisscdf đến các kỹ thuật nâng cao như confidence bounds, log‑scale, annotation và kiểm định KS, MATLAB cung cấp một bộ công cụ đầy đủ để bạn:

  • Hiểu cấu trúc phân bố dữ liệu.
  • So sánh các mô hình khác nhau.
  • Trình bày kết quả một cách chuyên nghiệp trong báo cáo hoặc bài báo.

Hy vọng bài viết này đã cung cấp cho bạn một hướng dẫn chi tiết, từ cơ bản đến nâng cao, giúp bạn tự tin thực hiện mọi yêu cầu liên quan đến CDF trong MATLAB. Hãy thực hành với dữ liệu thực của bạn, tùy biến các biểu đồ để phù hợp với mục tiêu nghiên cứu, và đừng quên kiểm tra độ phù hợp bằng các kiểm định thống kê như KS test. Chúc bạn thành công!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *