Matlab: 2D данных - PullRequest
       41

Matlab: 2D данных

1 голос
/ 22 декабря 2011

Мне нужна помощь в расчете совокупного распределения.

Допустим, у меня есть такие данные:

data = abs(randn(1000,1));

Я должен рассчитать кумулятивное распределение вероятности и собрать его, чтобы уменьшить количество точек. Я делаю это так (давайте возьмем бин = 50):

[n, x] = hist(data, 50);
y = cumsum(n);
y = y./max(y);

Проблема в том, что теперь у меня много точек, близких к y = 1, но только несколько точек, близких к нулю. Я хотел бы иметь вид равномерного распределения точек (дополнительный биннинг на оси у?). Я надеюсь, вы понимаете, что я имею в виду :) Как я могу это сделать? Спасибо!

1 Ответ

2 голосов
/ 22 декабря 2011

Таким образом, это на самом деле означает, что в вашем векторе data многие точки близки к 0. Обычная процедура - преобразование данных с использованием log: log2 или log10, в зависимости от характера данных.

Попробуйте

[n, x] = hist(log10(data), 50);
y = cumsum(n);
y = y./max(y);

Вы также можете попробовать sqrt вместо log или других функций.

ОБНОВЛЕНИЕ

Просмотр вопроса послеВаш комментарий Я думаю, что вы хотите использовать что-то вроде этого:

bin = 10.^(linspace(log10(min(data)),log10(max(data)),50));
[n, x] = hist(data, bin);
y = cumsum(n);
y = y./max(y);
plot(bin,y,'.')
...