Độ tin cậy của Chế độ từ mẫu MCMC


12

Trong cuốn sách Làm phân tích dữ liệu Bayes, John Kruschke nói rằng trong việc sử dụng JAGS từ R

... Ước tính chế độ từ mẫu MCMC có thể không ổn định vì ước tính dựa trên thuật toán làm mịn có thể nhạy cảm với các va chạm ngẫu nhiên và gợn sóng trong mẫu MCMC. ( Thực hiện phân tích dữ liệu Bayes , trang 205, mục 8.2.5.1)

Mặc dù tôi đã hiểu rõ về thuật toán của Metropolis và các hình thức chính xác như lấy mẫu Gibbs, tôi không quen với thuật toán làm mịn được ám chỉ và tại sao điều đó có nghĩa là ước tính chế độ từ mẫu MCMC không ổn định. Có ai có thể đưa ra một cái nhìn sâu sắc trực quan về những gì thuật toán làm mịn đang làm và tại sao nó làm cho ước tính của chế độ không ổn định?


2
Tôi thik John Kruschke nói về thuật toán để ước tính chế độ dựa trên ước tính mật độ hạt nhân.
Andrey Kolyadin

2
Liên kết này có thể hữu ích.
Andrey Kolyadin

Trừ khi tôi nhầm lẫn với lĩnh vực thống kê này, JAGS đưa ra một tập hợp các mẫu từ phân phối sau thay vì hàm mật độ xác suất để không chắc chắn ước tính mật độ hạt nhân đi vào nó. Cảm ơn các liên kết mặc dù.
Bóng Morgan

Tôi nghĩ rằng điều này có lẽ liên quan nhiều hơn đến cách bạn có được một chế độ từ một mẫu lớn của một biến liên tục trong đó có thể không có nhiều hơn một giá trị cụ thể và do đó bạn phải nhóm (hoặc làm mịn) mẫu.
Bóng Morgan

1
Bạn có thể lấy chế độ làm giá trị với mật độ tối đa trên ước tính mật độ hạt nhân. (Ít nhất đây là những gì tôi làm, và nếu tôi không nhầm J. Kruschke sử dụng cách tiếp cận tương tự trong các ví dụ của mình)
Andrey Kolyadin

Câu trả lời:


8

Tôi không có cuốn sách này nên tôi không chắc Kruschke sử dụng phương pháp làm mịn nào, nhưng với trực giác, hãy xem xét lô 100 mẫu này từ một tiêu chuẩn thông thường, cùng với ước tính mật độ hạt nhân Gaussian sử dụng các băng thông khác nhau từ 0,1 đến 1,0. (Tóm lại, KDE Gaussian là một loại biểu đồ được làm mịn: Chúng ước tính mật độ bằng cách thêm Gaussian cho mỗi điểm dữ liệu, với giá trị trung bình tại giá trị quan sát được.)

Bạn có thể thấy rằng ngay cả khi làm mịn tạo ra phân phối không theo phương thức, chế độ thường nằm dưới giá trị đã biết là 0.

nhập mô tả hình ảnh ở đây

Hơn nữa, đây là một biểu đồ của chế độ ước tính (trục y) theo băng thông kernel được sử dụng để ước tính mật độ, sử dụng cùng một mẫu. Hy vọng rằng điều này cho thấy một số trực giác về cách ước tính thay đổi với các tham số làm mịn.

nhập mô tả hình ảnh ở đâ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

Sean Easter cung cấp một câu trả lời tốt đẹp; Đây là cách nó thực sự được thực hiện bởi các tập lệnh R đi kèm với cuốn sách của Kruschke. Các plotPost()chức năng được xác định trong kịch bản R được đặt tên DBDA2E-utilities.R. Nó hiển thị chế độ ước tính. Bên trong định nghĩa hàm, có hai dòng sau:

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

Các density()chức năng đi kèm với gói cơ sở số liệu thống kê của R, và thực hiện một hạt nhân mật độ lọc của loại Sean Phục mô tả. Nó có các đối số tùy chọn cho băng thông của kernel làm mịn và cho loại kernel sẽ sử dụng. Nó mặc định là hạt nhân Gaussian và có một số phép thuật bên trong để tìm một băng thông đẹp. Các density()hàm trả về một đối tượng với một thành phần có tên ymà có mật độ mịn ở giá trị khác nhau x. Dòng mã thứ hai, ở trên, chỉ tìm xgiá trị ở ymức tối đa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.