Распределение предложений для обобщенного нормального распределения

10

Я моделирую рассредоточение завода, используя обобщенное нормальное распределение ( запись в Википедии ), которое имеет функцию плотности вероятности:

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

где - пройденное расстояние, - параметр масштаба, а - параметр формы. Среднее пройденное расстояние определяется стандартным отклонением этого распределения:dбab

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

Это удобно, потому что учитывает экспоненциальную форму, когда , гауссову форму, когда , и лептокуротическое распределение, когда . Это распределение регулярно встречается в литературе по рассеиванию растений, хотя в целом оно встречается довольно редко и, следовательно, трудно найти информацию.b=1b=2b<1

Наиболее интересными параметрами являются и среднее расстояние разгона.b

Я пытаюсь оценить и используя MCMC, но я изо всех сил пытаюсь эффективный способ для отбора значений предложений. До сих пор я использовал «Метрополис-Гастингс» и опирался на равномерное распределение и , и я получил средние расстояния рассеяния около 200-400 метров, что имеет биологический смысл. Однако конвергенция действительно медленная, и я не уверен, что она исследует все пространство параметров.ab0<a<4000<b<3

Сложно придумать лучшее распределение предложений для и , потому что они зависят друг от друга, не имея большого значения сами по себе. Среднее расстояние рассеивания имеет четкое биологическое значение, но данное среднее расстояние рассеяния может быть объяснено бесконечным числом комбинаций и . Как таковые и коррелируют сзади.ababab

До сих пор я использовал Metropolis Hastings, но я открыт для любого другого алгоритма, который бы работал здесь.

Вопрос: Может ли кто-нибудь предложить более эффективный способ получения значений предложений для и ?ab

Изменить: Дополнительная информация о системе: я изучаю популяцию растений вдоль долины. Цель состоит в том, чтобы определить распределение расстояний, пройденных пыльцой между донорскими растениями и растениями, которые они опыляют. У меня есть данные:

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

Я не знаю идентичности донорских растений, но это можно сделать из генетических данных, определив, какие доноры являются отцами каждого сеянца. Допустим, эта информация содержится в матрице вероятностей G со строкой для каждого потомства и столбцом для каждого донора-кандидата, который дает вероятность того, что каждый кандидат является отцом каждого потомка, основываясь только на генетических данных. Для вычисления G требуется около 3 секунд, и он должен пересчитываться на каждой итерации, что значительно замедляет процесс.

Поскольку мы обычно ожидаем, что более близкие кандидаты в доноры с большей вероятностью будут отцами, вывод отцовства будет более точным, если вы совместно сделаете вывод об отцовстве и расселении. Матрица D имеет те же размеры, что и G , и содержит вероятности отцовства, основанные только на функции расстояний между матерью и кандидатом и некоторого вектора параметров. Умножение элементов в D и G дает общую вероятность отцовства с учетом генетических и пространственных данных. Произведение умноженных значений дает вероятность дисперсии модели.

Как описано выше, я использовал GND для моделирования разгона. На самом деле, я фактически использовал смесь GND и равномерного распределения, чтобы учесть вероятность того, что очень отдаленные кандидаты имеют более высокую вероятность отцовства из-за одного случая (генетика грязная), которая раздула бы видимый хвост GND, если его игнорировать. Так что вероятность разгона расстояния равна:d

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

где - вероятность рассеивания расстояния от GND, N - количество кандидатов, а ( ) определяет, какой вклад GND вносит в рассеяние.Pr(d|a,b)c0<c<1

Поэтому есть два дополнительных соображения, которые увеличивают вычислительную нагрузку:

  1. Расстояние разгона неизвестно, но должно быть выведено на каждой итерации, и создание G для этого стоит дорого.
  2. Существует третий параметр, , для интегрирования.c

По этим причинам мне показалось, что это слишком сложно для интерполяции сетки, но я рад быть убежденным в обратном.

пример

Вот упрощенный пример кода Python, который я использовал. Я упростил оценку отцовства по генетическим данным, поскольку это потребовало бы большого количества дополнительного кода, и заменил его матрицей значений от 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 потомков. Также смоделируйте список расстояний между матерями потомства и отцами-кандидатами, а также фиктивную матрицу 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 по очереди и вычислите коэффициент метрополии.

# 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 или распределение предложений по алгоритму Метрополис-Гастингс? Вы, кажется, использовали оба термина взаимозаменяемо.
Робин Райдер,
Вы правы - извините за непонятность. Меня больше всего интересует распределение предложений по MH. Я изменил название, где я упомянул приоры соответственно.
Tellis
Под флетом или Джеффрисом до , т. или я считаю, что изменение переменной на приводит к закрытому -форм условного . aπ(a)1π(a)1/aα=abπ(a|b,data)
Сиань
См en.wikipedia.org/wiki/Generalized_normal_distribution
Кьетил б Халворсеном
Остается неясным, заинтересованы ли вы в установке априора, который помогает, или в более эффективной работе Metropolis-Hastings.
Сиань

Ответы:

2

Вам не нужно использовать метод Марковской цепочки Монте-Карло (MCMC).

Если вы используете единообразные априорные распределения, то вы делаете что-то очень похожее на оценку максимальной вероятности в ограниченном пространстве для параметров и .ab

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

где является константой (независимой от и ), и ее можно найти, масштабируя функцию правдоподобия так, чтобы она интегрировалась в 1.P(a,b)P(d)ab

Функция логарифмического правдоподобия для переменных :ndiGN(0,a,b)

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

Для этой функции не должно быть слишком сложно построить ее и найти максимум.

Секст Эмпирик
источник
Эта опорная интерполяция будет работать для двух параметров и наблюдаемых расстояний, и это может быть тем, что я в итоге делаю. На самом деле я делаю совместную оценку расстояния дисперсии и вывода отцовства, который включает в себя, по крайней мере, еще один параметр для интегрирования, и дополнительный термин правдоподобия, который действительно очень медленный (~ 3 секунды на итерацию), который действительно замедляет цепочку. Я думаю, что мне понадобится примерно в 10 раз больше итераций, чем я использовал в настоящее время для цепочки Маркова.
Tellis
Я не совсем понимаю эти термины «дистанция расселения» и «логика отцовства». Возможно, вы могли бы предоставить более конкретную информацию, добавив набор данных или его часть. Делая это, вы также можете больше говорить о «еще одном параметре». Итак, какие данные это , что вы действительно имеете?
Секст Эмпирик
1
Я добавил пример с использованием смоделированных данных.
Tellis
0

Я не совсем понимаю, как вы настраиваете модель: в частности, мне кажется, что для данного семени возможные расстояния рассеивания пыльцы являются конечным набором, и, таким образом, вашу «вероятность рассеивания» лучше назвать « коэффициент рассеивания "(так как он должен быть нормализован путем суммирования по предполагаемым отцам, чтобы быть вероятностью). Таким образом, параметры могут не совсем иметь ожидаемого значения (например, вероятные значения).

В прошлом я работал над парой подобных проблем, и поэтому я постараюсь заполнить пробелы в моем понимании, чтобы предложить возможный подход / критический взгляд. Извиняюсь, если я полностью упустил ваш первоначальный вопрос. Приведенная ниже обработка в основном соответствует Hadfield et al (2006) , одной из лучших статей об этой модели.

Пусть обозначает генотип в локусе для некоторого отдельного . Для потомства с известной матерью и предполагаемым отцом пусть вероятность наблюдаемых генотипов потомства будет - в простейшем случае это просто произведение вероятностей менделевского наследования, но в более сложных случаях может включать некоторую модель ошибки генотипирования или отсутствующие родительские генотипы, поэтому я включаю параметр (s) неприятности ) .Xl,klkimif

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

Пусть будет расстоянием рассеивания пыльцы для потомства , и пусть будет расстоянием между известной матерью и предполагаемым отцом , и пусть будет коэффициент разгона (например, взвешенная комбинация обобщенных нормальных и равномерных pdf, как в вашем вопросе). Чтобы выразить скорость рассеивания как вероятность, нормализуйте по отношению к конечному пространству состояний: (конечный) набор возможных расстояний рассеяния, вызванных (конечным) числом предполагаемых отцов в вашей области исследования, так что δ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. При , обновите с обновлением MH. Чтобы сформировать цель, значения должны быть обновлены, что является дорогостоящим, а - нет.{Pi,a,b,c}θGD

Чтобы снизить стоимость рисования образцов , вы можете выполнить шаги 1-2 несколько раз до 3. Чтобы настроить распределения предложений на шагах 2-3, вы можете использовать образцы из предварительного прогона для оценить ковариантность совместного апостериорного распределения для . Затем используйте эту оценку ковариации в многомерном предложении Гаусса. Я уверен, что это не самый эффективный подход, но его легко реализовать.{a,b,c}{a,b,c,θ}

Теперь эта схема может быть близка к тому, что вы уже делаете (я не могу сказать, как вы моделируете отцовство по вашему вопросу). Но помимо вычислительных соображений, моя более важная мысль заключается в том, что параметры могут не иметь того значения, которое, как вы думаете, они имеют в отношении среднего расстояния рассеивания. Это потому, что в контексте описанной выше модели отцовства входят в числитель и знаменатель (нормализующая константа): таким образом, пространственное расположение растений будет оказывают потенциально сильное влияние на то, какие значения имеют высокую вероятность или апостериорную вероятность. Это особенно верно, когда пространственное распределение растений неравномерно.a,b,cPr(Pi|)a,b,ca , b , ca,b,c

Наконец, я предлагаю вам взглянуть на ту статью Хэдфилда, на которую есть ссылка выше, и на сопровождающий пакет R («MasterBayes»), если вы еще этого не сделали. По крайней мере, это может дать идеи.

Нейт Папа
источник
Мой подход действительно основан на модели Хэдфилда с двумя основными изменениями: (1) семена от матери могут быть полными братьями и сестрами, и, следовательно, не независимыми. Таким образом, проблема заключается в совместном выводе расселения, отцовства, летучей мыши и родственных структур. (2) Я использую подход дробного отцовства, чтобы рассматривать всех кандидатов одновременно пропорционально их вероятности отцовства, а не обновлять задания отцовства последовательно, потому что есть большое пространство возможных отцов для исследования.
Tellis
Я использую пакет FAPS, чтобы сделать эти вещи.
Tellis
По сути, мой вопрос касается эффективного распределения предложений для выполнения вашего пункта 2. Остальная часть вашего ответа описывает нечто очень близкое к тому, что я уже сделал, включая формулировку произведения G и D (но спасибо за это - я не был Не уверен, что я сделал это правильно, поэтому полезно знать, что вторая пара глаз согласна!).
Tellis
Извините, у меня нет готового решения по распределению предложений. Но у меня есть несколько замечаний: (1) Шаги 1-2 очень дешевы, и их можно многократно повторять с небольшими затратами, прежде чем переходить к шагу 3. Даже при неаккуратном предложении на шаге 2 достаточно много итераций » делать большие шаги »в пространстве состояний . a,b,c
Нейт Папа
(2) Условное распределение на шаге 2 является трехмерным. Как в: легко визуализировать. Как ненормализованная цель выглядит на MAP-оценке назначений отцовства для фиксированного ? Визуализация ненормализованной цели в разных отцовствах должна дать вам представление о том, является ли она мультимодальной, плоской в ​​областях и т. Д.Ga,b,cG
Нейт Папа,