slicesample

Пробоотборник среза

Синтаксис

rnd = slicesample(initial,nsamples,'pdf',pdf)
rnd = slicesample(initial,nsamples,'logpdf',logpdf)
[rnd,neval] = slicesample(initial,...)
[rnd,neval] = slicesample(initial,...,Name,Value)

Описание

rnd = slicesample(initial,nsamples,'pdf',pdf) генерирует nsamples случайные выборки с использованием метода дискретизации среза (см. Алгоритмы). pdf задает целевую функцию плотности вероятностей (pdf). initial - вектор-строка или скаляр, содержащий начальное значение случайных выборочных последовательностей.

rnd = slicesample(initial,nsamples,'logpdf',logpdf) генерирует выборки с использованием логарифма pdf.

[rnd,neval] = slicesample(initial,...) возвращает среднее количество вычислений функции, которые произошли при выборке среза.

[rnd,neval] = slicesample(initial,...,Name,Value) генерирует случайные выборки с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар.

Входные параметры

initial

Начальная точка, скаляр или вектор-строка. Задайте initial так pdf(initial) является строго положительной скалярной величиной. length(initial) - количество размерностей каждой выборки.

nsamples

Положительное целое число, количество выборок, которое slicesample генерирует.

pdf

Указатель на функцию, которая генерирует функцию плотности вероятностей, заданную как @. pdf может быть ненормализован, что означает, что он не должен интегрироваться с 1.

logpdf

Указатель на функцию, которая генерирует логарифм функции плотности вероятностей, заданный как @. logpdf может быть логарифмом ненормализованного PDF.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

'burnin'

Неотрицательное целое число, количество выборок, которые нужно сгенерировать и отбросить перед сгенерированием выборок для возвращения. Алгоритм дискретизации среза является марковской цепью, стационарное распределение которого пропорционально распределению pdf аргумент. Задайте burnin к достаточно высокому значению, что вы верите, что цепь Маркова примерно достигает стационарности после burnin выборки.

По умолчанию: 0

'thin'

Положительное целое, где slicesample отбрасывает каждый   thin - 1 выборок и возвращает следующую. Алгоритм дискретизации среза является марковской цепью, поэтому выборки последовательно коррелируются. Чтобы уменьшить последовательную корреляцию, выберите большее значение thin.

По умолчанию: 1

'width'

Ширина интервала вокруг текущей выборки, скаляр или вектор положительных значений. slicesample начинается с этого интервала и ищет соответствующую область, содержащую точки pdf которые вычисляются до достаточно большого значения.

  • Если width является скаляром, и выборки имеют несколько размерностей, slicesample использует width для каждой размерности.

  • Если width является вектором, он должен иметь ту же длину, что и initial.

По умолчанию: 10

Выходные аргументы

rnd

nsamples-by- length(initial) матрица, где каждая строка является одной выборкой.

neval

Скаляр, среднее количество вычислений функции на выборку. neval включает в себя burnin и thin оценки, а не только оценки выборок, возвращенных в rnd. Поэтому общее количество вычислений функции

neval*(nsamples*thin + burnin).

Примеры

свернуть все

Этот пример показывает, как сгенерировать случайные выборки из мультимодальной плотности, используя slicesample.

Задайте функцию, пропорциональную мультимодальной плотности.

rng default  % For reproducibility
f = @(x) exp(-x.^2/2).*(1 + (sin(3*x)).^2).*...
    (1 + (cos(5*x).^2));
area = integral(f,-5,5);

Сгенерируйте 2000 выборки из плотности, используя период горения 1000 и сохраняя один из пяти выборок.

N = 2000;
x = slicesample(1,N,'pdf',f,'thin',5,'burnin',1000);

Постройте гистограмму выборки.

[binheight,bincenter] = hist(x,50);
h = bar(bincenter,binheight,'hist');
h.FaceColor = [.8 .8 1];

Figure contains an axes. The axes contains an object of type patch.

Масштабируйте плотность, чтобы иметь ту же площадь, что и гистограмма, и накладывайте ее на гистограмму.

hold on
h = gca;
xd = h.XLim;
xgrid = linspace(xd(1),xd(2),1000);
binwidth = (bincenter(2)-bincenter(1));
y = (N*binwidth/area) * f(xgrid);
plot(xgrid,y,'r','LineWidth',2)
hold off

Figure contains an axes. The axes contains 2 objects of type patch, line.

Выборки, кажется, хорошо соответствуют теоретическому распределению, поэтому burnin значение представляется адекватной.

Совет

  • Нет окончательных предложений по выбору соответствующих значений для burnin, thin, или width. Выбор начальных значений burnin и thin, и увеличить их, при необходимости, для придания необходимой независимости и маргинального распределения. Для получения дополнительной информации об эффекте настройки см. Neal [1] width.

Алгоритмы

В каждой точке последовательности случайных выборок, slicesample выбирает следующую точку путем «срезания» плотности, чтобы сформировать окрестность вокруг предыдущей точки, где плотность выше некоторого значения. Следовательно, точки выборки не являются независимыми. Близлежащие точки в последовательности, как правило, ближе друг к другу, чем они были бы из выборки независимых значений. Для многих целей весь набор точек может использоваться в качестве выборки из целевого распределения. Однако, когда этот тип последовательной корреляции является проблемой, burnin и thin параметры могут помочь уменьшить эту корреляцию.

slicesample использует алгоритм дискретизации срезов Neal [1]. Для числовой устойчивости преобразует pdf функция в logpdf функция. Алгоритм изменения размера области поддержки для каждого уровня, называемый «stepping-out» и «stepping-in», был предложен Нилом.

Ссылки

[1] Нил, Рэдфорд М. «Slice Sampling». Ann. Stat. vol. 31, No. 3, pp. 705-767, 2003. Доступно в Project Euclid.

Введенный в R2006a