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- 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);

Сгенерируйте 2 000 выборок от плотности, с помощью электротермотренировки 1 000, и сохранив каждую пятую выборку.

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];

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

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

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

Советы

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

Алгоритмы

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

slicesample использует алгоритм выборки среза Нила [1]. Для числовой устойчивости это преобразует pdf функция в logpdf функция. Алгоритм, чтобы изменить размер области поддержки для каждого уровня, названного “выходить” и “продвижением - в”, был предложен Нилом.

Ссылки

[1] Нил, Рэдфорд М. Слайс Сэмплинг. Энн. Издание 31 закона, № 3, стр 705–767, 2003. Доступный в Проекте Евклид.

Введен в R2006a