Phát hiện gian lận với R
Tim Verdonck
Professor Data Science at KU Leuven
Animals trong gói MASS chứa trọng lượng não và cơ thể trung bình của 28 loài library(MASS)
data("Animals")
body brain
Mountain beaver 1.35 8.1
Cow 465.00 423.0
Grey wolf 36.33 119.5
Goat 27.66 115.0
X <- data.frame(log_body = log(Animals$body), log_brain = log(Animals$brain))
Boxplot của log trọng lượng cơ thể và não


Khoảng cách Mahalanobis (hay tổng quát) của một quan sát là khoảng cách từ quan sát tới trung tâm, có xét đến ma trận hiệp phương sai

Khoảng cách Mahalanobis cổ điển: dùng trung bình mẫu để ước lượng vị trí và ma trận hiệp phương sai mẫu để ước lượng phân tán
Để phát hiện ngoại lệ đa biến, so sánh khoảng cách Mahalanobis với ngưỡng cắt lấy từ phân phối khi bình phương
Trong 2 chiều, có thể dựng elip dung sai $97{.}5\%$, gồm các quan sát có khoảng cách Mahalanobis không vượt ngưỡng
animals.clcenter <- colMeans(X) animals.clcov <- cov(X) rad <- sqrt(qchisq(0.975, df = ncol(X)))library(car) ellipse.cl <- data.frame(ellipse(center = animals.clcenter, shape = animals.clcov,radius = rad, segments = 100, draw = FALSE)) colnames(ellipse.cl) <- colnames(X)fig <- fig + geom_polygon(data=ellipse.cl, color = "dodgerblue", fill = "dodgerblue", alpha = 0.2) + geom_point(aes(x = animals.clcenter[1], y = animals.clcenter[2]), color = "blue", size = 6)

Bộ ước lượng Minimum Covariance Determinant (MCD) của Rousseeuw là ước lượng vững phổ biến cho vị trí và phân tán đa biến
Ước lượng vững cho vị trí và phân tán bằng MCD
library(robustbase)
animals.mcd <- covMcd(X)
# Robust estimate of location
animals.mcd$center
# Robust estimate of scatter
animals.mcd$cov
Thay các ước lượng vững này vào định nghĩa khoảng cách Mahalanobis, ta được khoảng cách vững và có thể tạo elip dung sai vững.
library(robustbase) animals.mcd <- covMcd(X) ellipse.mcd <- data.frame(ellipse(center = animals.mcd$center, shape = animals.mcd$cov, radius = rad, segments = 100, draw = FALSE)) colnames(ellipse.mcd) <- colnames(X)fig2 <- fig + geom_polygon(data = ellipse.mcd, color = "red", fill = "red", alpha = 0.3) + geom_point(aes(x = animals.mcd$center[1], y = animals.mcd$center[2]), color = "red", size = 6)

MCDplot(animals.mcd, which = "dd")


Phát hiện gian lận với R