Как нарисовать функцию плотности вероятности в MatLab? - PullRequest
6 голосов
/ 22 апреля 2011
x = [1 2 3 3 4]
cdfplot(x)

После поиска в Google, я обнаружил, что приведенный выше код нарисует для меня функцию накопительного распределения в Matlab.
Есть ли простой способ нарисовать функцию плотности вероятности?

Чтобы уточнить. Мне нужен график, который имеет равномерно распределенную ось X. И я бы предпочел, чтобы это не выглядело как гистограмма. (У меня были бы миллионы целых чисел)
Извините, обновите снова. Мои данные являются целыми числами, но на самом деле они представляют время (я ожидаю несколько довольно высоких пиков при одном и том же значении, в то время как другое значение должно выглядеть так, как будто они не являются дискретными). Я на самом деле начинаю задумываться, не является ли это на самом деле дискретными целыми числами по своей сути. CDF определенно будет работать, но когда дело доходит до PDF, кажется, что это сложнее, чем я ожидал.

Ответы [ 4 ]

7 голосов
/ 19 октября 2013

Если вам нужна функция непрерывного распределения, попробуйте это.

x = [1 2 3 3 4]
subplot(2,1,1)
ksdensity(x)
axis([-4 8 0 0.4])

subplot(2,1,2)
cdfplot(x)
grid off
axis([-4 8 0 1])
title('')

Что выводит это. enter image description here

Функция накопительного распределения находится внизу, оценка плотности ядра - вверху.

7 голосов
/ 22 апреля 2011

Вы можете сгенерировать дискретное распределение вероятностей для ваших целых чисел, используя функцию hist:

data = [1 2 3 3 4];           %# Sample data
xRange = 0:10;                %# Range of integers to compute a probability for
N = hist(data,xRange);        %# Bin the data
plot(xRange,N./numel(data));  %# Plot the probabilities for each integer
xlabel('Integer value');
ylabel('Probability');

И вот результирующий сюжет:

enter image description here


UPDATE:

В более новых версиях MATLAB функция hist больше не рекомендуется. Вместо этого вы можете использовать функцию histcounts, чтобы получить ту же цифру, что и выше:

data = [1 2 3 3 4];
N = histcounts(data, 'BinLimits', [0 10], 'BinMethod', 'integers', 'Normalization', 'pdf');
plot(N);
xlabel('Integer value');
ylabel('Probability');
2 голосов
/ 18 мая 2013

введите "ksdensity" в справке по Matlab, и вы найдете функцию, которая даст вам непрерывную форму PDF. Я думаю, это именно то, что вы ищете.

0 голосов
/ 08 февраля 2017

В дополнение к гладкому PDF, полученному ksdensity(x), вы также можете построить гладкий CDF-график, используя ksdensity(x,'function','cdf').

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...