Оценка функции сглаживания ядра для одномерных и двухмерных данных
[ возвращает оценку плотности вероятностей, f,xi]
= ksdensity(x)f, для выборочных данных в векторе или двухколоночной матрице x. Оценка основана на нормальной функции ядра и оценивается в одинаковых точках, xi, которые охватывают область значений данных в x. ksdensity оценивает плотность в 100 точках для одномерных данных или в 900 точках для двухмерных данных.
ksdensity работает лучше всего с постоянно распределёнными выборками.
[ использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение" в дополнение к любому из входных параметров в предыдущих синтаксисах. Для примера можно задать тип функции f,xi]
= ksdensity(___,Name,Value)ksdensity оценивает, такие как плотность вероятностей, совокупная вероятность, функция выжившего и так далее. Также можно задать пропускную способность окна сглаживания.
Сгенерируйте набор выборочных данных из смеси двух нормальных распределений.
rng('default') % For reproducibility x = [randn(30,1); 5+randn(30,1)];
Постройте график расчетной плотности.
[f,xi] = ksdensity(x); figure plot(xi,f);

Оценка плотности показывает бимодальность выборки.
Сгенерируйте неотрицательные выборочные данные из наполовину нормального распределения.
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. С другой стороны, метод отражения не вызывает нежелательных достигать максимума вблизи контура.
Загрузите выборочные данные.
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

The 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

Меньшая полоса пропускания сглаживает оценку плотности меньше, что преувеличивает некоторые характеристики выборки.
Создайте двухколоночный вектор точек, в которых можно вычислить плотность.
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);

x - Выборочные данныеВыборочные данные, для которого ksdensity возвращает f значения, заданные как вектор-столбец или двухколоночная матрица. Используйте вектор-столбец для одномерных данных и двухколоночную матрицу для двухфазных данных.
Пример: [f,xi] = ksdensity(x)
Типы данных: single | double
pts - Точки, в которых можно оценить fТочки, в которых можно оценить f, заданный как вектор или двухколоночная матрица. Для одномерных данных, pts может быть строкой или вектором-столбцом. Длина возвращенного выхода f равно числу точек в pts.
Пример: pts = (0:1:25); ksdensity(x,pts);
Типы данных: single | double
ax - указатель осейУказатель на ось для рисунка 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.'Bandwidth' - Полоса пропускания окна сглаживания ядраШумовая полоса окна сглаживания ядра, которое является функцией числа точек в x, заданная как разделенная разделенными запятой парами, состоящая из 'Bandwidth' и скалярное значение. Если выборочные данные являются двухмерными, Bandwidth может также быть двухэлементным вектором. Значение по умолчанию оптимально для оценки нормальных плотностей [1], но можно хотеть выбрать большее или меньшее значение, чтобы сглаживать больше или меньше.
Если вы задаете 'BoundaryCorrection' как 'log'(по умолчанию) и 'Support' либо как 'positive' или вектор [L U], ksdensity преобразует ограниченные данные в неограниченные с помощью преобразования журнала. Значение 'Bandwidth' находится в шкале преобразованных значений.
Пример: 'Bandwidth',0.8
Типы данных: single | double
'BoundaryCorrection' - Метод коррекции границМетод коррекции границ, заданный как разделенная разделенными запятой парами, состоящая из 'BoundaryCorrection' и 'log' или 'reflection'.
| Значение | Описание |
|---|---|
'log' |
Значение |
'reflection' |
|
ksdensity применяет коррекцию границ только при задании 'Support' как значение, отличное от 'unbounded'.
Пример: 'BoundaryCorrection','reflection'
'Censoring' - Логический векторЛогический вектор, указывающий, какие записи подвергаются цензуре, задается как разделенная разделенными запятой парами, состоящая из 'Censoring' и вектор двоичных значений. Значение 0 указывает на отсутствие цензуры, 1 указывает, что наблюдение подвергается цензуре. По умолчанию цензура отсутствует. Эта пара "имя-значение" действительна только для одномерных данных.
Пример: 'Censoring',censdata
Типы данных: logical
'Function' - Функция для оценки'pdf' (по умолчанию) | 'cdf' | 'icdf' | 'survivor' | 'cumhazard'Функция для оценки, заданная как разделенная разделенными запятой парами, состоящая из 'Function' и одно из следующих.
| Значение | Описание |
|---|---|
'pdf' | Функция плотности вероятностей. |
'cdf' | Кумулятивная функция распределения. |
'icdf' |
Обратная кумулятивная функция распределения. Это значение действительно только для одномерных данных. |
'survivor' | Функция выжившего. |
'cumhazard' |
Кумулятивная функция опасности. Это значение действительно только для одномерных данных. |
Пример: 'Function', 'icdf'
'Kernel' - Тип более плавного ядра'normal' (по умолчанию) | 'box' | 'triangle' | 'epanechnikov' | указатель на функцию | вектор символов | строковый скалярТип гладкого ядра, заданный как разделенная разделенными запятой парами, состоящая из 'Kernel' и одно из следующих.
'normal' (по умолчанию)
'box'
'triangle'
'epanechnikov'
Функция ядра, которая является пользовательской или встроенной функцией. Задайте функцию как указатель на функцию (для примера, @myfunction или @normpdf) или как вектор символов или строковый скаляр (для примера, 'myfunction' или 'normpdf'). Программа вызывает указанную функцию с одним аргументом, который является массивом расстояний между значениями данных и местоположениями, где оценивается плотность. Функция должна вернуть массив того же размера, содержащий соответствующие значения функции ядра.
Когда 'Function' является 'pdf', функция ядра возвращает значения плотности. В противном случае возвращаются совокупные значения вероятности.
Указание пользовательского ядра при 'Function' является 'icdf' возвращает ошибку.
Для двухмерных данных, ksdensity применяет одно и то же ядро к каждой размерности.
Пример: 'Kernel','box'
'NumPoints' - Количество одинаково разнесенных точекКоличество одинаково разнесенных точек в xi, заданная как разделенная разделенными запятой парами, состоящая из 'NumPoints' и скалярное значение. Эта пара "имя-значение" действительна только для одномерных данных.
Для примера для гладкой оценки ядра заданной функции с равными интервалами в 80 точках в область значений выборочных данных, вход:
Пример: 'NumPoints',80
Типы данных: single | double
'Support' - Поддержка плотности'unbounded' (по умолчанию) | 'positive' | двухэлементный вектор, [L U] | матрицу два на два, [L1 L2; U1 U2]Поддержка плотности, заданная как разделенная разделенными запятой парами, состоящая из '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' (по умолчанию) | 'contour' | 'plot3' | 'surfc'Функция, используемая для создания графика плотности ядра, задается как разделенная разделенными запятой парами, состоящая из 'PlotFcn' и одно из следующих.
| Значение | Описание |
|---|---|
'surf' | 3-D заштрихованная объемная поверхностная диаграмма, созданный с помощью surf |
'contour' | Контурный график, созданный с помощью contour |
'plot3' | 3-D линейные графики, созданный с помощью plot3 |
'surfc' | Контурный график под 3-D затенённой объемной поверхностной диаграммой, созданный с помощью surfc |
Эта пара "имя-значение" действительна только для двухмерных выборочных данных.
Пример: 'PlotFcn','contour'
'Weights' - Веса для выборочных данныхВеса для выборочных данных, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и вектор длины size(x,1), где x является выборочными данными.
Пример: 'Weights',xw
Типы данных: single | double
xi - Точки оценкиТочки оценки, в которых ksdensity вычисляет f, возвращенный как вектор или двухколоночная матрица. Для одномерных данных по умолчанию является 100 одинаково разнесенных точек, которые покрывают область значений данных в x. Для двухмерных данных по умолчанию является 900 точек с равными интервалами, созданных с помощью meshgrid от 30 точек с равными интервалами в каждой размерности.
bw - Полоса пропускания окна сглаживанияШумовая полоса окна сглаживания, возвращенная как скалярное значение.
Если вы задаете 'BoundaryCorrection' как 'log'(по умолчанию) и 'Support' либо как 'positive' или вектор [L U], ksdensity преобразует ограниченные данные в неограниченные с помощью преобразования журнала. Значение bw находится в шкале преобразованных значений.
A ядерного распределения является непараметрическим представлением функции плотности вероятностей (pdf) случайной переменной. Можно использовать ядерное распределение, когда параметрическое распределение не может правильно описать данные, или когда вы хотите избежать допущений о распределении данных. Ядерное распределение определяется функцией сглаживания и значением полосы пропускания, которые управляют плавностью полученной кривой плотности.
Оценка плотности ядра является оценочным PDF случайной переменной. Для любых реальных значений x формула оценки плотности ядра задается как
где x1, x2,..., xn являются случайными выборками из неизвестного распределения, n является размером выборки , - функция сглаживания ядра, и h - полоса пропускания.
Оценка ядра для кумулятивной функции распределения (cdf), для любых вещественных значений x, задается как
где .
Для получения дополнительной информации см. Раздел «Ядерное распределение».
Метод отражения является краевым методом коррекции, который точно находит оценки плотности ядра, когда случайная переменная имеет ограниченную поддержку. Если вы задаете 'BoundaryCorrection','reflection', ksdensity использует метод отражения. Этот метод увеличивает ограниченные данные путем добавления отраженных данных вблизи контуров и оценивает pdf. Затем, ksdensity возвращает предполагаемый PDF, соответствующий исходной поддержке, с правильной нормализацией, так что предполагаемый интеграл PDF по исходной поддержке равен единице.
Если вы дополнительно задаете 'Support',[L U], затем ksdensity находит оценщик ядра следующим образом.
Если 'Function' является 'pdf', тогда оценка плотности ядра
для <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0> ,
где , , и xi является ith выборочные данные.
Если 'Function' является 'cdf', тогда оценка ядра для cdf является
для <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0> .
Чтобы получить оценку ядра для обратной cdf, функции выжившего или совокупной функции опасности (когда 'Function' является 'icdf', 'survivor', или 'cumhazrd'), ksdensity использует оба и .
Если вы дополнительно задаете '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.
Эта функция поддерживает длинные массивы для данной , которой не помещаютси в память, с некоторыми ограничениями.
Некоторые опции, которые требуют дополнительных проходов или сортировки входных данных, не поддерживаются:
'BoundaryCorrection'
'Censoring'
'Support' (поддержка всегда неограниченна).
Использует стандартное отклонение (вместо среднего абсолютного отклонения), чтобы вычислить полосу пропускания.
Для получения дополнительной информации см. Раздел «Длинные массивы для данных , которых не помещаютсь в память,».
Указания и ограничения по применению:
Графическое изображение не поддерживается.
Имена в аргументах пары "имя-значение" должны быть константами во время компиляции.
Значения в следующих аргументах пары "имя-значение" также должны быть константами во время компиляции: 'BoundaryCorrection', 'Function', и 'Kernel'. Например, чтобы использовать 'Function','cdf' Аргумент пары "имя-значение" в сгенерированный код включите {coder.Constant('Function'),coder.Constant('cdf')} в -args значение codegen.
Значение 'Kernel' Аргумент пары "имя-значение" не может быть пользовательским указателем на функцию. Чтобы задать пользовательскую функцию ядра, используйте вектор символов или строковый скаляр.
Для значения 'Support' аргумент пары "имя-значение", тип данных во время компиляции должен совпадать с типом данных во время выполнения.
Для получения дополнительной информации о генерации кода смотрите Введение в генерацию кода и Рабочий процесс генерации общего кода.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.