MCMC नमूने से मोड की विश्वसनीयता


12

जॉन क्रूसके ने अपनी पुस्तक डूइंग बेयसियन डेटा एनालिसिस में कहा है कि आर से जेएजीएस का उपयोग करने में

... MCMC नमूने से मोड का अनुमान अस्थिर हो सकता है क्योंकि अनुमान एक स्मूथिंग एल्गोरिदम पर आधारित है जो MCMC नमूने में यादृच्छिक धक्कों और तरंगों के प्रति संवेदनशील हो सकता है। ( डूइंग बायेसियन डेटा एनालिसिस , पृष्ठ 205, खंड 8.2.5.1)

हालांकि मुझे महानगर एल्गोरिथ्म पर समझ है और गिब्स सैंपलिंग जैसे सटीक रूपों से मैं स्मूथिंग एल्गोरिथ्म से परिचित नहीं हूं जो कि बहुत अधिक है और इसका मतलब यह होगा कि एमसीएमसी नमूने से मोड का अनुमान अस्थिर है। क्या कोई सहज ज्ञान युक्त अंतर्दृष्टि दे सकता है कि स्मूथिंग एल्गोरिथ्म क्या कर रहा है और यह मोड के अनुमान को अस्थिर क्यों बनाता है?


2
मैं जॉन क्रूसके को मोड अनुमान के लिए एल्गोरिथ्म के बारे में बोल रहा हूं जो कि कर्नेल घनत्व अनुमान पर आधारित है।
एंड्रे कोलैडिन

2
यह लिंक मददगार हो सकता है।
एंड्रे कोलैडिन

जब तक मैं आँकड़ों के इस क्षेत्र में नया नहीं हूँ, JAGS एक संभावित घनत्व फ़ंक्शन के बजाय पीछे के वितरण से नमूनों का एक सेट आउटपुट करता है, तो सुनिश्चित नहीं है कि यह कर्नेल घनत्व का अनुमान नहीं है। इस लिखाई के लिए धन्यवाद।
मॉर्गन बॉल

मुझे लगता है कि यह संभवतः ऐसा करने के लिए अधिक है कि आप एक निरंतर चर के बड़े नमूने से एक मोड कैसे प्राप्त करते हैं जहां किसी विशेष मूल्य के एक से अधिक नहीं हो सकता है और इसलिए आपको नमूना समूह (या चिकनी) करना होगा।
मॉर्गन बॉल

1
आप कर्नेल घनत्व अनुमान पर अधिकतम घनत्व के साथ मोड प्राप्त कर सकते हैं। (कम से कम यह मैं क्या कर रहा हूँ, और अगर मैं गलत नहीं हूँ जे। क्रुस्के अपने उदाहरणों में एक ही दृष्टिकोण का उपयोग करते हैं)
एंड्री कोलैडिन

जवाबों:


8

मेरे पास पुस्तक नहीं है, इसलिए मुझे यकीन नहीं है कि क्रुस्च विधि का उपयोग करने में क्या सहजता है, लेकिन अंतर्ज्ञान के लिए एक सामान्य मानक से 100 नमूनों की इस साजिश पर विचार करें, साथ ही गाऊसी कर्नेल घनत्व का अनुमान है कि 0.1 से 1.0 तक विभिन्न बैंडविथ का उपयोग किया जाता है। (संक्षेप में, गाऊसी केडीई एक प्रकार का चिकना हिस्टोग्राम है: वे प्रत्येक डेटा बिंदु के लिए गॉसियन जोड़कर घनत्व का अनुमान लगाते हैं, साथ में देखे गए मूल्य पर।

आप देख सकते हैं कि एक बार भी स्मूथी एक अनिमॉडल वितरण बनाता है, मोड आम तौर पर 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

शॉन ईस्टर ने एक अच्छा जवाब दिया; यहाँ यह वास्तव में आर स्क्रिप्ट द्वारा कैसे किया गया है जो क्रुस्के की किताब के साथ आता है। plotPost()समारोह नामित आर लिपि में परिभाषित किया गया है DBDA2E-utilities.R। यह अनुमानित मोड प्रदर्शित करता है। फ़ंक्शन परिभाषा के अंदर, ये दो लाइनें हैं:

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

density()समारोह आर के आधार आँकड़े पैकेज है, और लागू प्रकार शॉन ईस्टर वर्णित की एक कर्नेल घनत्व फिल्टर के साथ आता है। इसमें चौरसाई कर्नेल की बैंडविड्थ और उपयोग करने के लिए कर्नेल के प्रकार के लिए वैकल्पिक तर्क हैं। यह एक गाऊसी कर्नेल को डिफॉल्ट करता है, और एक अच्छा बैंडविड्थ खोजने के लिए कुछ आंतरिक जादू है। density()समारोह नाम के एक घटक के साथ एक वस्तु देता है yविभिन्न मूल्यों पर समतल घनत्व है x। कोड की दूसरी पंक्ति, ऊपर, बस वह xमान पाता है जहां yअधिकतम है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.