Tính toán lạm phát quan sát và giá trị p dự kiến ​​từ phân phối đồng đều trong lô QQ


9

Tôi đang cố gắng định lượng mức độ lạm phát (nghĩa là cách tốt nhất các điểm dữ liệu quan sát phù hợp với dự kiến). Một cách là quá nhìn vào cốt truyện QQ. Nhưng tôi muốn tính toán một số chỉ số số cho lạm phát - có nghĩa là mức độ quan sát phù hợp với phân phối thống nhất về mặt lý thuyết.

nhập mô tả hình ảnh ở đây

Dữ liệu ví dụ:

# random uniform distribution 
pvalue <- runif(100, min=0, max=1)
# with inflation expected i.e. not uniform distribution  
pvalue1 <- rnorm(100, mean = 0.5, sd=0.1)

1
Để chúng tôi có thể hiểu những gì bạn đang hỏi, vui lòng bao gồm một định nghĩa định lượng về "lạm phát" hoặc "viêm" [ sic ] trong câu hỏi này hoặc nếu không cung cấp một lời giải thích chính xác hơn về những gì chính xác được đo lường. Có lẽ bạn đang cố gắng định lượng mức độ mà một phân phối đơn biến theo kinh nghiệm khởi hành từ một phân phối lý thuyết được định trước?
whuber

vâng, tôi muốn có một thước đo về mức độ phân phối theo kinh nghiệm khởi hành từ phân phối đơn biến được chỉ định trước. Tôi có thể đánh giá từ QQ về mặt định tính nhưng không phải là định lượng.
ndorlearn

Câu trả lời:


13

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.testchứ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).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.