Смесь
A смесь двух случайных величин означает с вероятностью p использование Распределения 1, а с вероятностью 1- p использование Распределения 2.
Судя по вашему графику, вы смешиваете распределения, а не добавляете (сворачиваете) их. Точные результаты очень важны для вероятностей смешивания . В качестве примера я выбрал a = 0.25
, b = 0.35
и c = 1-a-b
.
Для смеси аналитически доступна функция плотности вероятности (PDF) :
pdfMix =@(x) a.*pdf(pd1,x) + b.*pdf(pd2,x) + c.*pdf(pd3,x)
.
% MATLAB R2018b
pd1 = makedist('Uniform',2,6);
pd2 = makedist('Uniform',2,4);
pd3 = makedist('Uniform',5,6);
a = 0.25;
b = 0.35;
c = 1 - a - b; % a + b + c = 1
pdfMix =@(x) a.*pdf(pd1,x) + b.*pdf(pd2,x) + c.*pdf(pd3,x);
Xrng = 0:.01:8;
plot(Xrng,pdfMix(Xrng))
xlabel('X')
ylabel('Probability Density Function')
Поскольку смешанные распределения являются однородными, можно также использовать команду stairs
: stairs(Xrng,pdfMix(Xrng))
.
Мы можем убедиться, что это действительный PDF, убедившись, что общая площадь равна 1.
integral(pdfMix,0,9)
и = 1,0000
Свертка: Добавление случайных величин
Добавление случайных величин вместе дает другой результат. Опять же, это можно сделать эмпирически легко. Это возможно аналитически. Например, свертывание двух равномерных (0,1) распределений дает треугольное (0,1,2) распределение. свертка случайных переменных - это просто причудливый способ сказать, что мы складываем их и есть способ получить полученный PDF с использованием интеграции, если вам интересны аналитические результаты.
N = 80000; % Number of samples
X1 = random(pd1,N,1); % Generate samples
X2 = random(pd2,N,1);
X3 = random(pd3,N,1);
X = X1 + X2 + X3; % Convolution
Обратите внимание на изменение масштаба для оси x (Xrng = 0:.01:16;
).
Чтобы получить это, я сгенерировал 80 тыс. Выборок из каждого распределения с random
, а затем сложил их, чтобы получить 80 тыс. Выборок желаемой свертки. Обратите внимание, когда я использовал histogram
, я использовал опцию 'Normalization', 'pdf'
.
Xrng = 0:.01:16;
figure, hold on, box on
p(1) = plot(Xrng,pdf(pd1,Xrng),'DisplayName','X1 \sim U(2,6)')
p(2) = plot(Xrng,pdf(pd2,Xrng),'DisplayName','X2 \sim U(2,4)')
p(3) = plot(Xrng,pdf(pd3,Xrng),'DisplayName','X3 \sim U(5,6)')
h = histogram(X,'Normalization','pdf','DisplayName','X = X1 + X2 + X3')
% Cosmetics
legend('show','Location','northeast')
for k = 1:3
p(k).LineWidth = 2.0;
end
title('X = X1 + X2 + X3 (50k samples)')
xlabel('X')
ylabel('Probability Density Function (PDF)')
Вы можете получить оценку PDF, используя fitdist
и объект распределения ядра , затем вызвав команду pdf
в полученном ядре распределительный объект.
pd_kernel = fitdist(X,'Kernel')
figure, hold on, box on
h = histogram(X,'Normalization','pdf','DisplayName','X = X1 + X2 + X3')
pk = plot(Xrng,pdf(pd_kernel,Xrng),'b-') % Notice use of pdf command
legend('Empirical','Kernel Distribution','Location','northwest')
Если вы сделаете это, вы заметите, что полученное ядро не ограничено, но вы можете исправить это, поскольку вы знаете границы, используя truncate
. Вы также можете использовать функцию ksdensity
, хотя подход к объекту распределения вероятностей, вероятно, более удобен для пользователя благодаря всем функциям , к которым у вас есть прямой доступ. Вы должны знать, что ядро является приближенным (вы можете ясно видеть это на графике ядра). В этом случае интеграция для свертки 3-х равномерных распределений не так уж плоха, поэтому поиск PDF-файла аналитически, вероятно, является предпочтительным выбором, если PDF-файл необходим. В противном случае, эмпирических подходов (особенно для генерации), вероятно, достаточно, хотя это зависит от вашего приложения.
pdt_kernel = truncate(pd_kernel,9,16)
Создание образцов из смесей и извилин - это другая проблема (но решаемая).