[英]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.