Files
Documentation/sample_size_site_full/med_survival_guide.html
2025-10-18 11:55:59 +07:00

175 lines
12 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<title>Tính cỡ mẫu cho Phân tích Sống sót (Log-rank Test)</title>
<!-- ⚙️ Cấu hình MathJax -->
<script>
window.MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']],
displayMath: [['$$', '$$'], ['\\[', '\\]']]
},
svg: { fontCache: 'global' }
};
</script>
<!-- MathJax -->
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
</script>
<style>
.sample-size-guide {
font-family: Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 900px;
margin: auto;
padding: 20px;
}
.sample-size-guide h2 {
color: #0056b3;
border-bottom: 2px solid #f4f4f4;
padding-bottom: 5px;
}
.sample-size-guide h3 {
color: #1a73e8;
}
.sample-size-guide code {
font-family: "Courier New", Courier, monospace;
background-color: #f1f1f1;
padding: 2px 4px;
border-radius: 4px;
}
.sample-size-guide ul {
margin-left: 20px;
}
.sample-size-guide li {
margin-bottom: 10px;
}
p[style*="text-align: center"] {
margin: 15px 0;
}
</style>
</head>
<body>
<div class="sample-size-guide">
<h2>Giới thiệu Tính cỡ mẫu cho Phân tích Sống sót (Log-rank Test)</h2>
<p>
Trong nghiên cứu Y tế công cộng, các nhà nghiên cứu thường quan tâm đến <strong>thời gian xảy ra một biến cố</strong>
(như tử vong, tái phát bệnh, hồi phục, hoặc ngừng điều trị).
Phân tích sống sót (<em>survival analysis</em>) giúp mô hình hóa xác suất sống sót hoặc nguy cơ theo thời gian.
</p>
<p>
Khi cần so sánh hai nhóm (ví dụ: nhóm can thiệp và nhóm chứng), phép kiểm định phổ biến nhất là
<strong>Log-rank test</strong>. Việc tính toán cỡ mẫu phù hợp là bước quan trọng để đảm bảo
<strong>đủ công suất thống kê (power)</strong> để phát hiện khác biệt thật sự giữa hai nhóm.
</p>
<h3>1. Nguyên lý của Log-rank Test</h3>
<p>
Giả thuyết cần kiểm định:
</p>
<ul>
<li><strong>Giả thuyết không (H₀):</strong> Không có khác biệt về phân bố sống sót giữa hai nhóm.</li>
<li><strong>Giả thuyết đối (H₁):</strong> Có khác biệt đáng kể về tỷ lệ sống giữa hai nhóm.</li>
</ul>
<p>
Log-rank test dựa trên so sánh số sự kiện (ví dụ tử vong) quan sát được so với kỳ vọng ở mỗi nhóm,
tích lũy theo thời gian.
</p>
<h3>2. Các Thông số Cần Biết Trước Khi Tính Cỡ Mẫu</h3>
<ul>
<li><strong>Mức ý nghĩa ($\alpha$):</strong> Thông thường là 0.05.</li>
<li><strong>Công suất ($1-\beta$):</strong> Thường là 0.80 hoặc 0.90.</li>
<li><strong>Tỷ lệ sự kiện kỳ vọng ($p$):</strong> Tỷ lệ bệnh nhân dự kiến gặp biến cố trong thời gian theo dõi.</li>
<li><strong>Tỷ số nguy cơ (Hazard Ratio, HR):</strong> Mức giảm (hoặc tăng) nguy cơ giữa hai nhóm.</li>
<li><strong>Tỷ lệ phân nhóm ($r$):</strong> Số người ở nhóm 1 so với nhóm 2 (thường là 1:1).</li>
</ul>
<h3>3. Công thức Tính Cỡ Mẫu (Freedman, 1982)</h3>
<p>
Số <strong>sự kiện cần thiết</strong> (chứ chưa phải số người) để đạt công suất mong muốn:
</p>
<p style="text-align: center; font-size: 1.2em;">
$$E = \frac{(Z_{1-\alpha/2} + Z_{1-\beta})^2}{[\ln(HR)]^2 \, r(1 - r)}$$
</p>
<p>Trong đó:</p>
<ul>
<li>$E$: tổng số sự kiện (ví dụ: tử vong, tái phát) cần quan sát.</li>
<li>$Z_{1-\alpha/2}$: giá trị Z cho mức ý nghĩa (ví dụ 1.96).</li>
<li>$Z_{1-\beta}$: giá trị Z cho công suất mong muốn (ví dụ 0.84 cho 80%).</li>
<li>$HR$: hazard ratio mong đợi giữa hai nhóm.</li>
<li>$r$: tỷ lệ mẫu ở nhóm can thiệp.</li>
</ul>
<p>
Sau đó, tổng cỡ mẫu $N$ được ước tính từ $E$ và xác suất xảy ra sự kiện:
</p>
<p style="text-align: center; font-size: 1.2em;">
$$N = \frac{E}{p}$$
</p>
<p>
Nếu có thời gian tuyển chọn và theo dõi khác nhau, cần điều chỉnh thêm cho hiện tượng kiểm duyệt (censoring).
</p>
<h4>Ví dụ minh họa</h4>
<p>
Một thử nghiệm cộng đồng về can thiệp giảm nguy cơ tử vong tim mạch có:
</p>
<ul>
<li>$\alpha = 0.05$, power = 0.8</li>
<li>$HR = 0.70$ (giảm nguy cơ 30%)</li>
<li>$p = 0.25$ (25% tử vong trong thời gian theo dõi)</li>
<li>$r = 0.5$ (chia đều hai nhóm)</li>
</ul>
<p>Tính toán:</p>
<p style="text-align: center; font-size: 1.1em;">
$$E = \frac{(1.96 + 0.84)^2}{[\ln(0.7)]^2 (0.5)(0.5)} \approx 62.5$$
$$N = \frac{62.5}{0.25} = 250$$
</p>
<p>
👉 Như vậy, cần khoảng <strong>250 người</strong> (125 mỗi nhóm) để đạt 80% power trong điều kiện tỷ lệ sự kiện 25%.
</p>
<h3>4. Mở rộng Cho Tình Huống Y Tế Công Cộng</h3>
<ul>
<li><strong>Thời gian tuyển chọn dài:</strong> nếu bệnh nhân được tuyển dần theo thời gian, cần điều chỉnh cỡ mẫu cho <em>person-time</em> và thời gian theo dõi trung bình.</li>
<li><strong>Censoring cao:</strong> khi có nhiều người rút khỏi nghiên cứu, cần tăng $N$ lên để đảm bảo đủ số sự kiện $E$ quan sát được.</li>
<li><strong>Nhiều nhóm (>2):</strong> có thể dùng kiểm định log-rank mở rộng, nhưng tính toán cỡ mẫu sẽ cần mô phỏng hoặc phần mềm chuyên biệt (như PASS, nQuery, R package <code>powerSurvEpi</code>).</li>
</ul>
<h3>5. Quy tắc Kinh nghiệm</h3>
<ul>
<li>Ít nhất cần khoảng <strong>50100 sự kiện</strong> cho một phân tích sống sót có ý nghĩa.</li>
<li>Trong hồi quy Cox với nhiều biến, nên có ít nhất <strong>10 sự kiện cho mỗi biến độc lập</strong> (tương tự logistic).</li>
</ul>
<hr>
<p>
<strong>Kết luận:</strong>
Trong Y tế công cộng, khi thiết kế nghiên cứu can thiệp hoặc theo dõi bệnh nhân,
nên ưu tiên dùng <strong>công thức Freedman (1982)</strong> để ước tính số sự kiện cần thiết,
sau đó điều chỉnh theo tỷ lệ biến cố kỳ vọng và thời gian theo dõi.
Khi dữ liệu phức tạp hoặc có kiểm duyệt cao, hãy dùng mô phỏng để ước tính công suất thực tế.
</p>
</div>
<script>
document.addEventListener("DOMContentLoaded", () => {
if (window.MathJax && window.MathJax.typesetPromise) {
MathJax.typesetPromise();
}
});
</script>
</body>
</html>