Distribusi proposal untuk distribusi normal umum

10

Saya memodelkan penyebaran tanaman menggunakan distribusi normal umum ( entri wikipedia ), yang memiliki fungsi kerapatan probabilitas:

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

di mana adalah jarak yang ditempuh, adalah parameter skala, dan adalah parameter bentuk. Berarti jarak yang ditempuh diberikan oleh standar deviasi dari distribusi ini:dab

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

Ini nyaman karena memungkinkan untuk bentuk eksponensial ketika , bentuk Gaussian ketika , dan untuk distribusi leptokurtik ketika . Distribusi ini muncul secara teratur dalam literatur penyebaran tanaman, meskipun secara umum jarang, dan karenanya sulit untuk menemukan informasi.b=1b=2b<1

Parameter yang paling menarik adalah dan jarak penyebaran rata-rata.b

Saya mencoba memperkirakan dan menggunakan MCMC, tetapi saya berjuang untuk menemukan cara yang efisien untuk sampel nilai proposal. Sejauh ini, saya telah menggunakan Metropolis-Hastings, dan diambil dari distribusi seragam dan , dan saya mendapatkan jarak penyebaran rata-rata posterior sekitar 200-400 meter, yang memang masuk akal secara biologis. Namun, konvergensi sangat lambat, dan saya tidak yakin sedang mengeksplorasi ruang parameter penuh.ab0<a<4000<b<3

Sulit untuk menghasilkan distribusi proposal yang lebih baik untuk dan , karena mereka bergantung satu sama lain, tanpa memiliki banyak makna sendiri. Jarak dispersal rata-rata memang memiliki arti biologis yang jelas, tetapi jarak dispersal rata-rata yang diberikan dapat dijelaskan oleh banyak kombinasi dan . Dengan demikian dan berkorelasi di posterior.ababab

Sejauh ini saya telah menggunakan Metropolis Hastings, tetapi saya terbuka untuk algoritma lain yang akan bekerja di sini.

Pertanyaan: Adakah yang bisa menyarankan cara yang lebih efisien untuk menggambar nilai proposal untuk dan ?ab

Sunting: Informasi tambahan tentang sistem: Saya sedang mempelajari populasi tanaman di sepanjang lembah. Tujuannya adalah untuk menentukan distribusi jarak yang ditempuh antara serbuk sari antara tanaman donor dan tanaman yang diserbuki. Data yang saya miliki adalah:

  1. Lokasi dan DNA untuk setiap donor serbuk sari
  2. Benih dikumpulkan dari sampel 60 tanaman ibu (yaitu penerima serbuk sari) yang telah tumbuh dan genotipe.
  3. Lokasi dan DNA untuk setiap tanaman ibu.

Saya tidak tahu identitas tanaman donor, tetapi ini dapat disimpulkan dari data genetik dengan menentukan donor mana yang merupakan ayah dari setiap bibit. Katakanlah informasi ini terkandung dalam matriks probabilitas G dengan baris untuk setiap keturunan dan kolom untuk setiap kandidat donor, yang memberikan probabilitas setiap kandidat menjadi bapak dari masing-masing keturunan berdasarkan data genetik saja. G membutuhkan waktu sekitar 3 detik untuk menghitung, dan perlu dihitung ulang di setiap iterasi, yang memperlambat banyak hal.

Karena kami umumnya mengharapkan calon donor yang lebih dekat lebih cenderung menjadi ayah, kesimpulan ayah lebih akurat jika Anda bersama-sama menyimpulkan ayah dan penyebaran. Matriks D memiliki dimensi yang sama dengan G , dan berisi probabilitas ayah berdasarkan hanya fungsi jarak antara ibu dan kandidat dan beberapa vektor parameter. Mengalikan elemen dalam D dan G memberikan probabilitas gabungan ayah yang diberikan data genetik dan spasial. Produk dari nilai yang dikalikan memberikan kemungkinan model penyebaran.

Seperti dijelaskan di atas, saya telah menggunakan GND untuk memodelkan penyebaran. Sebenarnya saya benar-benar menggunakan campuran GND dan distribusi seragam untuk memungkinkan kemungkinan calon yang sangat jauh memiliki kemungkinan ayah yang lebih tinggi karena kebetulan saja (genetika berantakan) yang akan menggembungkan ekor nyata GND jika diabaikan. Jadi probabilitas jarak dispersal adalah:d

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

di mana adalah probabilitas jarak penyebaran dari GND, N adalah jumlah kandidat, dan ( ) menentukan berapa banyak kontribusi yang dibuat oleh GND terhadap penyebaran.Pr(d|a,b)c0<c<1

Oleh karena itu ada dua pertimbangan tambahan yang meningkatkan beban komputasi:

  1. Jarak dispersi tidak diketahui tetapi harus disimpulkan pada setiap iterasi, dan membuat G untuk melakukan ini mahal.
  2. Ada parameter ketiga, , untuk diintegrasikan.c

Untuk alasan ini, bagi saya agak terlalu rumit untuk melakukan interpolasi grid, tetapi saya senang diyakinkan sebaliknya.

Contoh

Ini adalah contoh sederhana dari kode python yang saya gunakan. Saya telah menyederhanakan estimasi ayah dari data genetik, karena ini akan melibatkan banyak kode tambahan, dan menggantinya dengan matriks nilai antara 0 dan 1.

Pertama, tentukan fungsi untuk menghitung 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

Selanjutnya, simulasikan 2000 kandidat, dan 800 keturunan. Juga mensimulasikan daftar jarak antara ibu dari keturunan dan calon ayah, dan matriks G dummy .

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]

Tetapkan nilai parameter awal:

# 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

Perbarui a, b, dan c pada gilirannya, dan hitung rasio 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
Tellis
sumber
2
Apakah Anda mencari prior pada a dan b, atau untuk distribusi proposal dalam algoritma Metropolis-Hastings? Anda tampaknya menggunakan kedua istilah secara bergantian.
Robin Ryder
Anda benar - maaf karena tidak jelas. Saya paling tertarik dengan distribusi proposal untuk MH. Saya telah mengubah judul di mana saya menyebutkan prior.
Tellis
Di bawah datar atau Jeffreys sebelumnya pada , yaitu, atau Saya percaya bahwa perubahan variabel untuk menghasilkan tertutup -form bentuk . π ( a ) 1 π ( a ) 1 / a α = a - b π ( a | b , data )aπ(a)1π(a)1/aα=abπ(a|b,data)
Xi'an
Masih belum jelas apakah Anda tertarik untuk menetapkan prior atau tidak yang membantu atau menjalankan Metropolis-Hastings secara lebih efisien.
Xi'an

Jawaban:

2

Anda tidak perlu menggunakan metode Markov Chain Monte Carlo (MCMC).

Jika Anda menggunakan distribusi sebelumnya yang seragam maka Anda melakukan sesuatu yang sangat mirip dengan estimasi kemungkinan maksimum pada ruang terbatas untuk parameter dan .ab

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

di mana adalah konstanta (independen dari dan ) dan dapat ditemukan dengan menskalakan fungsi kemungkinan sedemikian rupa sehingga terintegrasi ke 1.P(a,b)P(d)ab

Fungsi log likelihood, untuk iid variabel adalah:ndiGN(0,a,b)

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

Untuk fungsi ini seharusnya tidak terlalu sulit untuk merencanakannya dan menemukan yang maksimal.

Sextus Empiricus
sumber
Interpolasi sandang ini akan bekerja untuk dua parameter dan mengamati jarak, dan mungkin akhirnya saya lakukan. Saya sebenarnya melakukan estimasi bersama jarak dispersal dan inferensi ayah, yang melibatkan setidaknya satu parameter lain untuk diintegrasikan, dan istilah kemungkinan ekstra yang sangat lambat (~ 3 detik per iterasi) yang benar-benar memperlambat rantai. Saya pikir saya akan membutuhkan sekitar 10 kali lipat lebih banyak iterasi daripada yang saya gunakan saat ini untuk rantai markov.
Tellis
@Tellis istilah-istilah 'jarak dispersi' dan 'inferensi ayah' Saya tidak begitu mengerti. Mungkin Anda bisa memberikan informasi yang lebih konkret dengan menambahkan set data atau sepotong. Saat melakukan itu Anda mungkin juga berbicara lebih banyak tentang 'satu parameter lain'. Jadi, apa data yang itu yang Anda lakukan memiliki?
Sextus Empiricus
1
Saya telah menambahkan contoh menggunakan data simulasi.
Tellis
0

Saya tidak begitu mengerti bagaimana Anda membuat model: khususnya, bagi saya tampaknya untuk benih tertentu, jarak dispersi serbuk sari yang mungkin adalah himpunan yang terbatas, dan dengan demikian "probabilitas penyebaran" Anda mungkin lebih baik disebut sebagai " laju penyebaran "(karena perlu dinormalisasi dengan menjumlahkan ayah yang diduga sebagai suatu probabilitas). Dengan demikian parameter mungkin tidak cukup memiliki makna (seperti dalam, nilai yang masuk akal) yang Anda harapkan.

Saya telah bekerja pada beberapa masalah yang sama di masa lalu dan jadi saya akan mencoba mengisi kekosongan dalam pemahaman saya, sebagai cara untuk menyarankan pendekatan yang mungkin / tampilan kritis. Mohon maaf jika saya benar-benar kehilangan poin pertanyaan awal Anda. Perawatan di bawah ini pada dasarnya mengikuti Hadfield et al (2006) , salah satu makalah yang lebih baik tentang model semacam ini.

Biarkan menunjukkan genotipe di lokus untuk beberapa individu . Untuk keturunan dengan ibu yang dikenal dan ayah diduga , biarkan probabilitas genotipe keturunan yang diamati adalah - dalam kasus paling sederhana ini hanyalah produk dari probabilitas pewarisan Mendel, tetapi dalam kasus yang lebih rumit dapat mencakup beberapa model kesalahan genotip atau genotip orang tua yang hilang, jadi saya memasukkan parameter gangguan (s ) .Xl,klkimif

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

Biarkan menjadi jarak dispersi serbuk sari untuk keturunan , dan biarkan menjadi jarak antara ibu yang dikenal dan ayah diduga , dan biarkan menjadi laju penyebaran (mis. kombinasi pdf umum normal dan seragam yang umum seperti dalam pertanyaan Anda). Untuk menyatakan laju penyebaran sebagai suatu probabilitas, normalkan wrt ke ruang keadaan hingga: kumpulan (terbatas) dari kemungkinan jarak penyebaran yang disebabkan oleh jumlah ayah terbatas (terbatas) di daerah studi Anda, sehingga δiidmi,fmifDi,f=q(dmi,f|a,b,c)

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

Biarkan menjadi tugas ayah dari benih , yaitu jika tanaman adalah ayah dari keturunan . Dengan asumsi seragam sebelum penugasan ayah, Dengan kata lain, tergantung pada parameter dan genotipe lain, penugasan ayah adalah rv diskrit dengan dukungan terbatas, yang dinormalisasi dengan mengintegrasikan lintas dukungan tersebut (kemungkinan ayah).PiiPi=ffi

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

Jadi cara yang masuk akal untuk menulis sampler sederhana untuk masalah ini adalah Metropolis-dalam-Gibbs:

  1. Bersyarat pada , perbarui tugas ayah untuk semua . Ini adalah rv diskrit dengan dukungan terbatas sehingga Anda dapat dengan mudah menggambar sampel yang tepat{a,b,c,θ}Pii
  2. Bersyarat pada , perbarui dengan pembaruan Metropolis-Hastings. Untuk membentuk target, hanya nilai dalam persamaan di atas yang perlu diperbarui, jadi ini tidak mahal{Pi,θ}a,b,cD
  3. Bersyarat pada , perbarui dengan pembaruan MH. Untuk membentuk target, nilai-nilai perlu diperbarui, yang mahal, tetapi tidak.{Pi,a,b,c}θGD

Untuk mengurangi biaya pengambilan sampel , Anda dapat melakukan langkah 1-2 beberapa kali sebelum 3. Untuk menyetel distribusi proposal dalam langkah 2-3, Anda dapat menggunakan sampel dari proses awal hingga memperkirakan kovarians dari distribusi posterior bersama untuk . Kemudian gunakan estimasi kovarian ini dalam proposal Gaussian multivarian. Saya yakin ini bukan pendekatan yang paling efisien, tetapi mudah diterapkan.{a,b,c}{a,b,c,θ}

Sekarang, skema ini mungkin dekat dengan apa yang sudah Anda lakukan (saya tidak tahu bagaimana Anda memodelkan ayah dari pertanyaan Anda). Tetapi di luar masalah komputasi, poin saya yang lebih besar adalah bahwa parameter mungkin tidak memiliki arti yang Anda pikir mereka lakukan, sehubungan dengan jarak dispersi rata-rata. Ini karena, dalam konteks model paternitas saya jelaskan di atas, masukkan ke dalam pembilang dan penyebut (konstanta penormalan): dengan demikian, pengaturan spasial tanaman akan memiliki efek kuat yang berpotensi pada nilai memiliki kemungkinan tinggi atau probabilitas posterior. Ini terutama benar ketika distribusi spasial tanaman tidak merata.a,b,cPr(Pi|)a,b,ca , b , ca,b,c

Akhirnya, saya sarankan Anda melihat kertas Hadfield yang terhubung ke atas dan paket R yang menyertainya ("MasterBayes"), jika Anda belum melakukannya. Setidaknya itu dapat memberikan ide.

Nate Pope
sumber
Pendekatan saya memang dimodelkan dengan Hadfield, dengan dua perubahan besar: (1) benih dari seorang ibu mungkin saudara kandung penuh, dan karena itu tidak mandiri. Masalahnya adalah karena salah satu dari bersama-sama menyimpulkan struktur dispersal, ayah, kelelawar juga saudara. (2) Saya menggunakan pendekatan ayah fraksional untuk mempertimbangkan semua kandidat secara simultan sebanding dengan kemungkinan ayah mereka, daripada memperbarui tugas ayah secara berurutan, karena ada ruang besar yang memungkinkan ayah untuk mengeksplorasi.
Tellis
Saya menggunakan paket FAPS untuk melakukan hal-hal itu.
Tellis
Pertanyaan saya pada dasarnya adalah menanyakan tentang pendistribusian proposal yang efisien untuk melakukan poin Anda 2. Sisa jawaban Anda menggambarkan sesuatu yang sangat dekat dengan apa yang telah saya lakukan, termasuk perumusan produk G dan D (tapi terima kasih untuk ini - saya tidak yakin saya telah melakukannya dengan benar, jadi sangat berguna untuk mengetahui bahwa kedua mata setuju!).
Tellis
Saya tidak punya solusi kaleng, distribusi proposal, maaf. Tetapi saya memiliki beberapa pengamatan: (1) Langkah 1-2 sangat murah, dan dapat diulangi berkali-kali dengan sedikit biaya sebelum pindah ke langkah 3. Bahkan dengan proposal yang jelek di langkah 2, banyak iterasi harus cukup untuk " membuat gerakan besar "dalam ruang keadaan . a,b,c
Nate Pope
(2) Distribusi bersyarat pada langkah 2 adalah 3 dimensi. Seperti dalam: mudah divisualisasikan. Seperti apa target tidak dinormalisasi pada perkiraan MAP dari penugasan ayah untuk tetap ? Memvisualisasikan target yang tidak dinormalisasi di berbagai paternities harus memberi Anda rasa jika itu multimodal, datar di daerah, dll.Ga,b,cG
Nate Pope