Как рассчитать 99% покрытие в MATLAB? - PullRequest
10 голосов
/ 05 марта 2010

У меня есть матрица в MATLAB, и мне нужно найти значение 99% для каждого столбца.Другими словами, ценность такая, что 99% населения имеет большую ценность, чем она.Есть ли в MATLAB функция для этого?

Ответы [ 3 ]

11 голосов
/ 05 марта 2010

Используйте функцию QUANTILE.

Y = quantile(X,P);

где X - матрица, а P - скаляр или вектор вероятностей. Например, если P = 0.01, Y будет вектором значений для каждого столбца, так что 99% значений столбца будут больше.

10 голосов
/ 05 марта 2010

Самое простое решение - использовать функцию QUANTILE , как юк предложил .

Y = quantile(X,0.01);

Однако вам понадобится Панель инструментов статистики , чтобы использовать функцию QUANTILE . Решение, которое не зависит от наборов инструментов, можно найти, отметив, что QUANTILE вызывает функцию PRCTILE , которая сама вызывает встроенную функцию INTERP1Q для выполнения первичное вычисление. Для общего случая двумерной матрицы, которая не содержит значений NaN , вы можете вычислить квантили каждого столбца, используя следующий код:

P = 0.01;       %# Your probability
S = sort(X);    %# Sort the columns of your data X
N = size(X,1);  %# The number of rows of X
Y = interp1q([0 (0.5:(N-0.5))./N 1]',S([1 1:N N],:),P);  %'# Get the quantiles

Это должно дать вам те же результаты, что и вызов QUANTILE , без каких-либо наборов инструментов.

2 голосов
/ 05 марта 2010

Если у вас нет панели инструментов статистики, всегда есть

y=sort(x);
y(floor(length(y)*0.99))

или

y(floor(length(y)*0.01))

в зависимости от того, что вы имели в виду.

...