Angebotsverteilung für eine verallgemeinerte Normalverteilung

10

Ich modelliere die Ausbreitung von Pflanzen mithilfe einer verallgemeinerten Normalverteilung ( Wikipedia-Eintrag ), die die Wahrscheinlichkeitsdichtefunktion hat:

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

Dabei ist die zurückgelegte Strecke, ein Skalierungsparameter und der Formparameter. Die mittlere zurückgelegte Strecke ergibt sich aus der Standardabweichung dieser Verteilung:dab

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

Dies ist praktisch, da es eine Exponentialform bei , eine Gaußsche Form bei und eine leptokurtische Verteilung bei . Diese Verteilung taucht regelmäßig in der Literatur zur Pflanzenverbreitung auf, obwohl sie im Allgemeinen ziemlich selten ist und daher schwer zu finden ist.b=1b=2b<1

Die interessantesten Parameter sind und die mittlere Ausbreitungsentfernung.b

Ich versuche, und mithilfe von MCMC zu schätzen , habe jedoch Schwierigkeiten, eine effiziente Methode zum Abtasten von Angebotswerten zu finden. Bisher habe ich Metropolis-Hastings verwendet und aus gleichmäßigen Verteilungen und , und ich erhalte hintere mittlere Ausbreitungsentfernungen von etwa 200 bis 400 Metern, was biologisch sinnvoll ist. Die Konvergenz ist jedoch sehr langsam, und ich bin nicht davon überzeugt, dass sie den gesamten Parameterraum untersucht.ab0<a<4000<b<3

Es ist schwierig, eine bessere Angebotsverteilung für und , da sie voneinander abhängig sind, ohne selbst viel Bedeutung zu haben. Die mittlere Ausbreitungsentfernung hat eine klare biologische Bedeutung, aber eine gegebene mittlere Ausbreitungsentfernung könnte durch unendlich viele Kombinationen von und . Als solche sind und im posterioren Bereich korreliert.abb a babab

Bisher habe ich Metropolis Hastings verwendet, aber ich bin offen für jeden anderen Algorithmus, der hier funktionieren würde.

Frage: Kann jemand einen effizienteren Weg vorschlagen, um Vorschlagswerte für und zu zeichnen ?ab

Bearbeiten: Zusätzliche Informationen zum System: Ich untersuche eine Pflanzenpopulation entlang eines Tals. Ziel ist es, die Verteilung der Entfernungen zwischen Pollen zwischen Spenderpflanzen und den Pflanzen, die sie bestäuben, zu bestimmen. Die Daten, die ich habe, sind:

  1. Der Ort und die DNA für jeden möglichen Pollenspender
  2. Samen, die aus einer Probe von 60 Mutterpflanzen (dh Pollenempfängern) entnommen wurden, die gezüchtet und genotypisiert wurden.
  3. Der Ort und die DNA für jede mütterliche Pflanze.

Ich kenne die Identität der Spenderpflanzen nicht, aber dies kann aus den genetischen Daten abgeleitet werden, indem bestimmt wird, welche Spender die Väter jedes Sämlings sind. Angenommen, diese Informationen sind in einer Wahrscheinlichkeitsmatrix G mit einer Zeile für jeden Nachwuchs und einer Spalte für jeden Spenderkandidaten enthalten, die die Wahrscheinlichkeit angibt, dass jeder Kandidat der Vater jedes Nachwuchses ist, nur basierend auf genetischen Daten. Die Berechnung von G dauert ungefähr 3 Sekunden und muss bei jeder Iteration neu berechnet werden, was die Dinge erheblich verlangsamt.

Da wir im Allgemeinen davon ausgehen, dass engere Spenderkandidaten eher Väter sind, ist die Schlussfolgerung der Vaterschaft genauer, wenn Sie gemeinsam auf Vaterschaft und Streuung schließen. Matrix D hat die gleichen Dimensionen wie G und enthält Vaterschaftswahrscheinlichkeiten, die nur auf einer Funktion der Abstände zwischen Mutter und Kandidat und einigen Parametervektoren beruhen. Die Multiplikation von Elementen in D und G ergibt die gemeinsame Wahrscheinlichkeit einer Vaterschaft bei genetischen und räumlichen Daten. Das Produkt multiplizierter Werte gibt die Wahrscheinlichkeit eines Ausbreitungsmodells an.

Wie oben beschrieben, habe ich die GND verwendet, um die Ausbreitung zu modellieren. Tatsächlich habe ich eine Mischung aus einer GND und einer gleichmäßigen Verteilung verwendet, um die Möglichkeit zu ermöglichen, dass sehr weit entfernte Kandidaten eine höhere Wahrscheinlichkeit der Vaterschaft haben, allein aufgrund des Zufalls (die Genetik ist chaotisch), was den scheinbaren Schwanz der GND aufblasen würde, wenn sie ignoriert würden. Die Wahrscheinlichkeit der Ausbreitungsentfernung ist also:d

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

Dabei ist die Wahrscheinlichkeit der Ausbreitungsentfernung von der GND, N die Anzahl der Kandidaten und ( ) bestimmt, wie viel Beitrag die GND zur Ausbreitung leistet.Pr(d|a,b)c0<c<1

Es gibt daher zwei zusätzliche Überlegungen, die den Rechenaufwand erhöhen:

  1. Die Ausbreitungsentfernung ist nicht bekannt, muss jedoch bei jeder Iteration abgeleitet werden, und das Erstellen von G , um dies zu tun, ist teuer.
  2. Es gibt einen dritten Parameter, , über den integriert werden soll.c

Aus diesen Gründen schien es mir etwas zu komplex, um eine Gitterinterpolation durchzuführen, aber ich bin froh, davon überzeugt zu sein.

Beispiel

Hier ist ein vereinfachtes Beispiel für den von mir verwendeten Python-Code. Ich habe die Schätzung der Vaterschaft anhand genetischer Daten vereinfacht, da dies viel zusätzlichen Code beinhalten würde, und ihn durch eine Wertematrix zwischen 0 und 1 ersetzt.

Definieren Sie zunächst Funktionen zur Berechnung des 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

Als nächstes simulieren Sie 2000 Kandidaten und 800 Nachkommen. Simulieren Sie auch eine Liste der Abstände zwischen den Müttern der Nachkommen und den Kandidatenvätern sowie eine Dummy- G- Matrix.

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]

Anfängliche Parameterwerte einstellen:

# 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

Aktualisieren Sie nacheinander a, b und c und berechnen Sie das Metropolis-Verhältnis.

# 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
quelle
2
Suchen Sie nach einem Prior für a und b oder nach einer Angebotsverteilung in einem Metropolis-Hastings-Algorithmus? Sie scheinen beide Begriffe synonym verwendet zu haben.
Robin Ryder
Sie haben Recht - entschuldigen Sie, dass Sie nicht klar sind. Ich bin am meisten an einer Angebotsverteilung für MH interessiert. Ich habe den Titel, in dem ich die Prioritäten erwähnt habe, entsprechend geändert.
Tellis
Unter einer Wohnung oder Jeffreys vor , dh oder glaube ich, dass eine Änderung der Variablen in eine geschlossene erzeugt -Form bedingt . aπ(a)1π(a)1/aα=abπ(a|b,data)
Xi'an
Es bleibt ziemlich unklar, ob Sie daran interessiert sind, einen Prior festzulegen, der hilft, oder Metropolis-Hastings effizienter zu betreiben.
Xi'an

Antworten:

2

Sie müssen die Markov Chain Monte Carlo (MCMC) -Methode nicht verwenden.

Wenn Sie einheitliche vorherige Verteilungen verwenden, führen Sie eine sehr ähnliche Schätzung der maximalen Wahrscheinlichkeit auf einem begrenzten Raum für die Parameter und .ab

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

Dabei ist eine Konstante (unabhängig von und ) und kann durch Skalieren der Wahrscheinlichkeitsfunktion so gefunden werden, dass sie auf 1 integriert wird.P(a,b)P(d)ab

Die Log-Likelihood-Funktion für iid-Variablen lautet:ndiGN(0,a,b)

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

Für diese Funktion sollte es nicht zu schwierig sein, sie zu zeichnen und ein Maximum zu finden.

Sextus Empiricus
quelle
Diese Gurtinterpolation würde für zwei Parameter und beobachtete Entfernungen funktionieren und könnte das sein, was ich am Ende mache. Tatsächlich mache ich eine gemeinsame Schätzung der Ausbreitungsentfernung und der Vaterschaftsinferenz, die mindestens einen weiteren zu integrierenden Parameter umfasst, und einen zusätzlichen Wahrscheinlichkeitsausdruck, der sehr langsam ist (~ 3 Sekunden pro Iteration) und die Kette wirklich verlangsamt. Ich denke, ich würde ungefähr 10-fach mehr Iterationen benötigen, als ich derzeit für die Markov-Kette verwendet habe.
Tellis
@tellis diese Begriffe "Ausbreitungsentfernung" und "Vaterschaftsschluss" verstehe ich nicht wirklich. Vielleicht könnten Sie konkretere Informationen bereitstellen, indem Sie einen Datensatz oder einen Teil davon hinzufügen. Dabei können Sie genauso gut mehr über den 'einen anderen Parameter' sprechen. Welche Daten haben Sie also ?
Sextus Empiricus
1
Ich habe ein Beispiel mit simulierten Daten hinzugefügt.
Tellis
0

Ich verstehe nicht ganz, wie Sie das Modell aufbauen: Insbesondere scheint es mir, dass für einen bestimmten Samen die möglichen Pollenausbreitungsentfernungen eine endliche Menge sind und Ihre "Ausbreitungswahrscheinlichkeit" daher besser als " Ausbreitungsrate "(da sie durch Summieren über mutmaßliche Väter normalisiert werden müsste, um eine Wahrscheinlichkeit zu sein). Daher haben die Parameter möglicherweise nicht ganz die Bedeutung (wie in plausiblen Werten), die Sie erwarten.

Ich habe in der Vergangenheit an einigen ähnlichen Problemen gearbeitet und werde daher versuchen, die Lücken in meinem Verständnis zu schließen, um einen möglichen Ansatz / einen kritischen Blick vorzuschlagen. Entschuldigung, wenn ich den Punkt Ihrer ursprünglichen Frage völlig verpasse. Die folgende Behandlung folgt im Wesentlichen Hadfield et al. (2006) , einem der besseren Artikel über diese Art von Modell.

Lassen des Genotyps an locus bezeichnen für einzelne . Für Nachkommen mit bekannter Mutter und mutmaßlichem Vater sei die Wahrscheinlichkeit der beobachteten Nachkommengenotypen - im einfachsten Fall ist dies einfach ein Produkt der Mendelschen Vererbungswahrscheinlichkeiten, aber in komplizierteren Fällen kann ein Modell für Genotypisierungsfehler oder fehlende elterliche Genotypen enthalten sein, daher füge ich Störparameter hinzu ) .Xl,klkimif

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

Sei der Pollenverteilungsabstand für die Nachkommen und sei der Abstand zwischen der bekannten Mutter und dem mutmaßlichen Vater und sei ist die Ausbreitungsrate (z. B. eine gewichtete Kombination von verallgemeinerten normalen und einheitlichen PDFs wie in Ihrer Frage). Um die Ausbreitungsrate als Wahrscheinlichkeit auszudrücken, normalisieren Sie wrt auf den endlichen Zustandsraum: die (endliche) Menge möglicher Ausbreitungsentfernungen, die durch die (endliche) Anzahl mutmaßlicher Väter in Ihrem Untersuchungsgebiet induziert werden, so dass δiidmi,fmifDi,f=q(dmi,f|a,b,c)

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

Sei die väterliche Zuordnung von Samen , wenn Pflanze der Vater der Nachkommen . Unter der Annahme einer Uniform vor Vaterschaftszuweisungen ist Mit anderen Worten, abhängig von anderen Parametern und Genotypen ist die väterliche Zuordnung ein diskreter RV mit endlicher Unterstützung, der durch Integration über diese Unterstützung (mögliche Väter) normalisiert wird.PiiPi=ffi

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

Eine vernünftige Möglichkeit, einen einfachen Sampler für dieses Problem zu schreiben, ist Metropolis-in-Gibbs:

  1. Unter der Bedingung, dass Vaterschaftszuweisungen für alle aktualisieren . Dies ist ein diskretes Wohnmobil mit endlicher Unterstützung, sodass Sie leicht eine exakte Probe zeichnen können{a,b,c,θ}Pii
  2. Unter der Bedingung aktualisieren Sie mit einem Metropolis-Hastings-Update. Um das Ziel zu bilden, müssen nur die Werte in den obigen Gleichungen aktualisiert werden, sodass dies nicht kostspielig ist{Pi,θ}a,b,cD
  3. Conditional auf , update mit einem MH - Update. Um das Ziel zu bilden, müssen die Werte aktualisiert werden, was kostspielig ist, die Werte jedoch nicht.{Pi,a,b,c}θGD

Um die Kosten für das Zeichnen von Mustern von zu senken , können Sie die Schritte 1-2 vor 3 mehrmals ausführen. Um die Angebotsverteilungen in den Schritten 2-3 zu optimieren, können Sie Muster aus einem Vorlauf bis verwenden Schätzen Sie die Kovarianz der posterioren Gelenkverteilung für . Verwenden Sie dann diese Kovarianzschätzung in einem multivariaten Gaußschen Vorschlag. Ich bin sicher, dass dies nicht der effizienteste Ansatz ist, aber er ist einfach zu implementieren.{a,b,c}{a,b,c,θ}

Nun, dieses Schema könnte nahe an dem liegen, was Sie bereits tun (ich kann anhand Ihrer Frage nicht sagen, wie Sie die Vaterschaft modellieren). Abgesehen von rechnerischen Bedenken ist mein größerer Punkt, dass die Parameter möglicherweise nicht die Bedeutung haben, von der Sie glauben, dass sie sie in Bezug auf die mittlere Ausbreitungsentfernung haben. Dies liegt daran , dass im Rahmen des Vaterschaftsmodell I oben beschrieben ist , zeigen sowohl treten in Zähler und Nenner (Normierungskonstante): so die räumliche Anordnung der Pflanzen einen potenziell starken Einfluss darauf haben, welche Werte von eine hohe Wahrscheinlichkeit oder eine hintere Wahrscheinlichkeit haben. Dies gilt insbesondere dann, wenn die räumliche Verteilung der Pflanzen ungleichmäßig ist.a,b,cPr(Pi|)a,b,ca , b , ca,b,c

Schließlich schlage ich vor, dass Sie sich das oben verlinkte Hadfield-Papier und das zugehörige R-Paket ("MasterBayes") ansehen, falls Sie dies noch nicht getan haben. Zumindest kann es Ideen liefern.

Nate Papst
quelle
Mein Ansatz orientiert sich in der Tat an Hadfields, mit zwei wesentlichen Änderungen: (1) Samen einer Mutter können Vollgeschwister sein und sind daher nicht unabhängig. Das Problem besteht daher darin, gemeinsam auf Streuung, Vaterschaft und auch die Struktur der Geschwister zu schließen. (2) Ich verwende einen fraktionierten Vaterschaftsansatz, um alle Kandidaten gleichzeitig im Verhältnis zu ihrer Vaterschaftswahrscheinlichkeit zu betrachten, anstatt die Vaterschaftszuweisungen nacheinander zu aktualisieren, da es einen großen Raum möglicher Väter gibt, die untersucht werden müssen.
Tellis
Ich benutze das Paket FAPS , um diese Dinge zu tun.
Tellis
Meine Frage bezieht sich im Wesentlichen auf eine effiziente Angebotsverteilung für Ihren Punkt 2. Der Rest Ihrer Antwort beschreibt etwas, das dem sehr nahe kommt, was ich bereits getan habe, einschließlich der Formulierung des Produkts von G und D (aber danke dafür - ich war es nicht Ich bin mir nicht sicher, ob ich es richtig gemacht habe, daher ist es nützlich zu wissen, dass ein zweites Paar Augen zustimmt!).
Tellis
Ich habe leider keine vorgefertigte Lösung für die Verteilung von Vorschlägen. Aber ich habe ein paar Beobachtungen: (1) Die Schritte 1-2 sind sehr billig und können viele Male mit geringen Kosten wiederholt werden, bevor mit Schritt 3 fortgefahren wird. Selbst mit einem schlechten Vorschlag in Schritt 2 sollten viele Iterationen ausreichen, um " große Bewegungen machen "im Zustandsraum von . a,b,c
Nate Pope
(2) Die bedingte Verteilung in Schritt 2 ist dreidimensional. Wie in: einfach zu visualisieren. Wie sieht das nicht normalisierte Ziel von bei einer MAP-Schätzung der Vaterschaftszuweisungen für ein festes ? Die Visualisierung des nicht normalisierten Ziels über verschiedene Paternitäten hinweg sollte Ihnen ein Gefühl dafür vermitteln, ob es multimodal, in Bereichen flach usw. ist.G.a,b,cG
Nate Pope