Генерация семплов:
Вы можете генерировать семплы из дистрибутива множеством способов. Если вы уже знаете, что собираетесь использовать указанный c дистрибутив, такой как Вейбулл , то есть два простых варианта:
- Использовать
makedist()
и random()
, [1] или - Использование
wblrnd()
.
Оба требуют использования панели инструментов Статистика. Подходы без инструментов также возможны. Рекомендуем избегать именования переменной var
, поскольку она маскирует функцию var()
.
% MATLAB R2019a
a = [209.2863 0.5054]; % a = mle(var, 'distribution', 'wbl'); % from OP code
NumSamples = 500;
pd = makedist('Weibull',a(1),a(2))
% Method 1
X = random(pd,NumSamples,1);
% Method 2
X2 = wblrnd(a(1),a(2),NumSamples,1);
Построение исходных данных:
Если данные предполагаются из непрерывного распределения, такого как распределение Вейбулла, то следует использовать функцию плотности вероятности (PDF) для визуального отображения относительного шанса, а не дискретной функции вероятности (PMF) . PMF применяются только к дискретным переменным. Обратите внимание, что совокупные функции распределения (CDF) применяются как для непрерывных, так и для дискретных случайных величин.
Это можно сделать с помощью пары имя-значение 'Normalization','pdf'
в свойствах histogram()
. Для достижения лучших результатов часто рекомендуется корректировать количество бинов гистограммы (в свойствах), но только с 13 точками данных это ограниченное значение.
h = histogram(var,'Normalization','pdf')
h.NumBins = 13;
Вы также можете наложить подобранное распределение на эмпирические данные.
figure, hold on
h = histogram(var,'Normalization','pdf','DisplayName','Data');
xLimits = xlim;
Xrng = 0:.01:xLimits(2);
plot(Xrng,pdf(pd,Xrng),'r--','DisplayName','Fit')
xlabel('Var')
ylabel('Probability Density Function (PDF)')
legend('show')
% Adjust these manually
ylim([0 0.02])
h.NumBins = 13;
Альтернативы: [2]
Вы можете использовать fitdist()
, который может соответствовать плотность ядра и все еще разрешает использовать все функции для объектов распределения вероятностей , включая random()
и pdf()
.
Обратите внимание, что я усек дистрибутив, поскольку Weibull имеет поддержку [0, inf]
.
pd2 = fitdist(X,'Kernel')
pd2t = truncate(pd2,0,inf)
Тогда построение графиков все еще относительно просто и похоже на предыдущий пример.
figure, hold on
h = histogram(var,'Normalization','pdf','DisplayName','Data');
xLimits = xlim;
Xrng = 0:.01:xLimits(2);
plot(Xrng,pdf(pd2t,Xrng),'r--','DisplayName','Fit')
xlabel('Var')
ylabel('Probability Density Function (PDF)')
legend('show')
h.NumBins = 13;
Остальной альтернативой является использование ksdensity()
для получения графика.
[1] Генерация выборок из распределения Вейбулла в MATLAB
[2] Похожие: { ссылка }