2012-02-03 471 views
12

使用R,這是微不足道的計算給出概率位數的抽樣分佈:如何計算R中給定分位數的概率?

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

但是,我無法找到一個簡單的方法做反向計算在給定的分位數的概率樣品x。我來最接近的是使用pnorm()與創建樣品時,我用同樣的平均值和標準偏差:

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

然而,因爲這是從全正態分佈計算概率,而不是樣品x ,這並不完全準確。

是否有一個函數,基本上做了quantile()的倒數?基本上可以讓我做與pnorm()相同的事情,但帶有示例?事情是這樣的:

backwards_quantile(x, 5) 

我已經找到了ecdf()功能,但不能想出一個辦法,使之產生一個概率,而不是一個完整的公式對象。

回答

14

ecdf返回一個函數:您需要應用它。

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

完美!謝謝! – Andrew 2012-02-03 05:33:53

+3

在原始文章中顯示的示例中,實際上,爲了查找給定'x'的分位數(給定種子123,大約0.697),您實際上必須運行'ecdf(x)(5)'。 – 2014-02-14 14:05:33

0

只是爲了方便,這個功能可以幫助:

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