Как да изчисля 99% покритие в MATLAB?

Имам матрица в MATLAB и трябва да намеря 99% стойност за всяка колона. С други думи, такава стойност, че 99% от населението има по-голяма стойност от нея. Има ли функция в MATLAB за това?


person sfactor    schedule 05.03.2010    source източник


Отговори (3)


Използвайте функцията QUANTILE.

Y = quantile(X,P);

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

person yuk    schedule 05.03.2010

Най-простото решение е да използвате функцията QUANTILE като yuk предложи.

Y = quantile(X,0.01);

Ще ви е необходима обаче кутия с инструменти за статистика, за да използвате функцията КВАНТИЛ. Решение, което не зависи от кутиите с инструменти, може да се намери, като се отбележи, че 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, без да се нуждаете от кутии с инструменти.

person gnovice    schedule 05.03.2010
comment
Бихте ли обяснили значението на 1% вероятност тук? Опитвам се да внедря вашия скрипт, за да намеря интерквантилния диапазон за вектор, но все още не съм успял след часове. Благодаря ти много - person chappi; 23.12.2019

Ако нямате кутията със статистически инструменти, винаги има

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

or

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

зависи какво имаш предвид.

person AVB    schedule 05.03.2010
comment
За съжаление, това обикновено няма да даде същите резултати като QUANTILE. - person gnovice; 05.03.2010
comment
@gnovice: о, да, QUANTILE интерполира и като цяло е по-прецизен. Добра работа, като го имитирате в отговора си :-) - person AVB; 05.03.2010