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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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);

Сгенерируйте 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