Оценка функции сглаживания ядра для одномерных и двухмерных данных
[
возвращает оценку плотности вероятностей, 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 является i
th выборочные данные.
Если '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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.