Надійність режиму з зразка MCMC


12

У своїй книзі Doing Bayesian Analysis Data, John Kruschke зазначає, що при використанні JAGS від R

... оцінка режиму з зразка MCMC може бути досить нестабільною, оскільки оцінка базується на алгоритмі згладжування, який може бути чутливим до випадкових ударів та пульсацій у зразку MCMC. ( Проведення Байєсівського аналізу даних , стор. 205, розділ 8.2.5.1)

Хоча я розумію алгоритм Metropolis і точні форми, як відбір проб Гіббса, я не знайомий з алгоритмом згладжування, на який також згадується, і чому це означатиме, що оцінка режиму зразка MCMC нестабільна. Хтось може дати інтуїтивно зрозуміти, що робить алгоритм згладжування, і чому він робить оцінку режиму нестабільною?


2
Я вважаю, що Джон Крушке говорить про алгоритм оцінки режиму, який базується на оцінці щільності ядра.
Андрій Колядін

2
Це посилання може бути корисним.
Андрій Колядін

Якщо я не помиляюся, що я є новим у цій галузі статистики, JAGS видає набір вибірок із заднього розподілу, а не функції щільності ймовірності, тому не впевнене, що оцінка щільності ядра входить у неї. Дякуємо за посилання.
Морган бал

Я думаю, що це, мабуть, більше пов'язане з тим, як ви отримуєте режим з великої вибірки суцільної змінної, де може бути не більше ніж якесь конкретне значення, і тому ви повинні згрупувати (або згладити) вибірку.
Морган Бал

1
Ви можете отримати режим як значення з максимальною щільністю при оцінці щільності ядра. (Принаймні, це я роблю, і якщо я не помиляюся, Дж. Крушке використовує такий же підхід у своїх прикладах)
Андрій Колядін

Відповіді:


8

У мене немає книги під рукою, тому я не впевнений, який метод згладжування використовує Крушке, але для інтуїції розглянемо цей сюжет із 100 зразків від стандартного нормального, а також оцінки щільності ядра Гаусса, використовуючи різні пропускну здатність від 0,1 до 1,0. (Коротко кажучи, гауссові KDE - це свого роду згладжена гістограма. Вони оцінюють щільність, додаючи гауссова для кожної точки даних із середнім значенням у спостережуваному значенні.)

Видно, що навіть раз згладжування створює одномодальний розподіл, режим, як правило, нижче відомого значення 0.

введіть тут опис зображення

Більше, ось графік розрахункового режиму (вісь y) за пропускною здатністю ядра, який використовується для оцінки щільності, використовуючи той самий зразок. Сподіваємось, це надає деякої інтуїції, як оцінка змінюється залежно від параметрів вирівнювання.

введіть тут опис зображення

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Feb  1 09:35:51 2017

@author: seaneaster
"""

import numpy as np
from matplotlib import pylab as plt
from sklearn.neighbors import KernelDensity

REAL_MODE = 0
np.random.seed(123)

def estimate_mode(X, bandwidth = 0.75):
    kde = KernelDensity(kernel = 'gaussian', bandwidth = bandwidth).fit(X)
    u = np.linspace(-3,3,num=1000)[:, np.newaxis]
    log_density = kde.score_samples(u)
    return u[np.argmax(log_density)]

X = np.random.normal(REAL_MODE, size = 100)[:, np.newaxis] # keeping to standard normal

bandwidths = np.linspace(0.1, 1., num = 8)

plt.figure(0)
plt.hist(X, bins = 100, normed = True, alpha = 0.25)

for bandwidth in bandwidths:
    kde = KernelDensity(kernel = 'gaussian', bandwidth = bandwidth).fit(X)
    u = np.linspace(-3,3,num=1000)[:, np.newaxis]
    log_density = kde.score_samples(u)
    plt.plot(u, np.exp(log_density))

bandwidths = np.linspace(0.1, 3., num = 100)
modes = [estimate_mode(X, bandwidth) for bandwidth in bandwidths]
plt.figure(1)
plt.plot(bandwidths, np.array(modes))

5

Шон Пасха дав приємну відповідь; ось як це насправді робиться за сценаріями R, які поставляються з книгою Крушке. plotPost()Функція визначена в R сценарію з ім'ям DBDA2E-utilities.R. Він відображає передбачуваний режим. Всередині визначення функції є ці два рядки:

mcmcDensity = density(paramSampleVec)
mo = mcmcDensity$x[which.max(mcmcDensity$y)]

Ця density()функція постачається з базовим пакетом статистики R та реалізує фільтр щільності ядра такого типу, як описано у Sean Easter. Він має необов'язкові аргументи для пропускної здатності ядра, що згладжується, і для типу ядра, яке потрібно використовувати. Він за замовчуванням до ядра Гаусса і має деяку внутрішню магію пошуку приємної пропускної здатності. density()Функція повертає об'єкт з компонентом з ім'ям , yякий має згладжені щільності при різних значеннях x. Другий рядок коду, вище, якраз знаходить xзначення, де yмаксимальне.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.