Как нарисовать функцию плотности вероятности в MatLab?

x = [1 2 3 3 4]
cdfplot(x)

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

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

4 ответов


вы можете сгенерировать дискретное распределение вероятностей для целых чисел с помощью функции 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


обновление:

в более новых версиях 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');

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

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

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


введите "ksdensity" в справке matlab, и вы узнаете функцию, которая даст вам непрерывную форму PDF. Думаю, это именно то, что ты ищешь.


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

enter image description here