Ядро, сглаживающее функциональную оценку для одномерных и двумерных данных
[
возвращает оценку плотности вероятности, f
,xi
]
= ksdensity(x
)f
, для выборочных данных в векторе или матрице 2D столбца 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);
Оценка плотности показывает 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);
x
— Выборочные данныеВыборочные данные, для который ksdensity
возвращает f
значения в виде вектор-столбца или матрицы 2D столбца. Используйте вектор-столбец в одномерных данных и матрицу 2D столбца для двумерных данных.
Пример: [f,xi] = ksdensity(x)
Типы данных: single
| double
pts
— Точки, в которых можно оценить f
Точки, в которых можно оценить f
В виде вектора или матрицы 2D столбца. Для одномерных данных, 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
Типы данных: логический
'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]
| матрица two-two, [L1 L2; U1 U2]
Поддержка плотности в виде разделенной запятой пары, состоящей из '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'
(значение по умолчанию) | '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
, возвращенный как вектор или матрица 2D столбца. Для одномерных данных значением по умолчанию являются 100 равномерно распределенных точек, которые покрывают область значений данных в x
. Для двумерных данных значением по умолчанию являются 900 равномерно распределенных точек, созданных с помощью meshgrid
от 30 равномерно распределенных точек в каждой размерности.
bw
— Пропускная способность сглаживания окнаПропускная способность сглаживания окна, возвращенного как скалярное значение.
Если вы задаете 'BoundaryCorrection'
как 'log'
(значение по умолчанию) и 'Support'
как любой 'positive'
или векторный [L U]
, ksdensity
преобразует ограниченные данные, чтобы быть неограниченным при помощи логарифмического преобразования. Значение bw
находится по шкале преобразованных значений.
Распределение ядра является непараметрическим представлением функции плотности вероятности (PDF) случайной переменной. Можно использовать распределение ядра, когда параметрическое распределение не может правильно описать данные, или, когда это необходимо, постараться не делать предположения о распределении данных. Распределение ядра задано функцией сглаживания и значением пропускной способности, которые управляют гладкостью получившейся кривой плотности.
Средством оценки плотности ядра является предполагаемый PDF случайной переменной. Для любых действительных значений x формулой средства оценки плотности ядра дают
откуда x1, x2, …, xn является случайными выборками неизвестного распределения, n является объемом выборки, функция сглаживания ядра, и h является пропускной способностью.
Средством оценки ядра для кумулятивной функции распределения (cdf), для любых действительных значений x, дают
где .
Для получения дополнительной информации смотрите Распределение Ядра.
Отражательный метод является граничным методом коррекции, который точно находит средства оценки плотности ядра, когда случайная переменная имеет ограниченный носитель. Если вы задаете 'BoundaryCorrection','reflection'
, ksdensity
использует отражательный метод. Этот метод увеличивает ограниченные данные путем добавления отраженных данных около контуров и оценивает PDF. Затем ksdensity
возвращает предполагаемый PDF, соответствующий исходной поддержке с соответствующей нормализацией, так, чтобы интеграл предполагаемого PDF по исходной поддержке был равен одной.
Если вы дополнительно задаете 'Support',[L U]
, затем ksdensity
находит средство оценки ядра можно следующим образом.
Если 'Function'
'pdf'
, затем средство оценки плотности ядра
для L ≤ x ≤ U,
где , , и xi является i
выборочные данные th.
Если 'Function'
'cdf'
, затем средство оценки ядра для cdf
для L ≤ x ≤ U.
Получить средство оценки ядра для инверсии cdf, функции оставшегося в живых или совокупной функции опасности (когда 'Function'
'icdf'
, 'survivor'
, или 'cumhazrd'
), ksdensity
использование оба и .
Если вы дополнительно задаете '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.
Эта функция поддерживает длинные массивы для данных, которые не помещаются в память, с некоторыми ограничениями.
Некоторые опции, которые требуют дополнительных передач или сортировки входных данных, не поддержаны:
'BoundaryCorrection'
'Censoring'
'Support'
(поддержка всегда неограниченна).
Стандартное отклонение использования (вместо среднего абсолютного отклонения), чтобы вычислить пропускную способность.
Для получения дополнительной информации смотрите Длинные массивы для Данных, которые не помещаются в память, (MATLAB).
Указания и ограничения по применению:
Графический вывод не поддержан.
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции.
Значения в следующих аргументах пары "имя-значение" должны также быть константами времени компиляции: 'BoundaryCorrection'
функция
, и 'Kernel'
. Например, чтобы использовать 'Function','cdf'
аргумент пары "имя-значение" в сгенерированном коде, включайте {coder.Constant('Function'),coder.Constant('cdf')}
в -args
значение codegen
.
Значение 'Kernel'
аргументом пары "имя-значение" не может быть пользовательский указатель на функцию. Чтобы задать пользовательскую функцию ядра, используйте вектор символов или строковый скаляр.
Для значения 'Support'
аргумент пары "имя-значение", тип данных времени компиляции должен совпадать с типом данных во время выполнения.
Для получения дополнительной информации о генерации кода смотрите Введение в Генерацию кода и Общий Рабочий процесс Генерации кода.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.