2010-03-05 2 views
10

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

ответ

11

Используйте функцию КОЛИЧЕСТВО.

Y = quantile(X,P); 

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

2

Если вы не имеете Statistics Toolbox, всегда

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

или

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

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

+0

К сожалению, это, как правило, не дает те же результаты, что и QUANTILE. – gnovice

+0

@gnovice: о да, QUANTILE интерполирует и, как правило, более точен. Хорошая работа, имитирующая его в вашем ответе :-) – AVB

10

Проще всего использовать функцию QUANTILE как yuk suggested.

Y = quantile(X,0.01); 

Однако, вам потребуется Statistics Toolbox использовать функцию QUANTILE. Решение, не зависящее от панелей инструментов, можно найти, отметив, что QUANTILE вызывает функцию PRCTILE, которая сама вызывает встроенную функцию INTERP1Q для выполнения первичного вычисления. В общем случае матрицы в 2-D, который не содержит 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, без необходимости каких-либо инструментарии ,

Смежные вопросы