Frage

Ich habe einen Werttyp, der eine Gaußsche Verteilung darstellt:

struct Gauss {
    double mean;
    double variance;
}

Ich möchte ein Integral über eine Reihe dieser Werte auszuführen:

Gauss eulerIntegrate(double dt, Gauss iv, Gauss[] values) {
    Gauss r = iv;
    foreach (Gauss v in values) {
        r += v*dt;
    }
    return r;
}

Meine Frage ist, wie zusätzlich für diese Normalverteilungen zu implementieren.

Die Multiplikation mit einem Skalar (dt) schien einfach genug. Aber es war nicht einfach! Dank FOOSHNICK für die Hilfe:

public static Gauss operator * (Gauss g, double d) {
    return new Gauss(g.mean * d, g.variance * d * d);
}

Die Zugabe entzieht sich mir. Ich nehme an, ich kann nur die Mittel hinzufügen; es ist die Varianz, die mir Probleme verursacht. Jede dieser Definitionen scheint „logisch“ zu mir.

public static Gauss operator + (Gauss a, Gauss b) {
    double mean = a.mean + b.mean;
    // Is it this? (Yes, it is!)
    return new Gauss(mean, a.variance + b.variance);        
    // Or this? (nope)
    //return new Gauss(mean, Math.Max(a.variance, b.variance));
    // Or how about this? (nope)
    //return new Gauss(mean, (a.variance + b.variance)/2);
}

Kann mir jemand eine statistisch korrekte helfen definieren - oder zumindest „angemessen“ - Version des + Operator

Ich glaube, ich könnte den Code wechseln anstatt Intervallarithmetik zu verwenden, aber ich hatte gehofft, in der Welt der prob und Statistiken zu bleiben.

War es hilfreich?

Lösung

Die Summe von zwei Normalverteilungen ist selbst eine Normalverteilung:

N (Mittel1, Variance1) + N (mean2, variance2) ~ N (Mittel1 + mean2, Variance1 + variance2)

Das ist alles auf Wikipedia-Seite .

Achten Sie darauf, dass diese wirklich Abweichungen sind und nicht die Standardabweichungen.

// X + Y
public static Gauss operator + (Gauss a, Gauss b) {
    //NOTE: this is valid if X,Y are independent normal random variables
    return new Gauss(a.mean + b.mean, a.variance + b.variance);
}

// X*b
public static Gauss operator * (Gauss a, double b) {
    return new Gauss(a.mean*b, a.variance*b*b);
}

Andere Tipps

Um genauer zu sein:

Wenn eine Zufallsvariable Z als lineare Kombination von zwei nicht korreliert Gaußschen Zufallsvariablen X und Y definiert ist, Z ist selbst eine Gaußsche Zufallsvariable, z.

, wenn Z = ax + by,   bedeutet, dann (Z) = a * Mittelwert (X) + b * Mittelwert (Y), und die Varianz (Z) = a 2 * Varianz (X) + b 2 * Varianz (Y).

Wenn die Zufallsvariablen sind korrelierte , dann müssen Sie für dieses Konto. Variance (X) durch den Erwartungswert E definiert ([X-Mittelwert (X)] 2 ). Arbeiten diese durch für Z = ax + by, erhalten wir:

Varianz (Z) = a 2 * Varianz (X) + b 2 * Varianz (Y) + 2ab * Kovarianz (X, Y)

Wenn Sie zwei unkorreliertheit summieren, die keine Gauß-Verteilungen haben, dann ist die Verteilung der Summe ist die

Nun, Ihre Multiplikation mit Skalar ist falsch - Sie Varianz durch das Quadrat d multiplizieren sollte. Wenn Sie eine Konstante sind hinzufügen, dann fügen Sie ihn einfach auf den Mittelwert, bleibt die Varianz gleich. Wenn Sie zwei Verteilungen sind hinzufügen, dann die Mittel hinzufügen und die Varianzen hinzuzufügen.

  

Kann dich jemand eine statistisch korrekte helfen definieren - oder zumindest „angemessen“ - Version des Operators +

Diskutierbar nicht, wie das Hinzufügen von zwei Verteilungen bedeutet verschiedene Dinge - in Zuverlässigkeit und maintainablity meiner ersten Reaktion aus dem Titel eines System mtbf die Verteilung wäre gearbeitet, wenn die MTBF eines jeden Teils normalverteilt ist und das System hatte keine Redundanz . Sie sprechen über die Verteilung der Summe von zwei normalerweise unabhängig variates verteilt, nicht die (logische) Summe zweier Normalverteilungen -Effekt. Sehr oft hat Betreiber Überlastung überraschend Semantik. Ich würde es als eine Funktion verlassen und nenne es ‚normalSumDistribution‘, wenn Ihr Code eine sehr spezifische Zielgruppe hat.

Hah, ich dachte, dass Sie nicht Gaußschen Verteilungen zusammen hinzufügen könnte, aber Sie können!

http://mathworld.wolfram.com/NormalSumDistribution.html

In der Tat, der Mittelwert ist die Summe der einzelnen Verteilungen und die Varianz ist die Summe der einzelnen Distributionen.

Ich bin nicht sicher, dass Ich mag, was Sie „Integration“ über eine Reihe von Werten sind aufgerufen wird. Haben Sie dieses Wort in einem Kalkül Sinne bedeuten? Versuchen Sie, die numerische Integration zu tun? Es gibt andere, bessere Wege, das zu tun. Ihr nicht richtig zu mir schauen, geschweige denn eine optimale lassen.

Die Gauß-Verteilung ist eine schöne, glatte Funktion. Ich denke, ein schönes Quadratur Ansatz oder Runge-Kutta wäre eine viel bessere Idee.

Ich habe gedacht, es hängt davon ab, welche Art von Zusatz Sie tun. Wenn Sie nur eine normale Verteilung mit Eigenschaften erhalten möchten (Mittelwert, Standardabweichung etc.) gleich der Summe von zwei Verteilungen dann die Zugabe der Eigenschaften wie in den anderen Antworten gegeben ist in Ordnung. Dies ist die Annahme, in so etwas wie PERT verwendet, wo, wenn eine große Anzahl von normalen Wahrscheinlichkeitsverteilungen werden addiert dann die resultierende Wahrscheinlichkeitsverteilung eine andere normale Wahrscheinlichkeitsverteilung ist.

Das Problem kommt, wenn die beiden Distributionen hinzugefügt werden, sind nicht ähnlich. Nehmen wir zum Beispiel das Hinzufügen einer Wahrscheinlichkeitsverteilung mit einem Mittelwert von 2 und Standardabweichung von 1 und einer Wahrscheinlichkeitsverteilung von 10 mit einer Standardabweichung von 2. Wenn Sie diese beiden Distributionen zusammenzählen, erhalten Sie eine Wahrscheinlichkeitsverteilung mit zwei Peaks, einen bei 2ish und eine an 10ish. Das Ergebnis ist also keine normale distibution. Die Annahme über Verteilungen Hinzufügen ist nur dann wirklich wirksam, wenn die ursprünglichen Verteilungen entweder sehr ähnlich sind, oder Sie haben eine Menge von Original-Distributionen, so dass die Spitzen und Täler können ausgeglichen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top