Розподіл пропозицій для узагальненого нормального розподілу


10

Я моделюю розповсюдження рослин за допомогою узагальненого нормального розподілу ( запис у Вікіпедії ), який має функцію щільності ймовірності:

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

де d - пройдена відстань, a - параметр масштабу, а b - параметр форми. Середня пройдена відстань задається стандартним відхиленням цього розподілу:

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

Це зручно, оскільки воно дозволяє експоненціальну форму, коли b=1 , гауссова форма, коли b=2 , і лептокуртичний розподіл, коли b<1 . Цей розподіл регулярно з'являється в літературі про розповсюдження рослин, хоча він взагалі досить рідкісний, і тому важко знайти інформацію про нього.

Найцікавіші параметри - б і середня відстань розсіювання.

Я намагаюся оцінити a і b за допомогою MCMC, але я намагаюся придумати ефективний спосіб вибірки значень пропозиції. Поки що я використовував Метрополіс-Гастінгс і виводив з рівномірних розподілів 0<a<400 та 0<b<3 , і я отримую середні відстані заднього розсіювання приблизно 200-400 метрів, що має біологічний сенс. Однак конвергенція дійсно повільна, і я не переконаний, що вона вивчає повний простір параметрів.

Складно придумати кращий розподіл пропозицій для a і b , оскільки вони залежать один від одного, не маючи особливого значення самостійно. Середня відстань розсіювання має чітке біологічне значення, але задана середня відстань розсіювання може бути пояснена нескінченно багатьма комбінаціями a і b . Оскільки такі a і b співвідносяться в задній частині.

Поки я використовував Метрополіс Гастінгс, але я відкритий для будь-якого іншого алгоритму, який би працював тут.

Питання: Чи може хтось запропонувати більш ефективний спосіб скласти значення пропозицій для a і b ?

Редагувати: Додаткова інформація про систему: Я вивчаю популяцію рослин вздовж долини. Метою є визначення розподілу відстаней, пройдених між пилком між рослинами-донорами та рослинами, які вони запилюють. У мене є такі дані:

  1. Місцезнаходження та ДНК кожного можливого донора пилку
  2. Насіння зібрано із зразка 60 материнських рослин (тобто приймачів пилку), які вирощували та генотипували.
  3. Місцезнаходження та ДНК для кожної материнської рослини.

Я не знаю ідентичності рослин-донорів, але це можна зробити з генетичних даних, визначивши, які донори є батьками кожного саджанця. Скажімо, ця інформація міститься у матриці ймовірностей G із рядком для кожного потомства та стовпчиком для кожного донора-кандидата, що дає ймовірність того, що кожен кандидат є батьком кожного потомства на основі лише генетичних даних. Г обчислення потрібно близько 3 секунд, і його потрібно перераховувати при кожній ітерації, що значно сповільнює роботу.

Оскільки ми, як правило, очікуємо, що більш близькі донори-кандидати стануть батьками, висновок про батьківство буде більш точним, якщо ви спільно підходите до батьківства та розселення. Матриця D має ті ж розміри , що і G , і містить ймовірності батьківства, засновані лише на функції відстані між матір'ю та кандидатом та деякого вектора параметрів. Помноження елементів на D і G дає спільну ймовірність батьківства за даними генетичних та просторових даних. Добуток помножених значень дає ймовірність моделі розгону.

Як описано вище, я використовував GND для моделювання розповсюдження. Насправді я фактично використовував суміш GND та рівномірного розподілу, щоб передбачити можливість дуже віддалених кандидатів, які мають більшу ймовірність батьківства через випадковість (генетика безладна), що може роздути очевидний хвіст GND, якщо його нехтувати. Отже, ймовірність відстані розсіювання d дорівнює:

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

де Pr(d|a,b) - вірогідність відстані розсіювання від GND, N - кількість кандидатів, а c ( 0<c<1 ) визначає, який внесок внесе ВНД у розповсюдження.

Отже, є два додаткові міркування, які збільшують обчислювальне навантаження:

  1. Відстань розгону не відома, але її слід робити під час кожної ітерації та створення G для цього потрібно дорого.
  2. Існує третій параметр, c , для інтеграції.

З цих причин мені здавалося, що вона є дещо настільки складною, щоб виконувати інтерполяцію сітки, але я радий переконатися в іншому.

Приклад

Ось спрощений приклад застосованого мною коду python. Я спростив оцінку батьківства за генетичними даними, оскільки це передбачало б багато зайвого коду, і замінив його матрицею значень між 0 і 1.

Спочатку визначте функції для обчислення ВНД:

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 потомства. Моделюйте також список відстаней між матерями потомства та батьками-кандидатами та матричну матрицю G.

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

Оновіть по черзі a, b і c і обчисліть коефіцієнт Metropolis.

# 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
Ви шукаєте пріоритет на a і b або розподіл пропозицій за алгоритмом Metropolis-Hastings? Ви, здається, вживали обидва терміни взаємозамінно.
Робін Райдер

Ви маєте рацію - вибачте, що не зрозуміли. Мене найбільше цікавить розподіл пропозицій для МЗ. Я змінив назву, де я згадав пріорів відповідно.
Tellis

aπ(a)1π(a)1/aα=abπ(a|b,data)


Залишається незрозумілим, чи зацікавлений ви в тому, щоб встановити пріоритет, який допомагає, або ефективніше керувати Metropolis-Hastings
Сіань

Відповіді:


2

Не потрібно використовувати метод Маркова ланцюга Монте-Карло (MCMC).

ab

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 разів більше ітерацій, ніж я зараз використовую для ланцюга Марків.
Tellis

@telis ці терміни "відстань до розгону" та "висновок батьківства" я не дуже розумію. Можливо, ви можете надати якусь більш конкретну інформацію, додавши набір даних або фрагмент її. При цьому ви можете також більше говорити про параметр "один інший". Отже, які дані це , що ви дійсно маєте?
Секст Емпірік

1
Я додав приклад за допомогою модельованих даних.
Tellis

0

Я не зовсім розумію, як ви налаштовуєте модель: зокрема, мені здається, що для даного насіння можливі відстані розповсюдження пилку є кінцевим набором, і, отже, вашу "ймовірність розповсюдження" можна краще назвати " швидкість розповсюдження "(як це потрібно було б нормалізувати шляхом підсумовування над батьками, що вважаються, щоб бути ймовірністю). Таким чином, параметри можуть мати не зовсім те значення (як у правдоподібних значеннях), яке ви очікуєте.

У минулому я працював над декількома подібними проблемами, тому спробую заповнити прогалини в моєму розумінні, як спосіб запропонувати можливий підхід / критичний погляд. Вибачте, якщо я повністю пропускаю суть вашого оригінального питання. Наведене нижче лікування в основному слід за Хадфілдом та ін. (2006) , однією з кращих статей про подібну модель.

Хл,клкiмif

Гi,f=лПr(Хл,i|Хл,мi,Хл,f,θ)
- в найпростішому випадку це просто добуток менделівської вірогідності успадкування, але в більш складних випадках може включати деяку модель помилки генотипування або відсутні батьківські генотипи, тому я включаю параметри (і) неприємності θ.

Дозволяє δi - відстань розповсюдження пилку для потомства i, і нехай гмi,f бути відстань між відомою матір'ю мi і передбачуваний батько f, і нехай Di,f=q(гмi,f|а,б,c)- швидкість розповсюдження (наприклад, зважена комбінація узагальнених нормальних та рівномірних pdfs, як у вашому запитанні). Щоб виразити швидкість розсіювання як вірогідність, нормалізуйте wrt в кінцевому просторі стану: (кінцевий) набір можливих відстаней розсіювання, індукованих (кінцевим) числом передбачуваних батьків у вашому досліджуваному районі, так що

D~i,f=Пr(δi=гмi,f|а,б,c)=Di,fкDi,к

Дозволяє Пi бути батьківським призначенням насіння i, це є Пi=f якщо рослина f є батьком потомства i. Припускаючи єдину домовленість про призначення батьківства,

Pr(Pi=f|a,b,c,θ,X)=Gi,fD~i,fkGi,kD~i,k=Gi,fDi,fkGi,kDi,k
In other words, conditional on other parameters and genotypes, paternal assignment is a discrete r.v. with finite support, that is normalized by integrating across said support (possible fathers).

So a reasonable way to write a simple sampler for this problem is Metropolis-within-Gibbs:

  1. Conditional on {a,b,c,θ}, update paternity assignments Pi for all i. This is a discrete r.v. with finite support so you can easily draw an exact sample
  2. Conditional on {Pi,θ}, update a,b,c with a Metropolis-Hastings update. To form the target, only the D values in the equations above need to be updated, so this isn't costly
  3. Conditional on {Pi,a,b,c}, update θ with a MH update. To form the target, the G values need to be updated, which is costly, but the D do not.

To decrease the cost of drawing samples of {a,b,c}, you could perform steps 1-2 multiple times before 3. To tune the proposal distributions in steps 2-3, you could use samples from a preliminary run to estimate the covariance of the joint posterior distribution for {a,b,c,θ}. Then use this covariance estimate within a multivariate Gaussian proposal. I'm sure this isn't the most efficient approach, but it is easy to implement.

Now, this scheme may be close to what you are already doing (I can't tell how you are modelling paternity from your question). But beyond computational concerns, my larger point is that the parameters a,b,c may not have the meaning you think they do, with regards to mean dispersal distance. This is because, in the context of the paternity model Pr(Pi|) I described above, a,b,c enter into both numerator and denominator (normalizing constant): thus, the spatial arrangement of plants will have a potentially strong effect on which values of a,b,c have a high likelihood or posterior probability. This is especially true when the spatial distribution of the plants is uneven.

Finally, I suggest you take a look at that Hadfield paper linked to above and the accompanying R package ("MasterBayes"), if you haven't already. At the least it may provide ideas.


My approach is indeed modelled on Hadfield's, with two major changes: (1) seeds from a mother may be full siblings, and therefore not independent. The problem is therefore one of jointly inferring dispersal, paternity, bat also sibship structure as well. (2) I am using a fractional paternity approach to consider all candidates simultaneously in proportion to their likelihood of paternity, rather than update paternity assignments sequentially, because there is a large space of possible fathers to explore.
tellis

I am using the package FAPS to do those things.
tellis

My question is essentially asking about an efficient proposal distribution for do your point 2. The rest of your answer describes something very close to what I have already done, including the formulation of the product of G and D (but thanks for this - I wasn't sure I had done it correctly, so it is useful to know a second pair of eyes agree!).
tellis

I don't have a canned solution w.r.t proposal distribution, sorry. But I have a few observations: (1) Steps 1-2 are very cheap, and can be iterated many times with little cost before moving to step 3. Even with a shoddy proposal in step 2, a lot of iterations should suffice to "make large moves" in the state space of a,b,c.
Nate Pope

(2) The conditional distribution in step 2 is 3-dimensional. As in: easy to visualize. What does the unnormalized target of a,b,c look like at a MAP estimate of the paternity assignments for a fixed G? Visualizing the unnormalized target across different paternities should give you a sense of if it's multimodal, flat in areas, etc.
Nate Pope
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.