ksdensity

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

Описание

пример

[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 имя аргумента и 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