Как преобразовать сглаженную в ядре оценку плотности вероятности в единицы «материала» - PullRequest
0 голосов
/ 01 октября 2018

В настоящее время я работаю с многомерным распределением вероятностей (функция MATLAB mvksdensity), но у меня есть одна проблема, удерживающая меня.

У меня есть 3D PDF из [XYZ] точек впространство.Я хотел бы, чтобы это было в единицах точек, например, в оценочном количестве точек на одну ячейку вместо вероятности.

Это потому, что я хотел бы получить оценку количества точек, найденных в определенных регионах, я хотел бы преобразовать PDF в время (умножив на 1 / частоту дискретизации), и я хотел бы разделитьразные PDF-файлы с различными данными и т. д.

Моя первая мысль - разделить PDF-файл на его сумму (поэтому сумма (PDF) = 1), а затем умножить на общее количество [XYZ] точек.Таким образом, сумма (PDF) = количество баллов, и я должен быть в состоянии сделать все вышеперечисленное.

По сути, мой вопрос заключается в том, как преобразовать PDF в нечто более похожее на гистограмму - чтобы единицы измеренияэто «вещи», а не вероятность ...

Любая помощь будет высоко ценится,

Спасибо,

Удочка.

Вот игрушечный примериз того, что я имею в виду:

pos = rand(50000,3)*1000; % [XYZ] points
vindx = 0:50:1000; % grid over which we want to estimate KDE
[xv,yv,zv] = ndgrid(vindx); % grid over which we want to estimate KDE
f = mvksdensity(pos,[xv(:),yv(:),zv(:)],'Bandwidth',75,'Kernel','normal','Function','pdf'); % PDF
f = f./nansum(f(:)) .* length(pos(:,1)); % now the sum of f will = the number of [XYZ] points

map = NaN(length(vindx),length(vindx),length(vindx)); % prepare an empty 3D map
[~,idx] = ismember(xv(:),vindx); % get the indices along X
[~,idy] = ismember(yv(:),vindx); % get the indices along Y
[~,idz] = ismember(zv(:),vindx); % get the indices along Z
ida = sub2ind(size(map),idy,idx,idz); % get the indices into map
map(ida) = f(:); % add the values to map

figure % plot data
isosurface(map,nanmax(f(:))/2);
daspect([1 1 1])

1 Ответ

0 голосов
/ 30 октября 2018

Функция плотности вероятности, представленная mvksdensity, уже имеет единицы «доли от общей численности населения на единицу объема XYZ ».Умножение на исходное количество точек действительно преобразует это в «количество точек от исходной выборки на единицу объема, равное XYZ ».

Эти единицы, по сути, такие же, как и для гистограммы.где контейнеры имеют единицу объема .Если один выходной элемент должен представлять большую ячейку, умножьте ее на объем ячейки, чтобы представить число точек, которые, как ожидается, попадут в это число единиц ячейки.

Оценка mvksdensity по сетке точек приведет коставить сетку значений, которые являются числовым приближением PDF, определяемой оценкой плотности ядра.Умножение этого на объем ячейки сетки (который для вашей сетки ndgrid(vindx) равен 50^3) дает значения, которые образуют числовое приближение интеграла PDF при суммировании.

The аналитический интеграл PDF во всем XYZ домене равен , определен и равен 1.Чтобы ваши значения правильно отражали PDF, определенный в KDE, вы не должны делиться на сумму, как в примере с f./nansum(f(:)).Если числовой интеграл nansum(f(:) * 50^3) не равен 1, это отражает погрешность аппроксимации числового интеграла и либо указывает на то, что сетка не простирается слишком далеко, либо является слишком грубой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...