일반 정규 분포에 대한 제안 분포


10

확률 밀도 함수가 있는 일반 정규 분포 ( wikipedia entry )를 사용하여 식물 분산을 모델링 하고 있습니다.

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

여기서 는 이동 거리, 는 척도 모수, 는 모양 모수입니다. 이동 한 평균 거리는이 분포의 표준 편차로 제공됩니다.dab

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

이것은 일 때 지수 모양 , 일 때 가우시안 모양 , 때 렙 토쿠 르틱 분포를 허용하기 때문에 편리합니다 . 이 분포는 일반적으로 매우 드물기 때문에 식물 분산 문헌에서 정기적으로 자라기 때문에 정보를 찾기가 어렵습니다.b=1b=2b<1

가장 흥미로운 매개 변수는 와 평균 분산 거리입니다.b

MCMC를 사용하여 와 를 추정하려고 하지만 제안서 값을 샘플링하는 효율적인 방법을 마련하기 위해 고심하고 있습니다. 지금까지 나는 Metropolis-Hastings를 사용했으며 균일 분포 and 에서 도출했으며 약 200-400 미터의 후방 평균 분산 거리를 얻었습니다. 이는 생물학적 의미가 있습니다. 그러나 수렴은 실제로 느리고 전체 매개 변수 공간을 탐색하고 있다고 확신하지 않습니다.ab0<a<4000<b<3

와 대한 더 나은 제안서 배포를 제안하는 것은 까다 롭습니다 . 왜냐하면 그것들은 자체적으로 많은 의미를 갖지 않고 서로 의존하기 때문입니다. 평균 분산 거리는 명확한 생물학적 의미를 갖지만, 주어진 평균 분산 거리는 무한히 많은 와 조합으로 설명 될 수 있습니다 . 이와 같이 와 는 후부에서 상관된다.ababab

지금까지 Metropolis Hastings를 사용했지만 여기에서 작동하는 다른 알고리즘을 사용할 수 있습니다.

질문 : 누구나 와 대한 제안 값을보다 효율적으로 그릴 수있는 방법을 제안 할 수 있습니까 ?ab

편집 : 시스템에 대한 추가 정보 : 계곡을 따라 식물 집단을 연구하고 있습니다. 목표는 공여자 식물과 그들이 수분하는 식물 사이에서 꽃가루가 이동 한 거리의 분포를 결정하는 것입니다. 내가 가진 데이터는 다음과 같습니다

  1. 가능한 모든 꽃가루 기증자의 위치와 DNA
  2. 성장하고 유전자형 화 된 60 개의 모체 식물 (예 : 꽃가루 수용기) 샘플에서 수집 한 씨앗.
  3. 각 모성 식물의 위치와 DNA.

기증자 식물의 정체성을 모르지만, 이것은 어떤 기증자가 각 묘종의 아버지인지를 결정함으로써 유전 데이터로부터 추론 할 수 있습니다. 이 정보는 각 자손에 대한 행과 각 후보 공여자에 대한 열이있는 확률 행렬 G에 포함되어 있으며 , 이는 각 후보자가 유전자 데이터를 기반으로 각 자손의 아버지가 될 확률을 제공합니다. G 는 계산하는 데 약 3 초가 걸리며 반복 할 때마다 다시 계산해야하므로 속도가 상당히 느려집니다.

우리는 일반적으로 더 가까운 후보 공여자가 아버지가 될 가능성이 높기 때문에, 친자 관계와 유추를 함께 추론하면 친자 관계 유추가 더 정확합니다. 행렬 DG 와 차원이 같 으며 어머니와 후보자 사이의 거리와 일부 매개 변수 벡터만으로 친자 관계의 확률을 포함합니다. DG의 요소를 곱하면 유전 적 및 공간적 데이터가 주어지면 친자 관계가 될 확률이 높아집니다. 곱한 값의 곱은 분산 모델의 가능성을 제공합니다.

위에서 설명한 것처럼 분산을 모델링하기 위해 GND를 사용했습니다. 사실 저는 GND와 균일 한 분포의 혼합을 사용하여 무시할 경우 GND의 명백한 꼬리를 부 풀릴 수있는 우연 (유전자가 지저분 함)으로 인해 친자 관계 가능성이 더 높은 먼 후보자들의 가능성을 허용했습니다. 따라서 분산 거리 의 확률 은 다음과 같습니다.d

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

여기서 는 GND로부터의 분산 거리 확률이고, N은 후보의 수이며, ( )는 GND가 분산에 얼마나 많은 기여를하는지 결정합니다.Pr(d|a,b)c0<c<1

따라서 계산 부담을 증가시키는 두 가지 추가 고려 사항이 있습니다.

  1. 분산 거리는 알려져 있지 않지만 매번 반복 할 때마다 유추되어야합니다 .이를 위해 G 를 생성 하는 것은 비용이 많이 듭니다.
  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 명의 자손을 시뮬레이션합니다. 또한 자손의 어머니와 후보 아버지 사이의 거리 목록과 더미 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에 대한 이전 또는 Metropolis-Hastings 알고리즘의 제안서 배포를 찾고 있습니까? 두 용어를 서로 바꿔서 사용하는 것 같습니다.
Robin Ryder

당신이 맞습니다-명확하지 않은 것에 대해 죄송합니다. MH의 제안서 배포에 가장 관심이 있습니다. 이에 따라 이전에 언급 한 제목을 변경했습니다.
tellis

종래의 평면 또는 제프리스에서 즉, 또는 I는 가변적 변화 믿고 폐쇄 생산 -form 조건부 . π ( a ) 1 π ( a ) 1 / a α = a b π ( a | b , 데이터 )aπ(a)1π(a)1/aα=abπ(a|b,data)
시안


Metropolis-Hastings를보다 효율적으로 운영하는 데 도움이되는 사전 설정에 관심이 있는지 확실하지 않습니다.
Xi'an

답변:


2

Markov Chain Monte Carlo (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

@tell은 '분산 거리'와 '부모 유추'라는 용어를 실제로 이해하지 못합니다. 데이터 세트 또는 그 일부를 추가하여보다 구체적인 정보를 제공 할 수 있습니다. 그렇게하는 동안 '다른 매개 변수'에 대해 더 많이 말할 수 있습니다. 그래서, 데이터 당신이이다 않는 가?
Sextus Empiricus

1
시뮬레이션 데이터를 사용하여 예제를 추가했습니다.
tellis

0

나는 당신이 모델을 어떻게 설정하고 있는지 잘 모르겠습니다. 특히, 주어진 씨앗에 대해, 가능한 꽃가루 분산 거리는 유한 한 세트이므로 귀하의 "분산 확률"은 " 분산 률 "(가상 아버지에 대한 확률을 합산하여 정규화해야 함). 따라서 매개 변수에는 예상 한 의미 (예 : 그럴듯한 값)가 없을 수 있습니다.

나는 과거에 비슷한 문제 몇 가지를 연구 해 왔기 때문에 가능한 접근법 / 중요한 모습을 제안하는 방법으로 이해의 격차를 메우려 고 노력할 것입니다. 원래 질문의 요점을 완전히 놓치면 사과드립니다. 아래의 처리는 기본적으로 이러한 종류의 모델에 대한 더 나은 논문 중 하나 인 Hadfield et al (2006)을 따릅니다 .

개별 대한 유전자좌 의 유전자형을 나타내도록 하자 . 알려진 어머니 및 추정 아버지 자손 의 경우 관찰 된 자손 유전자형의 확률을 -가장 간단한 경우에 이것은 단순히 Mendelian 상속 확률의 곱이지만 좀 더 복잡한 경우에는 일부 유전자형 오류 모델 또는 부모의 유전자형이 누락 될 수 있으므로 성가신 매개 변수를 포함합니다. ) .Xl,klkimif

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

하자 자손의 꽃가루 비산 거리가 될 , 그리고하자 알려진 어머니 사이의 거리 및 추정 아버지 , 및하자 는 분산 속도 (예 : 질문에서 일반화 된 일반 및 균일 한 pdf의 가중치 조합)입니다. 분산 속도를 확률로 표현하려면 wrt를 유한 상태 공간으로 정규화하십시오 : 연구 영역의 추정 유한 아버지 수에 의해 유발 될 수있는 가능한 분산 거리의 집합은 δiidmi,fmifDi,f=q(dmi,f|a,b,c)

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

하자 아버지의 씨앗 할당 될 입니다, 공장의 경우 자손의 아버지 . 친자 관계 할당 이전에 유니폼을 가정하면 말해서, 다른 매개 변수와 조건에서 유전자형, 아버지의 할당은 상기 지지체 (조상 가능)에 걸쳐 적분함으로써 규격화 유한 지원을 갖는 개별 RV이다.PiiPi=ffi

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

따라서이 문제에 대한 간단한 샘플러를 작성하는 합리적인 방법은 Gibbs 내 Metropolis입니다.

  1. 에 조건부 로 모든 대한 친자 관계 할당 를 업데이트하십시오 . 이것은 유한 지원을 가진 이산 rv이므로 정확한 샘플을 쉽게 그릴 수 있습니다.{a,b,c,θ}Pii
  2. 조건부 갱신 대도시 - 스팅 업데이트로한다. 목표를 형성하려면 위 방정식 의 값만 업데이트하면되므로 비용이 많이 들지 않습니다.{Pi,θ}a,b,cD
  3. 조건부 , 업데이트 MH 업데이트와. 대상을 형성하려면 값을 업데이트해야하는데 비용이 많이 들지만 는 그렇지 않습니다.{Pi,a,b,c}θGD

표본 추출 비용을 줄이기 위해 3 단계 전에 1-2 단계를 여러 번 수행 할 수 있습니다. 2-3 단계에서 제안서 분포를 조정하려면 예비 실행의 표본을 에 대한 공동 후방 분포의 공분산을 추정합니다 . 그런 다음 다변량 가우스 제안 내에서이 공분산 추정값을 사용하십시오. 이것이 가장 효율적인 방법은 아니지만 구현하기 쉽습니다.{a,b,c}{a,b,c,θ}

자,이 계획은 당신이 이미하고있는 것에 가깝습니다 (질문에서 친자 관계를 어떻게 모델링하고 있는지 말할 수 없습니다). 그러나 계산상의 문제를 넘어서서, 더 큰 요점은 매개 변수 가 분산 거리를 의미하는 것으로 생각하는 의미를 가질 수 없다는 것입니다. 이것은 위에서 설명한 친자 관계 모델 의 맥락 에서 는 분자와 분모 모두에 들어갑니다 (정규화). 따라서 식물의 공간 배열은 값이 높은 가능성 또는 사후 확률 을 갖는 잠재적으로 강한 영향을 미칩니다 . 이것은 식물의 공간 분포가 고르지 않을 때 특히 그렇습니다.a,b,cPr(Pi|), B , C , B , Ca,b,ca,b,c

마지막으로, 위의 링크 된 Hadfield 용지와 함께 제공되는 R 패키지 ( "MasterBayes")를 살펴보십시오 (아직없는 경우). 적어도 아이디어를 제공 할 수 있습니다.


나의 접근 방식은 실제로 Hadfield의 두 가지 주요 변경 사항으로 모델링되었습니다. (1) 어머니의 씨앗은 완전한 형제이므로 독립적이지 않습니다. 따라서 문제는 함께 분산, 친자 관계, 박쥐 또한 공동 조직 구조를 유추하는 것 중 하나입니다. (2) 나는 아버지가 탐구 할 수있는 넓은 공간이 있기 때문에, 친자 할당을 순차적으로 업데이트하는 대신, 친자 관계 가능성에 비례하여 모든 후보를 동시에 고려하기 위해 부분 친자 관계를 사용하고있다.
tellis

FAPS 패키지를 사용하여 이러한 작업을 수행하고 있습니다.
tellis

내 질문은 본질적으로 당신의 요점 2를위한 효율적인 제안 배포에 대해 묻고 있습니다. 나머지 답변은 G와 D의 제품 공식화를 포함하여 이미 수행 한 것에 매우 가까운 것을 설명합니다 (그러나 이것 덕분에-저는 내가 올바르게했는지 확실하지 않으므로 두 번째 눈 쌍이 동의한다는 것을 아는 것이 좋습니다!).
tellis

미리 준비된 솔루션 wrt 제안 배포가 없습니다. 죄송합니다. 그러나 몇 가지 관찰 결과가 있습니다. (1) 1-2 단계는 매우 저렴하며 3 단계로 이동하기 전에 적은 비용으로 여러 번 반복 할 수 있습니다. 2 단계의 뻔뻔한 제안에도 불구하고 많은 반복은 " 의 상태 공간에서 크게 움직 입니다. a,b,c
네이트 교황

(2) 2 단계의 조건부 분포는 3 차원입니다. 에서처럼 : 시각화하기 쉽습니다. 의 표준화되지 않은 목표 는 고정 대한 친자 관계 할당의 MAP 추정치와 비슷 합니까? 서로 다른 패터 니티에 걸쳐 비정규 화 된 대상을 시각화하면 다중 모달인지, 영역이 평평한 지 등을 알 수 있습니다.Ga,b,cG
Nate Pope
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.