Có nhiều cách khác nhau để chúng tôi có thể kiểm tra độ lệch so với bất kỳ phân phối nào (thống nhất trong trường hợp của bạn):
(1) Các xét nghiệm không tham số:
Bạn có thể sử dụng Thử nghiệm Kolmogorov-Smirnov để xem phân phối giá trị quan sát phù hợp với dự kiến.
R có ks.test
chức năng có thể thực hiện kiểm tra Kolmogorov-Smirnov.
pvalue <- runif(100, min=0, max=1)
ks.test(pvalue, "punif", 0, 1)
One-sample Kolmogorov-Smirnov test
data: pvalue
D = 0.0647, p-value = 0.7974
alternative hypothesis: two-sided
pvalue1 <- rnorm (100, 0.5, 0.1)
ks.test(pvalue1, "punif", 0, 1)
One-sample Kolmogorov-Smirnov test
data: pvalue1
D = 0.2861, p-value = 1.548e-07
alternative hypothesis: two-sided
(2) Kiểm tra mức độ phù hợp của Chi-vuông
Trong trường hợp này, chúng tôi phân loại dữ liệu. Chúng tôi lưu ý tần số quan sát và dự kiến trong mỗi ô hoặc loại. Đối với trường hợp liên tục, dữ liệu có thể được phân loại bằng cách tạo các khoảng cách nhân tạo (thùng).
# example 1
pvalue <- runif(100, min=0, max=1)
tb.pvalue <- table (cut(pvalue,breaks= seq(0,1,0.1)))
chisq.test(tb.pvalue, p=rep(0.1, 10))
Chi-squared test for given probabilities
data: tb.pvalue
X-squared = 6.4, df = 9, p-value = 0.6993
# example 2
pvalue1 <- rnorm (100, 0.5, 0.1)
tb.pvalue1 <- table (cut(pvalue1,breaks= seq(0,1,0.1)))
chisq.test(tb.pvalue1, p=rep(0.1, 10))
Chi-squared test for given probabilities
data: tb.pvalue1
X-squared = 162, df = 9, p-value < 2.2e-16
(3) Lambda
Nếu bạn đang thực hiện nghiên cứu kết hợp trên toàn bộ bộ gen (GWAS), bạn có thể muốn tính hệ số lạm phát gen , còn được gọi là lambda () (cũng xem ). Thống kê này là phổ biến trong cộng đồng di truyền thống kê. Theo định nghĩa, được định nghĩa là trung vị của các thống kê kiểm tra chi bình phương kết quả chia cho trung bình dự kiến của phân phối chi bình phương. Trung vị của phân phối chi bình phương với một bậc tự do là 0,4549364. Giá trị can có thể được tính từ điểm z, thống kê chi bình phương hoặc giá trị p, tùy thuộc vào đầu ra bạn có từ phân tích liên kết. Đôi khi tỷ lệ giá trị p từ đuôi trên bị loại bỏ.
Đối với giá trị p, bạn có thể thực hiện việc này bằng cách:
set.seed(1234)
pvalue <- runif(1000, min=0, max=1)
chisq <- qchisq(1-pvalue,1)
# For z-scores as association, just square them
# chisq <- data$z^2
#For chi-squared values, keep as is
#chisq <- data$chisq
lambda = median(chisq)/qchisq(0.5,1)
lambda
[1] 0.9532617
set.seed(1121)
pvalue1 <- rnorm (1000, 0.4, 0.1)
chisq1 <- qchisq(1-pvalue1,1)
lambda1 = median(chisq1)/qchisq(0.5,1)
lambda1
[1] 1.567119
Nếu kết quả phân tích, dữ liệu của bạn tuân theo phân phối chi bình phương (không lạm phát), giá trị expected dự kiến là 1. Nếu giá trị greater lớn hơn 1, thì đây có thể là bằng chứng cho một số sai lệch hệ thống cần được sửa trong phân tích của bạn .
Lambda cũng có thể được ước tính bằng phân tích hồi quy.
set.seed(1234)
pvalue <- runif(1000, min=0, max=1)
data <- qchisq(pvalue, 1, lower.tail = FALSE)
data <- sort(data)
ppoi <- ppoints(data) #Generates the sequence of probability points
ppoi <- sort(qchisq(ppoi, df = 1, lower.tail = FALSE))
out <- list()
s <- summary(lm(data ~ 0 + ppoi))$coeff
out$estimate <- s[1, 1] # lambda
out$se <- s[1, 2]
# median method
out$estimate <- median(data, na.rm = TRUE)/qchisq(0.5, 1)
Một phương pháp khác để tính toán lambda là sử dụng 'KS' (tối ưu hóa sự phù hợp phân phối chi2.1df bằng cách sử dụng thử nghiệm Kolmogorov-Smirnov).