Оценка функции сглаживания ядра для одномерных и двухмерных данных
[ возвращает оценку плотности вероятности, 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

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 находится в масштабе преобразованных значений.
Распределение ядра - непараметрическое представление функции плотности вероятности (pdf) случайной величины. Распределение ядра можно использовать в тех случаях, когда параметрическое распределение не может правильно описать данные или когда необходимо избежать предположений о распределении данных. Распределение ядра определяется функцией сглаживания и значением полосы пропускания, которые управляют сглаживанием результирующей кривой плотности.
Оценщиком плотности ядра является оценочный pdf случайной величины. Для любых действительных значений x формула оценки плотности ядра задается
xih),
где x1, x2,..., xn - случайные выборки из неизвестного распределения, n - размер выборки, (·) - функция сглаживания ядра, h - полоса пропускания.
Оценщик ядра для кумулятивной функции распределения (cdf) для любых действительных значений x задается как
− xih),
где ) dt.
Дополнительные сведения см. в разделе Распространение ядра.
Метод отражения - это метод коррекции границ, который точно находит оценки плотности ядра, когда случайная величина имеет ограниченную поддержку. При указании 'BoundaryCorrection','reflection', ksdensity использует метод отражения. Этот метод увеличивает объем ограниченных данных, добавляя отраженные данные вблизи границ, и оценивает pdf. Затем, ksdensity возвращает оценочный pdf, соответствующий исходной поддержке, с правильной нормализацией, так что оценочный интеграл pdf над исходной поддержкой равен единице.
Если дополнительно указать 'Support',[L U], то ksdensity находит оценщик ядра следующим образом.
Если 'Function' является 'pdf', то оценщиком плотности ядра является
xih ) + K (x − xi + h)] для L ≤ x ≤ U,
где − = 2U − xi, а xi -iДанные образца.
Если 'Function' является 'cdf', то оценщиком ядра для cdf является
xi − h ) + G (L − xih) + G (L − xi + h)] для L ≤ x ≤ U.
Получение оценки ядра для обратной cdf, функции выжившего или кумулятивной функции опасности (когда 'Function' является 'icdf', 'survivor', или 'cumhazrd'), ksdensity использует как (x), так 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.
Эта функция поддерживает массивы tall для данных из памяти с некоторыми ограничениями.
Некоторые параметры, требующие дополнительных проходов или сортировки входных данных, не поддерживаются:
'BoundaryCorrection'
'Censoring'
'Support' (поддержка всегда неограниченна).
Использует стандартное отклонение (вместо среднего абсолютного отклонения) для вычисления полосы пропускания.
Дополнительные сведения см. в разделе Tall Arrays for Out-of-Memory Data.
Примечания и ограничения по использованию:
Печать не поддерживается.
Имена в аргументах пары имя-значение должны быть константами времени компиляции.
Значения в следующих аргументах пары имя-значение также должны быть константами времени компиляции: 'BoundaryCorrection', 'Function', и 'Kernel'. Например, для использования 'Function','cdf' аргумент пары имя-значение в сгенерированном коде, включить {coder.Constant('Function'),coder.Constant('cdf')} в -args значение codegen.
Значение 'Kernel' аргумент пары имя-значение не может быть пользовательским дескриптором функции. Чтобы задать пользовательскую функцию ядра, используйте вектор символов или скаляр строки.
Для значения 'Support' аргумент пары имя-значение, тип данных compile-time должен соответствовать типу данных среды выполнения.
Дополнительные сведения о создании кода см. в разделах Введение в создание кода и Общий рабочий процесс создания кода.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.