ksdensity

Ядро, сглаживающее функциональную оценку для одномерных и двумерных данных

Синтаксис

[f,xi] = ksdensity(x)
[f,xi] = ksdensity(x,pts)
[f,xi] = ksdensity(___,Name,Value)
[f,xi,bw] = ksdensity(___)
ksdensity(___)
ksdensity(ax,___)

Описание

пример

[f,xi] = ksdensity(x) возвращает оценку плотности вероятности, f, для выборочных данных в векторе или матрице 2D столбца 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);

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

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

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)])

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

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

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')

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

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

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

load hospital

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

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

Сгенерируйте выборочные данные от экспоненциального распределения со средним значением 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
ksdensity(x,'Support','positive','Censoring',cens,...
'Function','survivor');

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

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

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

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

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

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

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

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

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

Теперь, постройте плотность с помощью уменьшенного значения пропускной способности.

[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

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

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

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);

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

свернуть все

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

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

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

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

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

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

Оси обрабатывают для фигуры графики ksdensity к, заданный как указатель.

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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

Типы данных: логический

Функция, чтобы оценить, заданный как пара, разделенная запятой, состоящая из '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]Дайте конечные нижние и верхние границы для поддержки плотности. Эта опция только допустима для одномерных выборочных данных.
Матрица Two-two, [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, возвращенный как вектор или матрица 2D столбца. Для одномерных данных значением по умолчанию являются 100 равномерно распределенных точек, которые покрывают область значений данных в x. Для двумерных данных значением по умолчанию являются 900 равномерно распределенных точек, созданных с помощью meshgrid от 30 равномерно распределенных точек в каждой размерности.

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

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

Больше о

свернуть все

Распределение ядра

Распределение ядра является непараметрическим представлением функции плотности вероятности (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)] для L ≤ x ≤ U,

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

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

         F^h(x)=1ni=1n[G(xxih)+G(xxih)+G(xxi+h)]1ni=1n[G(Lxih)+G(Lxih)+G(Lxi+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] Лучник, A. W. и А. Аццалини. Прикладные методы сглаживания для анализа данных. Нью-Йорк: Oxford University Press Inc., 1997.

[2] Выступ, P. D. “Оценка ядра функции распределения”. Коммуникации в Статистике - Теория и Методы. Vol 14, Проблема. 3, 1985, стр 605-620.

[3] Джонс, Член конгресса “Простое граничное исправление для оценки плотности ядра”. Статистика и Вычисление. Издание 3, Выпуск 3, 1993, стр 135-146.

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

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

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