exponenta event banner

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.

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 находится в масштабе преобразованных значений.

Подробнее

свернуть все

Распространение ядра

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

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

f ^ h (x) =1nh∑i=1nK (x xih),

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

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

F ^ h (x) =∫−∞xf^h (t) dt=1n∑i=1nG (x − xih),

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

Дополнительные сведения см. в разделе Распространение ядра.

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

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

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

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

         f ^ h (x) =1nh∑i=1n[K (x xi h) + K (x xih ) +  K (x − xi + h)] для L ≤ x ≤ U,

    где xi = 2L xi, xi + = 2U xi, а xi -iДанные образца.

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

         F ^ h (x) =1n∑i=1n[G (x xi h) + G (x xih) + G (x xi + h)] −1n∑i=1n[G (L  xi − h ) +  G (L − xih) + G (L − xi + h)] для L ≤ x ≤ U.

  • Получение оценки ядра для обратной 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] Хилл, П. Д. «Оценка ядра функции распределения». Коммуникации в статистике - теория и методы. Том 14, выпуск. 3, 1985, стр. 605-620.

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

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

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

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