2012-02-03 60 views
12

Sử dụng R, nó là tầm thường để tính toán quantiles cho xác suất được đưa ra trong một bản phân phối mẫu:Làm cách nào để tính toán xác suất cho một lượng tử đã cho trong R?

x <- rnorm(1000, mean=4, sd=2) 
quantile(x, .9) # results in 6.705755 

Tuy nhiên, tôi không thể tìm thấy một cách dễ dàng để làm nghịch đảo-tính toán xác suất cho một quantile đưa ra trong mẫu x. Gần nhất tôi đã đi là sử dụng pnorm() với độ lệch trung bình và tiêu chuẩn cùng tôi sử dụng khi tạo mẫu:

pnorm(5, mean=4, sd=2) # results in 0.6914625 

Tuy nhiên, vì đây là tính toán xác suất từ ​​phân phối chuẩn đầy đủ, và không phải là mẫu x , nó không hoàn toàn chính xác.

Có chức năng nào về cơ bản không nghịch đảo của quantile()? Một cái gì đó mà về cơ bản cho phép tôi làm điều tương tự như pnorm() nhưng với một mẫu? Một cái gì đó như thế này:

backwards_quantile(x, 5) 

Tôi đã tìm thấy ecdf() chức năng, nhưng không thể tìm ra một cách để làm cho nó dẫn đến một khả năng duy nhất thay vì một đối tượng phương trình đầy đủ.

Trả lời

14

ecdf trả về một hàm: bạn cần áp dụng nó.

f <- ecdf(x) 
f(quantile(x,.91)) 
# Equivalently: 
ecdf(x)(quantile(x,.91)) 
+0

Perfect! Cảm ơn! – Andrew

+3

Trong ví dụ được hiển thị trong bài gốc, bạn thực sự phải chạy 'ecdf (x) (5)' để tìm số lượng của 5 cho trước 'x' (xấp xỉ 0,697 cho hạt 123). –

0

Chỉ cần cho thuận tiện, chức năng này sẽ giúp:

quantInv <- function(distr, value) ecdf(distr)(value) 
set.seed(1) 
x <- rnorm(1000, mean=4, sd=2) 
quantInv(x, c(4, 5, 6.705755)) 
[1] 0.518 0.685 0.904 
Các vấn đề liên quan