Оценка функции сглаживания ядра для многомерных данных
вычисляет оценку плотности вероятностей выборочных данных в матрице n -by d f
= mvksdensity(x
,pts
,'Bandwidth',bw
)x
, оцениваемый в точках в pts
использование необходимого значения аргумента пары "имя-значение" bw
для значения полосы пропускания. Оценка основана на продукте функции Гауссова ядра.
Для одномерных или двухмерных данных используйте ksdensity
вместо этого.
возвращает любой из предыдущих выходных аргументов, используя дополнительные опции, заданные одним или несколькими f
= mvksdensity(x
,pts
,'Bandwidth',bw
,Name,Value
)Name,Value
аргументы в виде пар. Для примера можно задать тип функции, которая mvksdensity
оценивает, такой как плотность вероятностей, совокупная вероятность или функция выживания. Можно также присвоить веса входным значениям.
Загрузите данные Hald цемента.
load hald
Данные измеряют теплоту затвердевания для 13 различных составов цемента. Матрица предикторов ingredients
содержит процентную композицию для каждого из четырех ингредиентов цемента. Матрица отклика heat
содержит тепло затвердевания (в кал\г) через 180 дней.
Оцените плотность ядра для первых трех наблюдений в ingredients
.
xi = ingredients(1:3,:);
f = mvksdensity(ingredients,xi,'Bandwidth',0.8);
Загрузите данные Hald цемента.
load hald
Данные измеряют теплоту затвердевания для 13 различных составов цемента. Матрица предикторов ingredients
содержит процентную композицию для каждого из четырех ингредиентов цемента. Матрица отклика heat
содержит тепло затвердевания (в кал/г) через 180 дней.
Создайте массив точек, в которых можно оценить плотность. Во-первых, задайте область значений и интервалы для каждой переменной, используя одинаковое число точек в каждой размерности.
gridx1 = 0:2:22; gridx2 = 20:5:80; gridx3 = 0:2:24; gridx4 = 5:5:65;
Далее используйте ndgrid
чтобы сгенерировать полную сетку точек с помощью заданной области значений и интервала.
[x1,x2,x3,x4] = ndgrid(gridx1,gridx2,gridx3,gridx4);
Наконец, преобразуйте и конкатенируйте, чтобы создать массив, который содержит точки, в которых можно оценить плотность. Этот массив имеет по одному столбцу для каждой переменной.
x1 = x1(:,:)'; x2 = x2(:,:)'; x3 = x3(:,:)'; x4 = x4(:,:)'; xi = [x1(:) x2(:) x3(:) x4(:)];
Оцените плотность.
f = mvksdensity(ingredients,xi,... 'Bandwidth',[4.0579 10.7345 4.4185 11.5466],... 'Kernel','normpdf');
Просмотрите размер xi
и f
чтобы подтвердить, что mvksdensity
вычисляет плотность в каждой точке в xi
.
size_xi = size(xi)
size_xi = 1×2
26364 4
size_f = size(f)
size_f = 1×2
26364 1
x
- Выборочные данныеВыборочные данные, для которого mvksdensity
возвращает оценку плотности вероятностей, заданную как n -by - d матрица числовых значений. n - количество точек данных (строк) в x
, и d количество размерностей (столбцов).
Типы данных: single
| double
bw
- Значение полосы пропускания окна сглаживания ядраЗначение полосы пропускания окна сглаживания ядра, заданное как скалярное значение или d элемент. d - количество размерностей (столбцов) в выборочных данных x
. Если bw
является скалярным значением, оно применяется ко всем размерностям.
Если вы задаете 'BoundaryCorrection'
как 'log'
(по умолчанию) и 'Support'
либо как 'positive'
или матрица с двумя строками, mvksdensity
преобразует ограниченные данные в неограниченные с помощью преобразования журнала. Значение bw
находится в шкале преобразованных значений.
Правило большого пальца Сильвермана для полосы пропускания является
где d - количество размерностей, n - количество наблюдений, и - стандартное отклонение ith варьируйте [4].
Пример: 'Bandwidth',0.8
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'Kernel','triangle','Function,'cdf'
задает, что mvksdensity
оценивает cdf выборочных данных с помощью функции ядра треугольника.'BoundaryCorrection'
- Метод коррекции границМетод коррекции границ, заданный как разделенная разделенными запятой парами, состоящая из 'BoundaryCorrection'
и любой из них 'log'
или 'reflection'
.
Значение | Описание |
---|---|
'log' |
Значение |
'reflection' |
|
mvksdensity
применяет коррекцию границ только при задании 'Support'
как значение, отличное от 'unbounded'
.
Пример: 'BoundaryCorrection','reflection'
'Function'
- Функция для оценки'pdf'
(по умолчанию) | 'cdf'
| 'survivor'
Функция для оценки, заданная как разделенная разделенными запятой парами, состоящая из 'Function'
и одно из следующих.
Значение | Описание |
---|---|
'pdf' | Функция плотности вероятностей |
'cdf' | Кумулятивная функция распределения |
'survivor' | Функция выживания |
Пример: 'Function'
, 'cdf'
'Kernel'
- Тип более плавного ядра'normal'
(по умолчанию) | 'box'
| 'triangle'
| 'epanechnikov'
| указатель на функцию | вектор символов | строковый скалярТип гладкого ядра, заданный как разделенная разделенными запятой парами, состоящая из 'Kernel'
и одно из следующих.
Значение | Описание |
---|---|
'normal' | Нормальное (Гауссово) ядро |
'box' | Ядро коробки |
'triangle' | Треугольное ядро |
'epanechnikov' | Ядро Эпанечникова |
Можно также задать функцию ядра, которая является пользовательской или встроенной функцией. Задайте функцию как указатель на функцию (для примера, @myfunction
или @normpdf
) или как вектор символов или строковый скаляр (для примера, 'myfunction'
или 'normpdf'
). Программа вызывает указанную функцию с одним аргументом, который является массивом расстояний между значениями данных и местоположениями, где оценивается плотность, нормированная по ширине полосы пропускания в этой размерности. Функция должна вернуть массив того же размера, содержащий соответствующие значения функции ядра.
mvksdensity
применяет одно и то же ядро к каждой размерности.
Пример: 'Kernel','box'
'Support'
- Поддержка плотности'unbounded'
(по умолчанию) | 'positive'
| матрицу 2 d байтаПоддержка плотности, заданная как разделенная разделенными запятой парами, состоящая из 'support'
и одно из следующих.
Значение | Описание |
---|---|
'unbounded' | Позволять плотности простираться по всей действительной линии |
'positive' | Ограничьте плотность положительными значениями |
2-by- d матрица | Задайте конечные нижнюю и верхнюю границы для поддержки плотности. Первая строка содержит нижние пределы, а вторая - верхние пределы. Каждый столбец содержит пределы для одной размерности x . |
'Support'
может также быть комбинацией положительных, неограниченных и ограниченных переменных, заданных как [0 -Inf L; Inf Inf U]
.
Пример: 'Support','positive'
Типы данных: single
| double
| char
| string
'Weights'
- Веса для выборочных данныхВеса для выборочных данных, заданные как разделенная разделенными запятой парами, состоящая из 'Weights'
и вектор длины size(x,1)
, где x
является выборочными данными.
Пример: 'Weights',xw
Типы данных: single
| double
f
- Предполагаемые значения функцийПредполагаемые значения функции, возвращенные как вектор. f
и pts
иметь одинаковое число строк.
Многомерное ядерное распределение является непараметрическим представлением функции плотности вероятностей (pdf) случайного вектора. Можно использовать ядерное распределение, когда параметрическое распределение не может правильно описать данные, или когда вы хотите избежать допущений о распределении данных. Многомерное ядерное распределение определяется функцией сглаживания и матрицей полосы пропускания, которые управляют плавностью полученной кривой плотности.
Многомерная оценка плотности ядра является оценочным PDF для случайного вектора. Предположим x = (x1, x2,..., xd) '- d -мерный случайный вектор с функцией плотности f а yi = (yi1, yi2,..., yid)' - случайная выборка, полученная из f для i = 1, 2,..., n, где n - количество случайных выборок. Для любых векторов действительных чисел x, многомерная оценка плотности ядра задается как
где , является функцией сглаживания ядра, и H является матрицей d -by d bandwidth .
mvksdensity
использует диагональную матрицу пропускной способности и ядро продукта. То есть H1/2 является квадратной диагональной матрицей с элементами вектора (h1, h2,..., hd) на основной диагонали. K(x) берет форму <reservedrangesplaceholder6> продукта = k (<reservedrangesplaceholder4>) k (<reservedrangesplaceholder2>) <reservedrangesplaceholder1> (<reservedrangesplaceholder0>), где является одномерной функцией сглаживания ядра. Затем многомерная оценка плотности ядра становится
Оценка ядра для кумулятивной функции распределения (cdf), для любых векторов действительных чисел x, задается как
где .
Метод отражения является краевым методом коррекции, который точно находит оценки плотности ядра, когда случайная переменная имеет ограниченную поддержку. Если вы задаете 'BoundaryCorrection','reflection'
, mvksdensity
использует метод отражения.
Если вы дополнительно задаете 'Support'
в виде двухстрочной матрицы, состоящей из нижнего и верхнего пределов для каждой размерности, затем mvksdensity
находит оценщик ядра следующим образом.
Если 'Function'
является 'pdf'
, тогда оценка плотности ядра
для <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0> ,
где , , и yij является j
первый элемент i
th выборочных данных, соответствующий x(i,j)
от входного параметра x
. Lj и Uj являются нижним и верхним пределами j
е-е размерность, соответственно.
Если 'Function'
является 'cdf'
, тогда оценка ядра для cdf является
для <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0> .
Чтобы получить оценку ядра для функции выживания (когда 'Function'
является 'survivor'
), mvksdensity
использует оба и .
Если вы дополнительно задаете 'Support'
как 'positive'
или матрица, включающая [0 inf]
, затем mvksdensity
находит оценку плотности ядра путем замены [Lj Uj]
с [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.
[5] Скотт, Д. В. Многомерная оценка плотности: теория, практика и визуализация. John Wiley & Sons, 2015.
Указания и ограничения по применению:
Имена в аргументах пары "имя-значение", включая 'Bandwidth'
, должны быть постоянными во время компиляции.
Значения в следующих аргументах пары "имя-значение" также должны быть константами во время компиляции: 'BoundaryCorrection'
, 'Function'
, и 'Kernel'
. Например, чтобы использовать 'Function','cdf'
Аргумент пары "имя-значение" в сгенерированный код включите {coder.Constant('Function'),coder.Constant('cdf')}
в -args
значение codegen
.
Значение 'Kernel'
Аргумент пары "имя-значение" не может быть пользовательским указателем на функцию. Чтобы задать пользовательскую функцию ядра, используйте вектор символов или строковый скаляр.
Для значения 'Support'
аргумент пары "имя-значение", тип данных во время компиляции должен совпадать с типом данных во время выполнения.
Для получения дополнительной информации о генерации кода смотрите Введение в генерацию кода и Рабочий процесс генерации общего кода.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.