ksdensity

Оценка функции сглаживания ядра для одномерных и двухмерных данных

Описание

пример

[f,xi] = ksdensity(x) возвращает оценку плотности вероятностей, f, для выборочных данных в векторе или двухколоночной матрице x. Оценка основана на нормальной функции ядра и оценивается в одинаковых точках, xi, которые охватывают область значений данных в x. ksdensity оценивает плотность в 100 точках для одномерных данных или в 900 точках для двухмерных данных.

ksdensity работает лучше всего с постоянно распределёнными выборками.

пример

[f,xi] = ksdensity(x,pts) задает точки (pts) для оценки f. Здесь, xi и pts содержат одинаковые значения.

пример

[f,xi] = ksdensity(___,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение" в дополнение к любому из входных параметров в предыдущих синтаксисах. Для примера можно задать тип функции ksdensity оценивает, такие как плотность вероятностей, совокупная вероятность, функция выжившего и так далее. Также можно задать пропускную способность окна сглаживания.

пример

[f,xi,bw] = ksdensity(___) также возвращает полосу пропускания окна сглаживания ядра, bw. Шумовая полоса по умолчанию является оптимальной для нормальных плотностей.

пример

ksdensity(___) строит график оценки функции сглаживания ядра.

ksdensity(ax,___) строит графики результатов с помощью осей с помощью указателя, ax, вместо текущих систем координат, возвращаемых gca.

Примеры

свернуть все

Сгенерируйте набор выборочных данных из смеси двух нормальных распределений.

rng('default')  % For reproducibility
x = [randn(30,1); 5+randn(30,1)];

Постройте график расчетной плотности.

[f,xi] = ksdensity(x); 
figure
plot(xi,f);

Figure contains an axes. The axes contains an object of type line.

Оценка плотности показывает бимодальность выборки.

Сгенерируйте неотрицательные выборочные данные из наполовину нормального распределения.

rng('default') % For reproducibility
pd = makedist('HalfNormal','mu',0,'sigma',1);
x = random(pd,100,1);

Оцените PDFS с двумя различными методами коррекции границ, преобразованием и отражением журнала, используя 'BoundaryCorrection' аргумент пары "имя-значение".

pts = linspace(0,5,1000); % points to evaluate the estimator
[f1,xi1] = ksdensity(x,pts,'Support','positive');
[f2,xi2] = ksdensity(x,pts,'Support','positive','BoundaryCorrection','reflection');

Постройте график двух предполагаемых PDFS.

plot(xi1,f1,xi2,f2)
lgd = legend('log','reflection');
title(lgd, 'Boundary Correction Method')
xl = xlim;
xlim([xl(1)-0.25 xl(2)])

Figure contains an axes. The axes contains 2 objects of type line. These objects represent log, reflection.

ksdensity использует метод коррекции границ, когда задается положительная или ограниченная поддержка. Метод контура по умолчанию является преобразованием журнала. Когда ksdensity преобразует поддержку назад, представляет 1/x термин в оценке плотности ядра. Поэтому оценка имеет пик вблизи   x = 0. С другой стороны, метод отражения не вызывает нежелательных достигать максимума вблизи контура.

Загрузите выборочные данные.

load hospital

Вычислите и постройте график оцененного cdf с заданным множеством значений.

pts = (min(hospital.Weight):2:max(hospital.Weight));
figure()
ecdf(hospital.Weight)
hold on
[f,xi,bw] = ksdensity(hospital.Weight,pts,'Support','positive',...
	'Function','cdf');
plot(xi,f,'-g','LineWidth',2)
legend('empirical cdf','kernel-bw:default','Location','northwest')
xlabel('Patient weights')
ylabel('Estimated cdf')

Figure contains an axes. The axes contains 2 objects of type stair, line. These objects represent empirical cdf, kernel-bw:default.

ksdensity кажется, сглаживает слишком большую оценку совокупной функции распределения. Оценка с меньшей шириной полосы может привести к более близкой оценке эмпирической совокупной функции распределения.

Возвращает пропускную способность окна сглаживания.

bw
bw = 0.1070

Постройте график оценки кумулятивной функции распределения с помощью меньшей полосы пропускания.

[f,xi] = ksdensity(hospital.Weight,pts,'Support','positive',...
	'Function','cdf','Bandwidth',0.05); 
plot(xi,f,'--r','LineWidth',2)
legend('empirical cdf','kernel-bw:default','kernel-bw:0.05',...
	'Location','northwest')
hold off

Figure contains an axes. The axes contains 3 objects of type stair, line. These objects represent empirical cdf, kernel-bw:default, kernel-bw:0.05.

The ksdensity оценка с меньшей пропускной способностью лучше соответствует эмпирической совокупной функции распределения.

Загрузите выборочные данные.

load hospital

Постройте график оценки cdf в 50 точках с равными интервалами.

figure()
ksdensity(hospital.Weight,'Support','positive','Function','cdf',...
'NumPoints',50)
xlabel('Patient weights')
ylabel('Estimated cdf')

Figure contains an axes. The axes contains an object of type line.

Сгенерируйте выборочные данные из экспоненциального распределения со средним значением 3.

rng('default')  % For reproducibility
x = random('exp',3,100,1);

Создайте логический вектор, который указывает на цензуру. Здесь цензуре подвергаются наблюдения со временем жизни более 10.

T = 10;
cens = (x>T);

Вычислите и постройте график предполагаемой функции плотности.

figure
ksdensity(x,'Support','positive','Censoring',cens);

Figure contains an axes. The axes contains an object of type line.

Вычислите и постройте график функции выживания.

figure
ksdensity(x,'Support','positive','Censoring',cens,...
'Function','survivor');

Figure contains an axes. The axes contains an object of type line.

Вычислите и постройте график совокупной функции опасности.

figure
ksdensity(x,'Support','positive','Censoring',cens,...
'Function','cumhazard');

Figure contains an axes. The axes contains an object of type line.

Сгенерируйте смесь двух нормальных распределений и постройте график предполагаемой функции обратного совокупного распределения при заданном наборе значений вероятностей.

rng('default')  % For reproducibility
x = [randn(30,1); 5+randn(30,1)];
pi = linspace(.01,.99,99);
figure
ksdensity(x,pi,'Function','icdf');

Figure contains an axes. The axes contains an object of type line.

Сгенерируйте смесь двух нормальных распределений.

rng('default')  % For reproducibility
x = [randn(30,1); 5+randn(30,1)];

Верните полосу пропускания окна сглаживания для оценки плотности вероятностей.

[f,xi,bw] = ksdensity(x); 
bw
bw = 1.5141

Шумовая полоса по умолчанию оптимальна для нормальных плотностей.

Постройте график расчетной плотности.

figure
plot(xi,f);
xlabel('xi')
ylabel('f')
hold on

Figure contains an axes. The axes contains an object of type line.

Постройте график плотности с использованием увеличенного значения полосы пропускания.

[f,xi] = ksdensity(x,'Bandwidth',1.8);
plot(xi,f,'--r','LineWidth',1.5)

Figure contains an axes. The axes contains 2 objects of type line.

Более высокая полоса пропускания дополнительно сглаживает оценку плотности, которая может замаскировать некоторые характеристики распределения.

Теперь постройте график плотности с использованием уменьшенного значения полосы пропускания.

[f,xi] = ksdensity(x,'Bandwidth',0.8);
plot(xi,f,'-.k','LineWidth',1.5)
legend('bw = default','bw = 1.8','bw = 0.8')
hold off

Figure contains an axes. The axes contains 3 objects of type line. These objects represent bw = default, bw = 1.8, bw = 0.8.

Меньшая полоса пропускания сглаживает оценку плотности меньше, что преувеличивает некоторые характеристики выборки.

Создайте двухколоночный вектор точек, в которых можно вычислить плотность.

gridx1 = -0.25:.05:1.25;
gridx2 = 0:.1:15;
[x1,x2] = meshgrid(gridx1, gridx2);
x1 = x1(:);
x2 = x2(:);
xi = [x1 x2];

Сгенерируйте матрицу 30 на 2, содержащую случайные числа из смеси двухмерных нормальных распределений.

rng('default')  % For reproducibility
x = [0+.5*rand(20,1) 5+2.5*rand(20,1);
            .75+.25*rand(10,1) 8.75+1.25*rand(10,1)];

Постройте график расчетной плотности выборочных данных.

figure
ksdensity(x,xi);

Figure contains an axes. The axes contains an object of type surface.

Входные параметры

свернуть все

Выборочные данные, для которого ksdensity возвращает f значения, заданные как вектор-столбец или двухколоночная матрица. Используйте вектор-столбец для одномерных данных и двухколоночную матрицу для двухфазных данных.

Пример: [f,xi] = ksdensity(x)

Типы данных: single | double

Точки, в которых можно оценить f, заданный как вектор или двухколоночная матрица. Для одномерных данных, pts может быть строкой или вектором-столбцом. Длина возвращенного выхода f равно числу точек в pts.

Пример: pts = (0:1:25); ksdensity(x,pts);

Типы данных: single | double

Указатель на ось для рисунка ksdensity графики, заданные как указатель.

Для примера, если h является указателем для рисунка, тогда ksdensity можно построить график для этого рисунка следующим образом.

Пример: ksdensity(h,x)

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Censoring',cens,'Kernel','triangle','NumPoints',20,'Function','cdf' задает, что ksdensity оценивает cdf путем оценки на 20 одинаково разнесенных точках, которые охватывают область значений данных, с помощью функции сглаживания ядра треугольника и с учетом цензурированной информации данных в векторе cens.

Шумовая полоса окна сглаживания ядра, которое является функцией числа точек в x, заданная как разделенная разделенными запятой парами, состоящая из 'Bandwidth' и скалярное значение. Если выборочные данные являются двухмерными, Bandwidth может также быть двухэлементным вектором. Значение по умолчанию оптимально для оценки нормальных плотностей [1], но можно хотеть выбрать большее или меньшее значение, чтобы сглаживать больше или меньше.

Если вы задаете 'BoundaryCorrection' как 'log'(по умолчанию) и 'Support' либо как 'positive' или вектор [L U], ksdensity преобразует ограниченные данные в неограниченные с помощью преобразования журнала. Значение 'Bandwidth' находится в шкале преобразованных значений.

Пример: 'Bandwidth',0.8

Типы данных: single | double

Метод коррекции границ, заданный как разделенная разделенными запятой парами, состоящая из 'BoundaryCorrection' и 'log' или 'reflection'.

ЗначениеОписание
'log'

ksdensity преобразует ограниченные данные x быть неограниченным одним из следующих преобразований. Затем он преобразуется назад к исходной ограниченной шкале после оценки плотности.

  • Для одномерных данных, если вы задаете 'Support','positive', затем ksdensity применяется log(x).

  • Для одномерных данных, если вы задаете 'Support',[L U], где L и U являются числовыми скалярами и L < U, затем ksdensity применяется log((x-L)/(U–x)).

  • Для двухмерных данных, ksdensity преобразует каждый столбец x точно так же с одномерными данными.

Значение 'Bandwidth' и bw выходы указаны в масштабе преобразованных значений.

'reflection'

ksdensity увеличивает ограниченные данные путем добавления отраженных данных вблизи контуров, затем возвращает оценки, соответствующие исходной поддержке. Для получения дополнительной информации смотрите Метод отражения.

ksdensity применяет коррекцию границ только при задании 'Support' как значение, отличное от 'unbounded'.

Пример: 'BoundaryCorrection','reflection'

Логический вектор, указывающий, какие записи подвергаются цензуре, задается как разделенная разделенными запятой парами, состоящая из 'Censoring' и вектор двоичных значений. Значение 0 указывает на отсутствие цензуры, 1 указывает, что наблюдение подвергается цензуре. По умолчанию цензура отсутствует. Эта пара "имя-значение" действительна только для одномерных данных.

Пример: 'Censoring',censdata

Типы данных: logical

Функция для оценки, заданная как разделенная разделенными запятой парами, состоящая из 'Function' и одно из следующих.

ЗначениеОписание
'pdf'Функция плотности вероятностей.
'cdf'Кумулятивная функция распределения.
'icdf'

Обратная кумулятивная функция распределения. ksdensity вычисляет предполагаемый обратный cdf значений в x, и оценивает его по значениям вероятностей, указанным в pi.

Это значение действительно только для одномерных данных.

'survivor'Функция выжившего.
'cumhazard'

Кумулятивная функция опасности.

Это значение действительно только для одномерных данных.

Пример: 'Function', 'icdf'

Тип гладкого ядра, заданный как разделенная разделенными запятой парами, состоящая из 'Kernel' и одно из следующих.

  • 'normal' (по умолчанию)

  • 'box'

  • 'triangle'

  • 'epanechnikov'

  • Функция ядра, которая является пользовательской или встроенной функцией. Задайте функцию как указатель на функцию (для примера, @myfunction или @normpdf) или как вектор символов или строковый скаляр (для примера, 'myfunction' или 'normpdf'). Программа вызывает указанную функцию с одним аргументом, который является массивом расстояний между значениями данных и местоположениями, где оценивается плотность. Функция должна вернуть массив того же размера, содержащий соответствующие значения функции ядра.

    Когда 'Function' является 'pdf', функция ядра возвращает значения плотности. В противном случае возвращаются совокупные значения вероятности.

    Указание пользовательского ядра при 'Function' является 'icdf' возвращает ошибку.

Для двухмерных данных, ksdensity применяет одно и то же ядро к каждой размерности.

Пример: 'Kernel','box'

Количество одинаково разнесенных точек в xi, заданная как разделенная разделенными запятой парами, состоящая из 'NumPoints' и скалярное значение. Эта пара "имя-значение" действительна только для одномерных данных.

Для примера для гладкой оценки ядра заданной функции с равными интервалами в 80 точках в область значений выборочных данных, вход:

Пример: 'NumPoints',80

Типы данных: single | double

Поддержка плотности, заданная как разделенная разделенными запятой парами, состоящая из 'support' и одно из следующих.

ЗначениеОписание
'unbounded'По умолчанию. Позволять плотности проходить по всей действительной линии.
'positive'Ограничьте плотность положительными значениями.
Двухэлементный вектор, [L U]Задайте конечные нижнюю и верхнюю границы для поддержки плотности. Эта опция действительна только для одномерных выборочных данных.
Матрица два на два, [L1 L2; U1 U2]Задайте конечные нижнюю и верхнюю границы для поддержки плотности. Первая строка содержит нижние пределы, а вторая - верхние пределы. Эта опция действительна только для двухмерных выборочных данных.

Для двухмерных данных, 'Support' может быть комбинацией положительных, неограниченных или ограниченных переменных, заданных как [0 -Inf; Inf Inf] или [0 L; Inf U].

Пример: 'Support','positive'

Пример: 'Support',[0 10]

Типы данных: single | double | char | string

Функция, используемая для создания графика плотности ядра, задается как разделенная разделенными запятой парами, состоящая из 'PlotFcn' и одно из следующих.

ЗначениеОписание
'surf'3-D заштрихованная объемная поверхностная диаграмма, созданный с помощью surf
'contour'Контурный график, созданный с помощью contour
'plot3'3-D линейные графики, созданный с помощью plot3
'surfc'Контурный график под 3-D затенённой объемной поверхностной диаграммой, созданный с помощью surfc

Эта пара "имя-значение" действительна только для двухмерных выборочных данных.

Пример: 'PlotFcn','contour'

Веса для выборочных данных, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и вектор длины size(x,1), где x является выборочными данными.

Пример: 'Weights',xw

Типы данных: single | double

Выходные аргументы

свернуть все

Предполагаемые значения функции, возвращенные как вектор, длина которого равна числу точек в xi или pts.

Точки оценки, в которых ksdensity вычисляет f, возвращенный как вектор или двухколоночная матрица. Для одномерных данных по умолчанию является 100 одинаково разнесенных точек, которые покрывают область значений данных в x. Для двухмерных данных по умолчанию является 900 точек с равными интервалами, созданных с помощью meshgrid от 30 точек с равными интервалами в каждой размерности.

Шумовая полоса окна сглаживания, возвращенная как скалярное значение.

Если вы задаете 'BoundaryCorrection' как 'log'(по умолчанию) и 'Support' либо как 'positive' или вектор [L U], ksdensity преобразует ограниченные данные в неограниченные с помощью преобразования журнала. Значение bw находится в шкале преобразованных значений.

Подробнее о

свернуть все

Ядерное распределение

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

Оценка плотности ядра является оценочным PDF случайной переменной. Для любых реальных значений x формула оценки плотности ядра задается как

f^h(x)=1nhi=1nK(xxih),

где x1, x2,..., xn являются случайными выборками из неизвестного распределения, n является размером выборки ,K(·) - функция сглаживания ядра, и h - полоса пропускания.

Оценка ядра для кумулятивной функции распределения (cdf), для любых вещественных значений x, задается как

F^h(x)=xf^h(t)dt=1ni=1nG(xxih),

где G(x)=xK(t)dt.

Для получения дополнительной информации см. Раздел «Ядерное распределение».

Метод отражения

Метод отражения является краевым методом коррекции, который точно находит оценки плотности ядра, когда случайная переменная имеет ограниченную поддержку. Если вы задаете 'BoundaryCorrection','reflection', ksdensity использует метод отражения. Этот метод увеличивает ограниченные данные путем добавления отраженных данных вблизи контуров и оценивает pdf. Затем, ksdensity возвращает предполагаемый PDF, соответствующий исходной поддержке, с правильной нормализацией, так что предполагаемый интеграл PDF по исходной поддержке равен единице.

Если вы дополнительно задаете 'Support',[L U], затем ksdensity находит оценщик ядра следующим образом.

  • Если 'Function' является 'pdf', тогда оценка плотности ядра

         f^h(x)=1nhi=1n[K(xxih)+K(xxih)+K(xxi+h)] для <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>    ,

    где xi=2Lxi, xi+=2Uxi, и xi является ith выборочные данные.

  • Если 'Function' является 'cdf', тогда оценка ядра для cdf является

         F^h(x)=1ni=1n[G(xxih)+G(xxih)+G(xxi+h)]1ni=1n[G(Lxih)+G(Lxih)+G(Lxi+h)] для <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>    .

  • Чтобы получить оценку ядра для обратной cdf, функции выжившего или совокупной функции опасности (когда 'Function' является 'icdf', 'survivor', или 'cumhazrd'), ksdensity использует оба f^h(x) и F^h(x).

Если вы дополнительно задаете 'Support' как 'positive' или [0 inf], затем ksdensity находит оценщик ядра путем замены [L U] с [0 inf] в вышеприведенных уравнениях.

Ссылки

[1] Боуман, А. У. и А. Аззалини. Примененные методы сглаживания для анализа данных. Нью-Йорк: Oxford University Press Inc., 1997.

[2] Hill, P.D. «Kernel estimation of a distribution function». Коммуникации в статистике - теория и методы. Том 14, Выпуск. 3, 1985, стр. 605-620.

[3] Jones, M. C. «Простая краевая коррекция для оценки плотности ядра». Статистика и вычисления. Том 3, Выпуск 3, 1993, стр. 135-146.

[4] Сильверман, B. W. Оценка плотности для статистики и анализа данных. Chapman & Hall/CRC, 1986.

Расширенные возможности

.
Представлено до R2006a