簡體   English   中英

計算百分位數? (或更籠統地說,在許多值z處由2個向量x和y隱式定義評估函數)

[英]Calculate percentiles? (Or more generally, evaluate function implicitly defined by 2 vectors x and y at many values z)

假設您有一些向量z然后計算[f, x] = ecdf(z); ,因此您的經驗CDF可以用stairs(x, f)繪制。

有沒有一種簡單的方法來計算z所有百分位數?

我可以做類似的事情:

  • 循環通過z ,即對於每個條目z(i)z
    • 通過排序的向量x進行二進制搜索以找到z(i)位置。 (找到索引j使得x(j)= z(i))
    • 找出對應的值f(j)

感覺應該有一種更簡單,已經實現的方法來執行此操作...

f為定義為值x單調函數 ,您要為其計算值p的反函數。 在您的情況下, f是單調的,因為它是CDF。 p值定義了所需的分位數。 然后,您可以簡單地使用interp1在值p處插值x (作為f的函數):

z = randn(1,1e5); % example data: normalized Gaussian distribution
[f, x] = ecdf(z); % compute empirical CDF
p = [0.5 0.9 0.95]; % desired values for quantiles
result = interp1(f, x, p);

在上述代碼的示例運行中,這將產生

result =
   0.001706069265714   1.285514249607186   1.647546848952448

對於從數據z 計算分位數 p的特定情況,您可以直接使用quantile ,從而避免計算經驗CDF:

result = quantile(z, p)

結果可能略有不同,具體取決於第一種方法中的經驗CDF的計算方式:

>> quantile(z, p)
ans =
   0.001706803588857   1.285515826972878   1.647582486507752

為了進行比較,以上示例(高斯分布)的理論值為

>> norminv(p)
ans =
                   0   1.281551565544601   1.644853626951472

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM