messenger_logo
Liên hệ qua Messenger
SciEco

Tạo dữ liệu tổng hợp với r-vine copulas thông qua esgtoolkit trong r

I
IEFPA
Ngày viết: 30/03/2026

R-vine copulas là một công cụ phân tích mạnh mẽ giúp mô hình hóa sự phụ thuộc phức tạp giữa nhiều biến số trong một tập dữ liệu. Việc tạo ra dữ liệu tổng hợp nhằm phục vụ cho kiểm thử mô hình hoặc chia sẻ thông tin mà không làm lộ dữ liệu nhạy cảm đang trở thành một nhu cầu thiết yếu. Gói esgtoolkit trong R cung cấp một giao diện trực quan và tối ưu để huấn luyện các mô hình R-vine copula, đồng thời mô phỏng sinh ra dữ liệu mới bảo toàn chặt chẽ các đặc tính thống kê của dữ liệu gốc.

Chuẩn bị môi trường và dữ liệu đầu vào

Để bắt đầu, chúng ta cần cài đặt gói esgtoolkit từ kho lưu trữ. Trong bài viết này, tập dữ liệu chuỗi thời gian EuStockMarkets bao gồm các chỉ số chứng khoán châu Âu như DAX, SMI, CAC và FTSE sẽ được sử dụng làm minh họa. Dữ liệu này được chuyển đổi sang dạng tỷ suất sinh lợi logarit thông qua hàm có sẵn của gói.

1devtools::install_github("Techtonique/esgtoolkit")
2library(esgtoolkit)
3y <- esgtoolkit::calculatereturns(ts(EuStockMarkets[1:250, ], start=start(EuStockMarkets), frequency=frequency(EuStockMarkets)), type = "log")

Huấn luyện mô hình và chạy mô phỏng

Sau khi đã có dữ liệu tỷ suất sinh lợi, bước tiếp theo là cấu hình và chạy mô phỏng bằng hàm simulate_rvine. Thuật toán sẽ tự động chuyển đổi dữ liệu sang dạng phân phối chuẩn hóa và tìm kiếm cấu trúc cây R-vine copula phù hợp nhất. Quá trình này tính toán qua nhiều vòng lặp để chọn ra kết quả có điểm đánh giá chất lượng cao nhất.

1result <- simulate_rvine(y, n = 500, verbose = TRUE, n_trials = 5)
2print(result)

Hệ thống sẽ ghi nhận quá trình khớp mô hình và trả về các thông số cụ thể của cấu trúc D-vine. Các chỉ số như logLik, AIC và BIC được sử dụng để đánh giá độ khít của mô hình. Mỗi cạnh của cây copula sẽ được gán một họ phân phối cụ thể như SBB7, N hoặc SG cùng với các tham số tương quan tau của Kendall. Quá trình mô phỏng trải qua năm lần thử nghiệm, hệ thống sẽ chọn ra bộ dữ liệu có sai số tương quan thấp nhất.

Phân tích và đánh giá chất lượng dữ liệu tổng hợp

Dữ liệu sinh ra cần được đánh giá kỹ lưỡng để đảm bảo nó phản ánh đúng hành vi của dữ liệu gốc. Bạn có thể gọi các hàm vẽ biểu đồ cơ bản để trực quan hóa sự phân phối hoặc ma trận tương quan giữa các biến số.

1plot(result, type = "distribution")
2plot(result, type = "correlation")

Bên cạnh việc quan sát qua biểu đồ, phần tử diagnostics trong kết quả trả về cung cấp một danh sách chi tiết các ma trận sai số. Hệ thống tính toán sự chênh lệch giữa ma trận tương quan của dữ liệu gốc và dữ liệu tổng hợp theo cả hai phương pháp Kendall tau và Pearson. Giá trị sai số tuyệt đối trung bình càng nhỏ, cùng với p-value cao trong các bài kiểm định phân phối, chứng tỏ dữ liệu mô phỏng càng sát với thực tế.

1str(result$diagnostics)
2sim_data <- result$simulated_data
3head(sim_data)

Kết quả xuất ra sẽ là một bảng dữ liệu mới gồm các cột DAX, SMI, CAC và FTSE với năm trăm quan sát, mang đầy đủ tính chất của thị trường tài chính ban đầu nhưng hoàn toàn là các con số được tổng hợp nhân tạo.

✨ Việc ứng dụng R-vine copulas kết hợp với kỹ thuật chọn lọc vòng lặp nhiều lần giúp giảm thiểu tối đa sự biến dạng của ma trận tương quan, giải quyết triệt để bài toán mất mát thông tin khi sinh dữ liệu nhân tạo cho các chuỗi thời gian tài chính phức tạp.

Dựa vào danh sách kết quả diagnostics, bạn sẽ làm cách nào để quyết định xem việc tăng số vòng lặp mô phỏng lên hai mươi lần có thực sự cải thiện đáng kể sai số tương quan Pearson hay chỉ làm tăng chi phí tính toán phần cứng?


Bài viết khác
Dữ liệu hiện diện ở khắp mọi nơi. Các cơ quan chính phủ, tổ chức tài chính, trường đại học và nền tảng mạng xã hội thường cung cấp quyền truy cập dữ liệu của họ thông qua API. Hệ thống này đóng vai trò như một cầu nối, thường trả về khối dữ liệu được yêu cầu dưới định dạng tệp JSON. Việc nắm vững cách sử dụng Python để gửi các truy vấn API và xử lý dữ liệu JSON thu được ngay bên trong môi trường Stata là một kỹ năng cực kỳ hữu ích cho quá trình phân tích dữ liệu hiện đại. Khái quát về cấu trúc API và định dạng JSON API là một phần mềm trung gian cho phép hệ thống của bạn yêu cầu dữ liệu từ một hệ thống máy tính khác. Cú pháp truy vấn thường mang tính đặc thù tùy thuộc vào từng hệ thống cung cấp, nhưng một cấu trúc điển hình luôn bắt đầu bằng một URL theo sau là các tùy chọn tham số. Bài viết này sẽ lấy ví dụ về việc sử dụng hệ thống openFDA để truy xuất dữ liệu về các biến cố bất lợi của thuốc từ Cục Quản lý Thực phẩm và Dược phẩm Hoa Kỳ. Chúng ta hoàn toàn có thể thêm các điều kiện lọc vào lời gọi API để thu hẹp phạm vi dữ liệu trả về. Dữ liệu này hiển thị dưới dạng JSON, một định dạng lưu trữ phổ biến được cấu trúc bởi tập hợp các cặp khóa và giá trị. Khóa hoạt động tương tự như một biến số trong tập dữ liệu Stata, còn giá trị chính là dữ liệu thực tế được ghi nhận.
Trong bài phân tích trước, chúng ta đã làm quen với mô hình tuyến tính tổng quát thông qua một tập dữ liệu khá đặc biệt: số ca tử vong do ngựa đá trong quân đội Phổ. Tập dữ liệu này đếm số lượng tử vong của các quân đoàn qua từng năm. Vì đây là dữ liệu đếm, chúng ta đã điều chỉnh mô hình tuyến tính để sử dụng phân phối Poisson, đồng thời áp dụng hàm liên kết log. Tuy nhiên, có một khía cạnh mà chúng ta chưa xem xét: liệu tất cả các quân đoàn có tỷ lệ tử vong giống hệt nhau không? Khám phá dữ liệu theo từng nhóm Trước tiên, chúng ta cần thiết lập môi trường trong R.
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội