Nói đến data analytics, đặc biệt là phân tích số liệu y sinh, dân tình thường nhắc đến những cái tên nổi tiếng như SPSS, Stata, và R. Trên thực tế, công cụ của data analytics còn rất nhiều, từ những bé hạt tiêu như EpiInfo cho đến những người hùng như SAS, ngoài ra còn có các phần mềm chuyên biệt như MPlus chuyên dùng cho phân tích biến tiềm ẩn và SEM. Còn có một nhóm công cụ đặc biệt chuyên dùng cho data visualization (trực quan hóa số liệu) như Tableau hay PowerBI, Looker, v.v..
Đứng trước nhiều công cụ như vậy chúng ta biết chọn gì học gì bây giờ? Câu trả lời thực sự là tùy vào nhu cầu của bạn. Trong bài này mình chỉ giới thiệu hai công cụ cho thống kê y sinh học, đại diện cho hai trường phái phần mềm thương mại và mã nguồn mở, là Stata và R.
***
Stata là một phần mềm thống kê thường sử dụng trong thống kê y sinh và kinh tế lượng. Nếu mua phần mềm bản quyền thì cá nhân thường sẽ không đủ khả năng để chi trả (Stata 18 SE bản quyền cá nhân không thuộc tổ chức hàn lâm ở Việt Nam là 465 USD/năm). Ưu điểm của Stata là các thuật toán thống kê đã được kiểm tra kĩ lưỡng và đảm bảo tính chính xác ở cả những trường hợp rất đặc biệt (vd các số rất nhỏ hoặc rất lớn). Ngoài ra, Stata có một bộ tài liệu hướng dẫn (documentation) cực kì chi tiết - chỉ riêng phần nói về các lệnh trong Stata đã dài tới 3500 trang. Tuy nhiên, cá nhân mình thấy rằng cú pháp lệnh của Stata không được nhất quán, không cảm tính (tức là bạn đoán được phải để thông số này vào chỗ nào hoặc dùng tên gọi gì thì đúng). Lập trình trong Stata cũng hết sức đau đầu do hạn chế về các lệnh có sẵn và các khái niệm lập trình (vd, macro hay Mata) khá là khó để làm quen.
R là một môi trường dùng cho tính toán thống kê mã nguồn mở. Với sự bùng nổ của Internet, người dùng R ở khắp nơi có thể đóng góp các gói (package) lên kho chia sẻ chung, do đó R cho phép tùy biến thoải mái cho nhu cầu công việc. Tuy nhiên, cũng vì lí do này, những người sử dụng không chuyên sâu (như hầu hết chúng ta) không có gì để đảm bảo rằng kết quả phân tích chạy từ một công cụ nào đó trong R là hoàn toàn chính xác. Chẳng hạn, mình có theo dõi tác giả của thư viện matchit và WeightIt (các thư viện dùng cho propensity score methods) thì đợt vừa rồi họ phải nâng cấp một thư viện vì tính toán bị sai - đồng nghĩa với việc bao nhiêu nhóm nghiên cứu trong một thời gian khoảng vài tháng sẽ phải chạy lại phân tích.
Khi làm việc với số liệu, chúng ta thường chia làm 3 loại công việc: thao tác (data manipulation), phân tích (data analysis), và trực quan hóa (data visualization). Đứng trên các góc nhìn này:
- R manipulate số liệu thuận tiện hơn Stata rất nhiều. Mặc dù Stata có thể có sẵn khá nhiều công cụ, nhưng R cực kì linh hoạt, cho phép bạn thoải mái tạo biến mới, chuyển dạng dữ liệu, tái cấu trúc, tách gộp lọc, mà không phải tạo ra các tập dữ liệu con cũng như các biến tạm.
- Mình luôn có cảm giác tin tưởng kết quả phân tích của Stata hơn của R, mặc dù đối với các phân tích cơ bản thì chắc chắn hai phần mềm không có sự khác nhau, hoặc nếu có khác nhau thì thường chỉ là do lựa chọn về thuật toán thống kê, ví dụ một bên dùng Z statistics, một bên dùng t-statistics, hoặc một bên dùng HC1, một bên dùng HC3 robust variance estimation. Tuy nhiên, có nhiều công cụ Stata không có sẵn, và một số công cụ thì cũng hơi kì lạ - chẳng hạn như propensity score weighting lại không cho đánh giá mô hình treatment trước mà estimate thẳng luôn mô hình outcome (đi ngược lại với nguyên tắc và thế mạnh của PS). R thì bạn lên mạng bới một lúc thể nào cũng ra.
- Về data visualization thì R ăn đứt Stata là cái chắc. Chưa tính đến các thư viện bổ sung, chỉ riêng ggplot2 là đã đủ mạnh để làm tất cả những gì Stata có thể làm được về đồ họa. Tùy biến graphics trong Stata là một cực hình vì dòng lệnh dài vô tận và không thể nhớ được hết các tham số, mà lúc tìm trong documentation thì lật tung của tài liệu lên vẫn chưa đến được chỗ mình cần tìm. Mặc dù Stata 18 đã cải thiện rất nhiều về đồ họa, nên vấn đề cốt lõi của nó là khó nhớ các tùy biến thì mình vẫn xin phép vote cho R một phiếu.
Vậy giữa hai công cụ thì cái nào học khó hơn? Trên thực tế, nếu bạn muốn mì ăn liền và không quá quan trọng việc lập trình/tùy biến, Stata chắc chắn dễ học hơn. Gõ vài cái lệnh là mọi kết quả phân tích số liệu chảy tồ tồ ra, rất chi tiết. Tuy nhiên nếu bạn lại muốn tự động hóa công việc, chẳng hạn kết quả xuất ra phải giống như bảng số liệu mà mình sẽ trình bày trong bài báo, hay gộp kết quả 10 mô hình hồi quy làm một bảng duy nhất, hay vẽ một biểu đồ hết sức phức tạp, thì bạn sẽ cần học lập trình - và lúc này thì R sẽ trở nên hết sức ưu việt. Và đương nhiên, có những công cụ Stata có mà R không có hoặc không hoàn chỉnh, và có những công cụ R lại có mà Stata không có - do đó, bạn sẽ cần tính đến cả dự án cụ thể mà bạn sắp làm nữa.
***
Mình thì dùng cả hai (cả ba, nếu tính cả Python). Thật lòng thì mình thích Python hơn R vì với mình R vẫn không phải là một ngôn ngữ lập trình, nhưng các gói tính năng thống kê của Python không mạnh bằng R, nên vẫn phải dùng R cho công việc. Nếu xác định học R/Python cho công việc, bạn nên học một cách bài bản - bắt đầu từ các khái niệm cơ bản về lập trình, đừng nhảy cóc vào viết lệnh phân tích thống kê và hiển thị số liệu bằng đồ họa; học bài bản thì sau này sẽ nhàn hơn và tiến bộ xa hơn.
Ảnh: Ví dụ một đoạn mã để vẽ biểu đồ cột trong Stata cho một thử nghiệm lâm sàng mà đơn vị của mình công bố cách đây vài tháng.
Cuộc đời thì ngắn, mà nghề thì miên man; cơn bệnh phập phù; kinh nghiệm hiểm nguy, còn quyết định thì thật khó. Người thầy thuốc không phải chỉ chuẩn bị để tự mình làm đúng, mà còn khiến cho bệnh nhân, người đi theo và các yếu tố xung quanh hợp tác hài hòa.
Tham gia Group Telegram và Zalo cùng chúng tôi để nhận thông báo mới nhất cũng như giao lưu - chia sẻ nhé