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


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 초가 걸리며 반복 할 때마다 다시 계산해야하므로 속도가 상당히 느려집니다.

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

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

cPr(d|a,b)+(1−c)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α=a−bπ(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

변수 대한 로그 우도 함수 는 다음과 같습니다.ndi∼GN(0,a,b)

log⁡L(a,b;d)=−nlog⁡(2a)−nlog⁡(Γ(1/b)b)−1ab∑i=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,f∑kDi,k

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

Pr(Pi=f|a,b,c,θ,X)=Gi,fD~i,f∑kGi,kD~i,k=Gi,fDi,f∑kGi,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.