Có thể bạn quan tâm: Cách Vẽ Cây Hoa Đào: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
TÓM TẮT
- 1 1. Giới thiệu chung về CDF và tầm quan trọng trong thống kê
- 2 2. Chuẩn bị môi trường MATLAB
- 3 3. Tạo dữ liệu mẫu để vẽ CDF
- 4 4. Các phương pháp vẽ CDF trong MATLAB
- 5 5. Tùy chỉnh đồ thị CDF để trở nên chuyên nghiệp
- 6 6. Phân tích và so sánh CDF: Kiểm định Kolmogorov‑Smirnov (KS)
- 7 7. Các ví dụ thực tiễn
- 8 8. Xử lý dữ liệu lớn (Big Data) trong MATLAB
- 9 9. Tổng hợp các bước thực hiện (Checklist)
- 10 10. Các lỗi thường gặp và cách khắc phục
- 11 11. Kết luận
1. Giới thiệu chung về CDF và tầm quan trọng trong thống kê
1.1 Định nghĩa CDF
Cumulative Distribution Function (CDF) – hàm phân phối tích lũy – mô tả xác suất mà một biến ngẫu nhiên X có giá trị nhỏ hơn hoặc bằng một giá trị x nhất định. Ký hiệu toán học là
F_X(x) = P(X \le x)
CDF là công cụ nền tảng trong thống kê, giúp chúng ta:
- Kiểm tra mô hình phân phối dữ liệu.
- Tính các xác suất, phần trăm vị trí (percentile) và tóm tắt dữ liệu.
- So sánh các mẫu dữ liệu với nhau (ví dụ: kiểm định Kolmogorov‑Smirnov).
1.2 Vì sao cần vẽ CDF trong MATLAB?
MATLAB là môi trường tính toán mạnh mẽ, cung cấp các hàm dựng sẵn để xử lý và trực quan hoá dữ liệu. Khi làm việc với dữ liệu thực tế, việc vẽ CDF giúp:
- Nhìn nhanh hình dạng phân phối (đối xứng, lệch, đa đỉnh…).
- So sánh trực quan giữa các nhóm dữ liệu.
- Xác định các ngưỡng (threshold) cho các quyết định dựa trên xác suất.
Trong bài viết này, chúng ta sẽ đi qua các bước chi tiết để vẽ CDF trong MATLAB, từ cách tạo dữ liệu mẫu, tính toán CDF bằng các hàm có sẵn, tới cách tùy chỉnh đồ thị để đạt được kết quả chuyên nghiệp.
Có thể bạn quan tâm: Cách Vẽ Capture Trên Imindmap: Hướng Dẫn Chi Tiết Từ A Đến Z
2. Chuẩn bị môi trường MATLAB
2.1 Phiên bản MATLAB phù hợp
Hầu hết các hàm vẽ CDF đã có sẵn từ MATLAB R2016b trở lên. Đối với người dùng phiên bản cũ hơn, một số hàm như ecdf vẫn khả dụng, nhưng một số tính năng đồ họa mới (như histogram với tùy chọn Normalization','cdf') có thể không tồn tại.
2.2 Thư viện cần thiết
MATLAB có sẵn các toolbox sau:
| Toolbox | Chức năng liên quan |
|---|---|
| Statistics and Machine Learning Toolbox | ecdf, cdfplot, fitdist |
| Curve Fitting Toolbox | fitdist (cũng có trong toolbox trên) |
| Signal Processing Toolbox | Không bắt buộc, nhưng hữu ích cho tiền xử lý dữ liệu |
Nếu bạn không có toolbox trên, vẫn có thể vẽ CDF bằng các hàm cơ bản như sort và plot.
3. Tạo dữ liệu mẫu để vẽ CDF
Trước khi vẽ, chúng ta cần một tập dữ liệu. Dưới đây là một số ví dụ phổ biến:
3.1 Dữ liệu ngẫu nhiên từ phân phối chuẩn (Normal)
% Số lượng mẫu
N = 1000; % Tạo dữ liệu chuẩn (mean = 0, std = 1)
dataNormal = randn(N,1);
3.2 Dữ liệu từ phân phối exponential
lambda = 2; % rate parameter
dataExp = exprnd(1/lambda, N, 1);
3.3 Dữ liệu thực tế (ví dụ: chiều cao người)

Có thể bạn quan tâm: Cách Vẽ Cca (canonical Correlation Analysis) Trong R: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
% Giả sử chúng ta có file CSV chứa chiều cao (cm)
heightData = readtable('height_data.csv');
dataHeight = heightData.Height; % cột Height
Lưu ý: Khi làm việc với dữ liệu thực tế, nên loại bỏ NaN và kiểm tra outlier trước khi tính CDF.
dataHeight = dataHeight(~isnan(dataHeight));
4. Các phương pháp vẽ CDF trong MATLAB
4.1 Sử dụng hàm ecdf (Empirical CDF)
ecdf là hàm trong Statistics Toolbox, tính và vẽ CDF thực nghiệm.
% Vẽ CDF cho dữ liệu chuẩn
figure;
ecdf(dataNormal);
title('Empirical CDF of Standard Normal Data');
xlabel('x');
ylabel('F(x)');
grid on;
4.1.1 Tùy chỉnh ecdf để lấy giá trị CDF
ecdf trả về hai vector: f (giá trị CDF) và x (giá trị dữ liệu đã sắp xếp).
f,x = ecdf(dataNormal);
% Vẽ lại bằng plot để tùy chỉnh
figure;
plot(x, f, 'LineWidth', 2);
xlabel('x'); ylabel('F(x)');
title('Customized Empirical CDF');
grid on;
4.1.2 Thêm confidence bounds
ecdf cho phép tính khoảng tin cậy (confidence bounds) cho CDF.
~,~,~,~,cbs = ecdf(dataNormal,'Alpha',0.05); % 95% confidence
hold on;
plot(cbs(:,1),cbs(:,2), 'r--', 'LineWidth',1);
plot(cbs(:,1),cbs(:,3), 'r--', 'LineWidth',1);
legend('Empirical CDF','95% Confidence Bounds');
4.2 Sử dụng hàm cdfplot
cdfplot là một wrapper của ecdf, đơn giản hơn để vẽ nhanh.
figure;
cdfplot(dataExp);
title('CDF of Exponential Data');
xlabel('x'); ylabel('F(x)');
grid on;
4.3 Sử dụng histogram với tùy chọn Normalization','cdf'
Nếu bạn muốn biểu diễn CDF dạng “stairs” (bậc thang), histogram là lựa chọn tốt.
figure;
histogram(dataNormal,'Normalization','cdf','BinEdges',linspace(min(dataNormal),max(dataNormal),50));
title('CDF via Histogram');
xlabel('x'); ylabel('Cumulative Probability');
grid on;
4.4 Vẽ CDF cho phân phối lý thuyết (Theoretical CDF)
Khi bạn đã ước lượng tham số và muốn so sánh với CDF lý thuyết, dùng cdf hoặc makedist.
% Ước lượng tham số cho normal
pd = fitdist(dataNormal,'Normal'); % Tạo vector x để tính CDF
xVals = linspace(min(dataNormal), max(dataNormal), 200);
yVals = cdf(pd, xVals); % Vẽ cùng với empirical CDF
figure;
ecdf(dataNormal); hold on;
plot(xVals, yVals, 'r-', 'LineWidth',2);
legend('Empirical','Theoretical (Normal)');
title('Empirical vs Theoretical CDF');
grid on;
4.5 Vẽ CDF cho nhiều nhóm dữ liệu cùng một đồ thị
Giả sử chúng ta có hai nhóm: nam và nữ trong dữ liệu chiều cao.
% Giả sử dataHeightMale và dataHeightFemale đã được tách ra
figure;
hold on;
ecdf(dataHeightMale,'Function','cdf','LineStyle','-','Color','b');
ecdf(dataHeightFemale,'Function','cdf','LineStyle','--','Color','r');
legend('Male','Female');
xlabel('Height (cm)'); ylabel('Cumulative Probability');
title('CDF Comparison Between Genders');
grid on;
5. Tùy chỉnh đồ thị CDF để trở nên chuyên nghiệp
5.1 Định dạng trục và nhãn
ax = gca;
ax.FontSize = 12;
ax.TickLabelInterpreter = 'latex';
xlabel('X (units)','Interpreter','latex','FontSize',14);
ylabel('F(X)','Interpreter','latex','FontSize',14);
5.2 Thêm grid, box và màu nền
grid on;
box on;
set(gca,'Color',0.95 0.95 0.95); % nền xám nhạt
5.3 Đánh dấu các percentiles (ví dụ 25%, 50%, 75%)
percentiles = 0.25 0.5 0.75;
pValues = quantile(dataNormal, percentiles); % Tính CDF tại các giá trị này (đối với empirical CDF)
f,x = ecdf(dataNormal);
for i = 1:numel(pValues) % Tìm vị trí gần nhất ~,idx = min(abs(x - pValues(i))); plot(x(idx), f(idx), 'ko','MarkerSize',8,'MarkerFaceColor','k'); text(x(idx), f(idx)+0.03, sprintf('%.0f%%', percentiles(i)100),... 'HorizontalAlignment','center','FontSize',10);
end
5.4 Lưu đồ thị
saveas(gcf,'CDF_StandardNormal.png');
% Hoặc lưu dạng vector cho báo cáo
print(gcf,'-depsc2','CDF_StandardNormal.eps');
6. Phân tích và so sánh CDF: Kiểm định Kolmogorov‑Smirnov (KS)
Sau khi vẽ CDF, một cách thường dùng để đánh giá độ phù hợp của mô hình là kiểm định KS.
% Kiểm định dữ liệu chuẩn so với phân phối chuẩn lý thuyết
h,p,kstat = kstest(dataNormal);
fprintf('KS test result: h=%d, p-value=%.4f, statistic=%.4f\n',h,p,kstat);
Nếu h = 0, chúng ta không bác bỏ giả thuyết dữ liệu theo phân phối chuẩn (α = 0.05). Đồ thị CDF cộng với confidence bounds sẽ trực quan hoá kết quả này.

Có thể bạn quan tâm: Cách Vẽ Cây Kim Minecraft: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
7. Các ví dụ thực tiễn
7.1 Ứng dụng trong tài chính: Vẽ CDF lợi nhuận
% Giả sử returns là vector lợi nhuận hàng ngày
returns = readtable('stock_returns.csv');
r = returns.DailyReturn; figure;
ecdf(r);
title('Empirical CDF of Daily Stock Returns');
xlabel('Return'); ylabel('Cumulative Probability');
grid on;
Nhờ CDF, nhà đầu tư có thể xác định xác suất lợi nhuận dưới một mức nhất định (Value at Risk – VaR).
7.2 Ứng dụng trong y tế: Phân phối thời gian sống
% Thời gian sống (tháng) của bệnh nhân
survival = readtable('survival_time.csv');
t = survival.Months; % Vẽ CDF
figure;
ecdf(t);
title('Survival Time CDF');
xlabel('Months'); ylabel('Probability of Survival ≤ t');
grid on;
Khi kết hợp với hazard function, CDF giúp xây dựng mô hình sống còn (survival analysis).
7.3 So sánh các thuật toán Machine Learning
Giả sử bạn có các sai số (error) từ hai mô hình.
errModel1 = load('error_model1.mat');
errModel2 = load('error_model2.mat'); figure; hold on;
ecdf(errModel1.errors,'LineWidth',2,'Color','b');
ecdf(errModel2.errors,'LineWidth',2,'Color','r','LineStyle','--');
legend('Model 1','Model 2');
xlabel('Prediction Error'); ylabel('Cumulative Probability');
title('Error Distribution Comparison via CDF');
grid on;
Đồ thị cho thấy mô hình nào có ít lỗi lớn hơn (độ dốc CDF ở phần đuôi).
8. Xử lý dữ liệu lớn (Big Data) trong MATLAB
Khi dữ liệu lên tới hàng triệu bản ghi, ecdf có thể chậm. Một số cách tối ưu:
8.1 Sử dụng histcounts + tích lũy
% Dữ liệu lớn (ví dụ 10^7 mẫu)
bigData = randn(1e7,1); % Định nghĩa bin
edges = linspace(min(bigData), max(bigData), 1000);
counts = histcounts(bigData, edges, 'Normalization','count'); % Tích lũy
cumCounts = cumsum(counts);
cumProb = cumCounts / sum(counts); % Trung bình các điểm bin
midPoints = edges(1:end-1) + diff(edges)/2; % Vẽ
figure;
plot(midPoints, cumProb, 'LineWidth',1.5);
xlabel('x'); ylabel('F(x)'); grid on;
title('CDF of Large Dataset using Histogram');
8.2 Sử dụng tall arrays (MATLAB Parallel Computing Toolbox)
% Tạo tall array
tData = tall(bigData); % Tính CDF bằng hàm custom
% (MATLAB không có ecdf trực tiếp cho tall, nên ta dùng histcounts)
edges = linspace(-5,5,500);
tCounts, ~ = histcounts(tData, edges);
tCum = cumsum(tCounts) / sum(tCounts);
% Chuyển sang gather để vẽ
cumProb = gather(tCum);
midPts = edges(1:end-1) + diff(edges)/2;
figure; plot(midPts, cumProb);
9. Tổng hợp các bước thực hiện (Checklist)
| Bước | Mô tả | Lệnh MATLAB mẫu |
|---|---|---|
| 1 | Chuẩn bị dữ liệu (đọc, làm sạch) | data = readtable('file.csv'); data = data(~isnan(data.Var1),:); |
| 2 | Lựa chọn phương pháp CDF (ecdf, cdfplot, histogram) |
ecdf(data) |
| 3 | Tính toán CDF (nếu muốn giá trị) | f,x = ecdf(data); |
| 4 | Vẽ đồ thị | plot(x,f,'LineWidth',2); |
| 5 | Tùy chỉnh (trục, màu, legend) | xlabel(...); ylabel(...); legend(...); |
| 6 | Thêm confidence bounds (nếu cần) | ecdf(...,'Alpha',0.05); |
| 7 | So sánh với CDF lý thuyết | pd = fitdist(data,'Normal'); y = cdf(pd,xVals); |
| 8 | Kiểm định KS | h,p = kstest(data); |
| 9 | Lưu đồ thị | saveas(gcf,'myCDF.png'); |
10. Các lỗi thường gặp và cách khắc phục
| Lỗi | Nguyên nhân | Giải pháp |
|---|---|---|
| NaN xuất hiện trong CDF | Dữ liệu chứa NaN hoặc Inf | Loại bỏ NaN: data = data(~isnan(data)); |
| Đồ thị không hiển thị | Quên hold on khi vẽ nhiều CDF |
Thêm hold on hoặc vẽ từng figure riêng |
| Trục x bị cắt | Đặt BinEdges quá hẹp trong histogram |
Đặt BinEdges rộng hơn hoặc dùng linspace |
| Thời gian tính quá lâu | Dữ liệu quá lớn, dùng ecdf |
Dùng histcounts + tích lũy, hoặc tall arrays |
| Confidence bounds không khớp | Tham số Alpha không đúng |
Kiểm tra lại Alpha và số mẫu (N) |
11. Kết luận
Việc vẽ CDF bằng MATLAB không chỉ là một kỹ thuật đồ họa mà còn là một công cụ phân tích dữ liệu mạnh mẽ. Từ các hàm đơn giản như ecdf và cdfplot đến các phương pháp tùy chỉnh bằng histogram hay tall arrays, MATLAB đáp ứng đủ nhu cầu từ phân tích dữ liệu nhỏ tới big data. Khi kết hợp với các kiểm định thống kê (KS test) và việc so sánh với các mô hình lý thuyết, CDF trở thành nền tảng cho việc đánh giá mô hình, ra quyết định và trình bày kết quả trong báo cáo khoa học hay kinh doanh.
Hy vọng bài viết này đã cung cấp cho bạn một hướng dẫn toàn diện, từ kiến thức nền tảng đến các ví dụ thực tiễn và mẹo tối ưu hoá. Hãy áp dụng ngay vào dự án của mình, thử nghiệm các tùy chỉnh và khám phá sâu hơn những gì CDF có thể mang lại cho phân tích dữ liệu của bạn!
Chúc bạn thành công trong việc vẽ và khai thác CDF bằng MATLAB!
