सामान्यीकृत सामान्य वितरण के लिए प्रस्ताव वितरण


10

मैं एक सामान्यीकृत सामान्य वितरण ( विकिपीडिया प्रविष्टि ) का उपयोग करके संयंत्र फैलाव का मॉडलिंग कर रहा हूं , जिसमें संभावना घनत्व फ़ंक्शन है:

b2aΓ(1/b)e(da)b

जहां d दूरी की यात्रा है, a स्केल पैरामीटर है, और b आकार पैरामीटर है। इस वितरण के मानक विचलन द्वारा यात्रा की गई औसत दूरी दी गई है:

a2Γ(3/b)Γ(1/b)

यह सुविधाजनक है क्योंकि यह एक घातीय आकृति के लिए अनुमति देता है जब b=1 , एक गाऊसी आकार जब b=2 , और जब एक लेप्टोक्यूरिक वितरण के लिए b<1 । यह वितरण नियमित रूप से पौधे के फैलाव वाले साहित्य में फसल देता है, भले ही यह सामान्य रूप से बहुत दुर्लभ है, और इसलिए इसके बारे में जानकारी प्राप्त करना मुश्किल है।

सबसे दिलचस्प पैरामीटर b और माध्य फैलाव दूरी हैं।

मैं अनुमान लगाने के लिए कोशिश कर रहा हूँ a और b एमसीएमसी का उपयोग कर, लेकिन मैं नमूना प्रस्ताव मूल्यों के लिए एक कारगर तरीका के साथ आने के लिए संघर्ष कर रहा हूँ। अब तक, मैंने मेट्रोपोलिस-हेस्टिंग्स का उपयोग किया है, और वर्दी वितरण 0<a<400 और 0<b<3 से खींचा है , और मुझे लगभग 200-400 मीटर की दूरी पर मध्य दूरी मिलती है, जो जैविक अर्थ बनाती है। हालांकि, अभिसरण वास्तव में धीमा है, और मुझे विश्वास नहीं है कि यह पूर्ण पैरामीटर स्थान की खोज कर रहा है।

एक के लिए एक बेहतर प्रस्ताव वितरण के साथ आने के लिए इसकी मुश्किलa और b , क्योंकि वे एक दूसरे पर निर्भर करते हैं, अपने दम पर बहुत अर्थ के बिना। माध्य फैलाव दूरी का एक स्पष्ट जैविक अर्थ होता है, लेकिन एक दिया गया माध्य दूरी को असीम रूप से a और b कई संयोजनों द्वारा समझाया जा सकता है । जैसे a और b पीछे में सहसंबंध हैं।

अब तक मैंने मेट्रोपोलिस हेस्टिंग्स का उपयोग किया है, लेकिन मैं किसी भी अन्य एल्गोरिथ्म के लिए खुला हूं जो यहां काम करेगा।

प्रश्न: क्या कोई a और b लिए प्रस्ताव मूल्यों को आकर्षित करने के लिए अधिक कुशल तरीका सुझा सकता है ?

संपादित करें: सिस्टम के बारे में अतिरिक्त जानकारी: मैं घाटी में पौधों की आबादी का अध्ययन कर रहा हूं। उद्देश्य दाता पौधों और परागण पौधों के बीच पराग द्वारा यात्रा की गई दूरी के वितरण को निर्धारित करना है। मेरे पास जो डेटा हैं:

  1. हर संभव पराग दाता के लिए स्थान और डीएनए
  2. 60 मातृ पौधों (यानी पराग रिसीवर्स) के नमूने से एकत्र किए गए बीज जिन्हें उगाया और जीनोटाइप किया गया है।
  3. प्रत्येक मातृ पौधे के लिए स्थान और डीएनए।

मुझे दाता पौधों की पहचान नहीं पता है, लेकिन यह आनुवंशिक डेटा से यह पता लगाया जा सकता है कि कौन से दाता प्रत्येक अंकुर के पिता हैं। मान लें कि यह जानकारी प्रत्येक संतान दाता के लिए एक पंक्ति और प्रत्येक उम्मीदवार दाता के लिए एक कॉलम के साथ संभाव्यता जी के मैट्रिक्स में निहित है , जो प्रत्येक उम्मीदवार को केवल आनुवंशिक डेटा के आधार पर प्रत्येक संतान का पिता होने की संभावना देता है। जी को गणना करने में लगभग 3 सेकंड लगते हैं, और हर पुनरावृत्ति पर पुनर्गणना करने की आवश्यकता होती है, जो चीजों को काफी कम कर देता है।

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

जैसा कि ऊपर वर्णित है, मैं जीएनडी का उपयोग मॉडल के प्रसार के लिए कर रहा हूं। वास्तव में मैंने वास्तव में एक GND और एक समान वितरण का उपयोग किया था ताकि बहुत दूर के उम्मीदवारों की संभावना के लिए अनुमति देने के लिए पितृत्व की उच्च संभावना अकेले होने के कारण (आनुवंशिकी गड़बड़ है) जिसे अनदेखा किया गया तो GND की स्पष्ट पूंछ को फुलाया जाएगा। तो फैलाव दूरी d की संभावना है:

cPr(d|a,b)+(1c)N

जहाँ Pr(d|a,b) GND से फैलाव की संभावना है, N उम्मीदवारों की संख्या है, और c ( 0<c<1 ) यह निर्धारित करता है कि GND फैलाव में कितना योगदान देता है।

इसलिए दो अतिरिक्त विचार हैं जो कम्प्यूटेशनल बोझ को बढ़ाते हैं:

  1. अव्यवस्था दूरी ज्ञात नहीं है, लेकिन प्रत्येक पुनरावृत्ति पर अनुमान लगाया जाना चाहिए, और ऐसा करने के लिए जी बनाना महंगा है।
  2. एक तीसरा पैरामीटर है, c , पर एकीकृत करने के लिए।

इन कारणों से मुझे ऐसा लग रहा था कि ग्रिड प्रक्षेप करने के लिए कभी-कभी इतना जटिल है, लेकिन मुझे अन्यथा आश्वस्त होने की खुशी है।

उदाहरण

यहां मेरे द्वारा उपयोग किए गए अजगर कोड का एक सरल उदाहरण है। मैंने आनुवांशिक डेटा से पितृत्व के आकलन को सरल बनाया है, क्योंकि इसमें बहुत सारे अतिरिक्त कोड शामिल होंगे, और इसे 0 और 1 के बीच मूल्यों के मैट्रिक्स के साथ बदल दिया जाएगा।

GND की गणना करने के लिए सबसे पहले, कार्यों को परिभाषित करें:

import numpy as np
from scipy.special import gamma

def generalised_normal_PDF(x, a, b, gamma_b=None):
    """
    Calculate the PDF of the generalised normal distribution.

    Parameters
    ----------
    x: vector
        Vector of deviates from the mean.
    a: float
        Scale parameter.
    b: float
        Shape parameter
    gamma_b: float, optional
        To speed up calculations, values for Euler's gamma for 1/b
        can be calculated ahead of time and included as a vector.
    """
    xv = np.copy(x)
    if gamma_b:
        return (b/(2 * a * gamma_b ))      * np.exp(-(xv/a)**b)
    else:
        return (b/(2 * a * gamma(1.0/b) )) * np.exp(-(xv/a)**b)

def dispersal_GND(x, a, b, c):
    """
    Calculate a probability that each candidate is a sire
    assuming assuming he is either drawn at random form the
    population, or from a generalised normal function of his
    distance from each mother. The relative contribution of the
    two distributions is controlled by mixture parameter c.

    Parameters
    ----------
    x: vector
        Vector of deviates from the mean.
    a: float
        Scale parameter.
    b: float
        Shape parameter
    c: float between 0 and 1.
        The proportion of probability mass assigned to the
        generalised normal function.
    """    
    prob_GND = generalised_normal_PDF(x, a, b)
    prob_GND = prob_GND / prob_GND.sum(axis=1)[:, np.newaxis]

    prob_drawn = (prob_GND * c) + ((1-c) / x.shape[1])
    prob_drawn = np.log(prob_drawn)

    return prob_drawn

अगले 2000 उम्मीदवारों, और 800 संतानों का अनुकरण करें। साथ ही संतान की माँ और उम्मीदवार के पिता और एक डमी के बीच की दूरी की सूची बनाएँ जी मैट्रिक्स के ।

n_candidates = 2000 # Number of candidates in the population
n_offspring  = 800 # Number of offspring sampled.
# Create (log) matrix G.
# These are just random values between 0 and 1 as an example, but must be inferred in reality.
g_matrix  = np.random.uniform(0,1, size=n_candidates*n_offspring)
g_matrix  = g_matrix.reshape([n_offspring, n_candidates])
g_matrix  = np.log(g_matrix)
# simulate distances to ecah candidate father
distances = np.random.uniform(0,1000, 2000)[np.newaxis]

प्रारंभिक पैरामीटर मान सेट करें:

# number of iterations to run
niter= 100
# set intitial values for a, b, and c.
a_current = np.random.uniform(0.001,500, 1)
b_current = np.random.uniform(0.01,  3, 1)
c_current = np.random.uniform(0.001,  1, 1)
# set initial likelihood to a very small number
lik_current = -10e12

बदले में, बी, और सी को अपडेट करें और मेट्रोपोलिस अनुपात की गणना करें।

# number of iterations to run
niter= 100
# set intitial values for a, b, and c.
# When values are very small, this can cause the Gamma function to break, so the limit is set to >0.
a_current = np.random.uniform(0.001,500, 1)
b_current = np.random.uniform(0.01,  3, 1)
c_current = np.random.uniform(0.001,  1, 1)
# set initial likelihood to a very small number
lik_current = -10e12 
# empty array to store parameters
store_params = np.zeros([niter, 3])

for i in range(niter):
    a_proposed = np.random.uniform(0.001,500, 1)
    b_proposed = np.random.uniform(0.01,3, 1)
    c_proposed = np.random.uniform(0.001,1, 1)

    # Update likelihood with new value for a
    prob_dispersal = dispersal_GND(distances, a=a_proposed, b=b_current, c=c_current)
    lik_proposed = (g_matrix + prob_dispersal).sum() # lg likelihood of the proposed value
    # Metropolis acceptance ration for a
    accept = bool(np.random.binomial(1, np.min([1, np.exp(lik_proposed - lik_current)])))
    if accept:
        a_current = a_proposed
        lik_current = lik_proposed
    store_params[i,0] = a_current

    # Update likelihood with new value for b
    prob_dispersal = dispersal_GND(distances, a=a_current, b=b_proposed, c=c_current)
    lik_proposed = (g_matrix + prob_dispersal).sum() # log likelihood of the proposed value
    # Metropolis acceptance ratio for b
    accept = bool(np.random.binomial(1, np.min([1, np.exp(lik_proposed - lik_current)])))
    if accept:
        b_current = b_proposed
        lik_current = lik_proposed
    store_params[i,1] = b_current

    # Update likelihood with new value for c
    prob_dispersal = dispersal_GND(distances, a=a_current, b=b_current, c=c_proposed)
    lik_proposed = (g_matrix + prob_dispersal).sum() # lg likelihood of the proposed value
    # Metropolis acceptance ratio for c
    accept = bool(np.random.binomial(1, np.min([1, np.exp(lik_proposed - lik_current)])))
    if accept:
        c_current = c_proposed
        lik_current = lik_proposed
    store_params[i,2] = c_current

2
क्या आप एक और बी पर एक पूर्व की तलाश कर रहे हैं, या एक मेट्रोपोलिस-हेस्टिंग्स एल्गोरिथ्म में एक प्रस्ताव वितरण के लिए? आपको लगता है कि आपने दोनों शब्दों का परस्पर उपयोग किया है।
रॉबिन राइडर

आप सही हैं - स्पष्ट नहीं होने के लिए खेद है। मैं MH के लिए एक प्रस्ताव वितरण में सबसे ज्यादा दिलचस्पी रखता हूं। मैंने उस शीर्षक को बदल दिया है जहाँ मैंने अपने अनुसार पुजारियों का उल्लेख किया है।
बताइए

एक फ्लैट या जेफ्रेय्स पूर्व पर के तहत , यानी, π ( एक ) α 1 या π ( एक ) α 1 / एक मेरा मानना है कि करने के लिए चर का परिवर्तन है जो α = एक - एक पूर्ण-सूत्र का उत्पादन सशर्त π ( एक |, डेटा )aπ(a)1π(a)1/aα=abπ(a|b,data)
शीआन


यह काफी स्पष्ट नहीं है कि आप पहले से सेट करने में रुचि रखते हैं या नहीं जो मेट्रोपोलिस-हेस्टिंग्स को अधिक कुशलता से चलाने में मदद करता है या नहीं।
शीआन

जवाबों:


2

आपको मार्कोव चेन मोंटे कार्लो (MCMC) विधि का उपयोग करने की आवश्यकता नहीं है।

यदि आप एक समान पूर्व वितरण का उपयोग कर रहे हैं तो आप कुछ हद तक a और b लिए प्रतिबंधित स्थान पर अधिकतम संभावना अनुमान के समान कर रहे हैं ।

P(a,b;d)=P(d;a,b)P(a,b)P(d)=L(a,b;d)×const

P(a,b)P(d)ab ) है और यह संभावना फ़ंक्शन को स्केल करके पाया जा सकता है जैसे कि यह 1 से एकीकृत होता है।

ndiGN(0,a,b)

logL(a,b;d)=nlog(2a)nlog(Γ(1/b)b)1abi=1n(di)b

इस फ़ंक्शन के लिए इसे प्लॉट करना और अधिकतम खोजना बहुत मुश्किल नहीं होना चाहिए।


यह अंतर प्रक्षेप दो मापदंडों और प्रेक्षित दूरियों के लिए काम करेगा, और हो सकता है कि मैं क्या करूं। मैं वास्तव में फैलाव की दूरी और पितृत्व के अनुमान का संयुक्त आकलन कर रहा हूं, जिसमें कम से कम एक अन्य पैरामीटर शामिल है ताकि एकीकृत हो सके, और एक अतिरिक्त संभावना अवधि जो वास्तव में धीमी है (प्रति पुनरावृत्ति ~ 3 सेकंड) जो वास्तव में श्रृंखला को धीमा कर देती है। मुझे लगता है कि मुझे वर्तमान में मार्कोव श्रृंखला के लिए उपयोग किए जाने वाले 10 गुना अधिक पुनरावृत्तियों की आवश्यकता होगी।
सिपाही 28’18

@tellis उन शर्तों 'फैलाव दूरी' और 'पितृत्व प्रतिक्षेप' मुझे वास्तव में समझ में नहीं आता है। हो सकता है कि आप डेटासेट या उसके एक टुकड़े को जोड़कर कुछ और ठोस जानकारी प्रदान कर सकें। ऐसा करते समय आप 'एक अन्य पैरामीटर' के बारे में अधिक बात कर सकते हैं। तो, आपके पास क्या डेटा है ?
सेकसियस एम्पिरिकस

1
मैंने सिम्युलेटेड डेटा का उपयोग करके एक उदाहरण जोड़ा है।
टेलिस

0

मुझे यह समझ में नहीं आया कि आप मॉडल कैसे सेट कर रहे हैं: विशेष रूप से, यह मुझे लगता है कि किसी दिए गए बीज के लिए, संभव पराग फैलाव दूरी एक सीमित सेट है, और इस तरह आपकी "फैलाव संभावना" को बेहतर रूप में कहा जा सकता है " फैलाव दर "(जैसा कि संभावित पिता होने की संभावना से अधिक होने की संभावना द्वारा इसे सामान्यीकृत करने की आवश्यकता होगी)। इस प्रकार पैरामीटर्स का अर्थ (जैसा, प्रशंसनीय मूल्य) नहीं होता है, जिसकी आप अपेक्षा करते हैं।

मैंने अतीत में इसी तरह की कुछ समस्याओं पर काम किया है और इसलिए मैं एक संभावित दृष्टिकोण / आलोचनात्मक नज़र के सुझाव के तरीके के रूप में अपनी समझ में अंतराल को भरने की कोशिश करूँगा। माफी अगर मैं पूरी तरह से अपने मूल सवाल याद आती है। नीचे दिए गए उपचार मूल रूप से हैडफील्ड एट अल (2006) , इस तरह के मॉडल के बारे में बेहतर कागजात में से एक है।

Xl,klkimif

Gi,f=lPr(Xl,i|Xl,mi,Xl,f,θ)
θ

δiidmi,fmifDi,f=q(dmi,f|a,b,c)

D~i,f=Pr(δi=dmi,f|a,b,c)=Di,fkDi,k

PiiPi=ffi

Pr(Pi=f|a,b,c,θ,X)=Gi,fD~i,fkGi,kD~i,k=Gi,fDi,fkGi,kDi,k

इस समस्या के लिए एक सरल नमूना लिखने का एक उचित तरीका है मेट्रोपोलिस-इन-गिब्स:

  1. {a,b,c,θ}Pii
  2. {Pi,θ}a,b,cD
  3. {Pi,a,b,c}θGD

{a,b,c}{a,b,c,θ}

अब, यह योजना आपके द्वारा पहले से किए जा रहे काम के करीब हो सकती है (मैं यह नहीं बता सकता कि आप अपने प्रश्न से कैसे पितृत्व मॉडलिंग कर रहे हैं)। लेकिन कम्प्यूटेशनल चिंताओं से परे, मेरा बड़ा मुद्दा हैa,b,cPr(Pi|)a,b,cपौधों की स्थानिक व्यवस्था का संभावित रूप से मजबूत प्रभाव पड़ेगा, जिस पर मूल्यों कीa,b,cएक उच्च संभावना या पश्च संभावना है। यह विशेष रूप से सच है जब पौधों का स्थानिक वितरण असमान होता है।

अंत में, मेरा सुझाव है कि यदि आप पहले से ही नहीं है, तो आप ऊपर और जुड़े R पैकेज ("MasterBayes") से जुड़े Hadfield पेपर पर एक नज़र डालें। कम से कम यह विचार प्रदान कर सकता है।


मेरा दृष्टिकोण वास्तव में दो प्रमुख बदलावों के साथ हेडफील्ड के लिए तैयार किया गया है: (1) एक माँ से बीज पूर्ण भाई बहन हो सकते हैं, और इसलिए स्वतंत्र नहीं हैं। इसलिए समस्या संयुक्त रूप से फैलाव, पितृत्व, बल्ले के साथ-साथ संरचना की भी है। (2) मैं सभी उम्मीदवारों को एक साथ पितृत्व की संभावना के अनुपात में क्रमिक रूप से अद्यतन करने के बजाय एक आकस्मिक पितृत्व दृष्टिकोण का उपयोग कर रहा हूं, क्योंकि पितृत्व असाइनमेंट को क्रमिक रूप से अपडेट किया जाता है, क्योंकि पता लगाने के लिए संभावित पिता का एक बड़ा स्थान है।
ओक्टिस

मैं उन चीजों को करने के लिए पैकेज FAPS का उपयोग कर रहा हूं ।
टेलिस

मेरा प्रश्न अनिवार्य रूप से आपकी बात करने के लिए एक कुशल प्रस्ताव वितरण के बारे में पूछ रहा है। आपके उत्तर के बाकी हिस्से में जी और डी के उत्पाद के निर्माण सहित (मैंने पहले ही जो कुछ किया है, उसके बहुत करीब से वर्णन किया गया है, लेकिन इसके लिए धन्यवाद - मैं नहीं था) 'मुझे यकीन है कि मैंने इसे सही तरीके से किया था, इसलिए यह जानने के लिए उपयोगी है कि आँखों की एक दूसरी जोड़ी सहमत है!)।
टेलिस

a,b,c

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