ความน่าเชื่อถือของโหมดจากตัวอย่าง MCMC


12

ในหนังสือของเขา Doing Bayesian Data Analysis John Kruschke ระบุว่าในการใช้ JAGS จาก R

... การประมาณค่าของโหมดจากตัวอย่าง MCMC นั้นค่อนข้างไม่เสถียรเนื่องจากการประมาณจะขึ้นอยู่กับอัลกอริธึมการปรับให้เรียบซึ่งสามารถไวต่อการกระแทกแบบสุ่มและระลอกในตัวอย่าง MCMC (ทำการวิเคราะห์ข้อมูลแบบเบย์ , หน้า 205, ส่วน 8.2.5.1)

ในขณะที่ฉันมีความเข้าใจเกี่ยวกับอัลกอริทึม Metropolis และรูปแบบที่แน่นอนเช่นการสุ่มตัวอย่างกิ๊บส์ฉันไม่คุ้นเคยกับอัลกอริธึมที่ราบเรียบที่พูดพาดพิงเกินไปและสาเหตุที่มันหมายถึงการประเมินโหมดจากตัวอย่าง MCMC ไม่เสถียร ทุกคนสามารถให้ข้อมูลเชิงลึกที่เข้าใจง่ายเกี่ยวกับสิ่งที่อัลกอริทึมการปรับให้เรียบและทำไมมันทำให้การประเมินของโหมดไม่เสถียร?


2
ฉัน Thik John Kruschke พูดถึงอัลกอริทึมสำหรับการประมาณโหมดซึ่งขึ้นอยู่กับการประมาณความหนาแน่นของเคอร์เนล
Andrey Kolyadin

2
ลิงค์นี้มีประโยชน์
Andrey Kolyadin

เว้นแต่ว่าฉันเข้าใจผิดว่าเป็นเรื่องใหม่สำหรับสถิตินี้ JAGS จะส่งชุดตัวอย่างจากการแจกแจงหลังแทนที่จะเป็นฟังก์ชันความหนาแน่นของความน่าจะเป็นดังนั้นจึงไม่แน่ใจว่าการประมาณความหนาแน่น kernal จะเกิดขึ้นได้อย่างไร ขอบคุณสำหรับลิงค์แม้ว่า
Morgan Ball

ฉันคิดว่านี่น่าจะเกี่ยวข้องกับวิธีที่คุณได้รับโหมดจากกลุ่มตัวอย่างขนาดใหญ่ของตัวแปรต่อเนื่องซึ่งอาจมีค่าใดค่าหนึ่งมากกว่าค่าใดค่าหนึ่งดังนั้นคุณต้องจัดกลุ่มตัวอย่าง (หรือเรียบ)
Morgan Ball

1
คุณสามารถรับโหมดเป็นค่าที่มีความหนาแน่นสูงสุดในการประมาณความหนาแน่นของเคอร์เนล (อย่างน้อยนี่คือสิ่งที่ฉันทำและถ้าฉันไม่ผิดเจ Kruschke ใช้วิธีการเดียวกันในตัวอย่างของเขา)
Andrey Kolyadin

คำตอบ:


8

ฉันไม่ได้มีหนังสือที่อยู่ในมือดังนั้นฉันไม่แน่ใจว่าวิธีการปรับให้เรียบใช้ Kruschke แต่สำหรับสัญชาตญาณพิจารณาพล็อต 100 ตัวอย่างนี้จากมาตรฐานปกติพร้อมกับเกาส์เคอร์เนลประมาณการความหนาแน่นของการใช้แบนด์วิดท์ต่างๆ 0.1-1.0 (สั้น ๆ KDE ของเกาส์เซียนเป็นฮิสโตแกรมที่ราบรื่น: พวกมันประมาณความหนาแน่นโดยการเพิ่ม Gaussian สำหรับแต่ละจุดข้อมูลด้วยค่าเฉลี่ยที่ค่าที่สังเกต)

คุณจะเห็นได้ว่าแม้เมื่อการปรับให้เรียบสร้างการกระจายแบบ unimodal ได้โหมดโดยทั่วไปจะต่ำกว่าค่าที่ทราบเป็น 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 ทำกับหนังสือของ Kruschke plotPost()ฟังก์ชั่นที่กำหนดไว้ในสคริปต์ R DBDA2E-utilities.Rชื่อ จะแสดงโหมดโดยประมาณ ภายในนิยามฟังก์ชันมีสองบรรทัดเหล่านี้:

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

density()ฟังก์ชั่นที่มาพร้อมกับแพคเกจฐานสถิติการวิจัยและการดำเนินการกรองความหนาแน่นของการจัดเรียงเคอร์เนลฌอนอีสเตอร์อธิบาย มีอาร์กิวเมนต์ที่เป็นตัวเลือกสำหรับแบนด์วิดท์ของเคอร์เนลที่ปรับให้เรียบและสำหรับประเภทของเคอร์เนลที่จะใช้ มันเริ่มต้นที่เคอร์เนล Gaussian และมีเวทมนต์ภายในบางอย่างสำหรับการค้นหาแบนด์วิดธ์ที่ดี density()ฟังก์ชันส่งกลับวัตถุที่มีส่วนประกอบที่มีชื่อที่มีความหนาแน่นที่เรียบค่าต่างๆy xบรรทัดที่สองของรหัสด้านบนเพียงแค่ค้นหาxค่าที่ค่าyสูงสุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.