Question

J'ai un type de valeur qui représente une distribution gaussienne:

struct Gauss {
    double mean;
    double variance;
}

J'aimerais effectuer une intégrale sur une série de ces valeurs:

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

Ma question est de savoir comment mettre en œuvre l'addition pour ces distributions normales.

La multiplication par un scalaire ( dt ) semblait assez simple. Mais ce n'était pas simple! Merci FOOSHNICK pour l'aide:

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

Cependant, l'addition m'échappe. Je suppose que je peux juste ajouter les moyens; c'est la variance qui me pose problème. L'une ou l'autre de ces définitions semble "logique". pour moi.

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);
}

Quelqu'un peut-il aider à définir une valeur statistique correcte - ou au moins "raisonnable"? - version de l'opérateur + ?

Je suppose que je pourrais changer le code pour utiliser l'arithmétique d'intervalle à la place, mais j'espérais rester dans le monde des prob et des statistiques.

Était-ce utile?

La solution

La somme de deux distributions normales est en soi une distribution normale:

N (moyenne1, variance1) + N (moyenne2, variance2) ~ N (moyenne1 + moyenne2, variance1 + variance2)

Tout cela se trouve sur la page wikipedia .

Veillez à ce que ce soient vraiment des variances et non des écarts-types.

// 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);
}

Autres conseils

Pour être plus précis:

Si une variable aléatoire Z est définie comme la combinaison linéaire de deux variables aléatoires gaussiennes non corrélées X et Y, alors Z est elle-même une variable aléatoire gaussienne, par exemple:

si Z = aX + bY,   alors moyenne (Z) = a * moyenne (X) + b * moyenne (Y), et variance (Z) = a 2 * variance (X) + b 2 * variance (Y).

Si les variables aléatoires sont corrélées , vous devez en tenir compte. La variance (X) est définie par la valeur attendue E ([X-mean (X)] 2 ). En travaillant pour Z = aX + bY, nous obtenons:

variance (Z) = a 2 * variance (X) + b 2 * variance (Y) + 2ab * covariance (X, Y)

Si vous additionnez deux variables aléatoires non corrélées sans distribution gaussienne, la distribution de la somme est alors la convolution des distributions à deux composants.

Si vous additionnez deux variables aléatoires non gaussiennes corrélées, vous devez analyser vous-même les intégrales appropriées.

Eh bien, votre multiplication par scalaire est fausse - vous devriez multiplier la variance par le carré de d. Si vous ajoutez une constante, ajoutez-la simplement à la moyenne, la variance reste la même. Si vous ajoutez deux distributions, ajoutez les moyennes et les variances.

  

Quelqu'un peut-il aider à définir une valeur statistique correcte - ou au moins "raisonnable"? - version de l'opérateur +?

Ce n’est peut-être pas le cas, car l’ajout de deux distributions a un sens différent: après avoir travaillé dans la fiabilité et la maintenabilité, ma première réaction au titre serait la distribution du mtbf d’un système, si le mtbf de chaque partie est normalement distribué et que le système n’a pas de redondance. . Vous parlez de la distribution de la somme de deux variables indépendantes normalement distribuées, et non de la somme (logique) de l'effet de deux distributions normales. Très souvent, la surcharge des opérateurs a une sémantique surprenante. Je la laisserais comme une fonction et l'appellerais "normalSumDistribution" à moins que votre code ne cible un public très spécifique.

Hah, je pensais que vous ne pouviez pas ajouter des distributions gaussiennes ensemble, mais vous le pouvez!

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

En fait, la moyenne est la somme des distributions individuelles et la variance est la somme des distributions individuelles.

Je ne suis pas sûr d'aimer ce que vous appelez "intégration". sur une série de valeurs. Voulez-vous dire ce mot dans un sens du calcul? Est-ce que vous essayez de faire de l'intégration numérique? Il existe d'autres moyens plus efficaces de le faire. Le vôtre ne me convient pas, encore moins optimal.

La distribution gaussienne est une fonction douce et fluide. Je pense qu'une bonne approche en quadrature ou Runge-Kutta serait une bien meilleure idée.

J'aurais pensé que cela dépend du type d'addition que vous faites. Si vous souhaitez simplement obtenir une distribution normale avec des propriétés (moyenne, écart-type, etc.) égales à la somme de deux distributions, l'ajout des propriétés comme indiqué dans les autres réponses convient parfaitement. C'est l'hypothèse utilisée dans quelque chose comme PERT où si un grand nombre de distributions de probabilité normales sont ajoutées, la distribution de probabilité résultante est une autre distribution de probabilité normale.

Le problème survient lorsque les deux distributions ajoutées ne sont pas similaires. Prenons, par exemple, l’ajout d’une distribution de probabilité avec une moyenne de 2 et un écart type de 1 et d’une distribution de probabilité de 10 avec un écart type de 2. Si vous additionnez ces deux distributions, vous obtenez une distribution de probabilité avec deux pics, un à 2 et un à 10h. Le résultat n'est donc pas une distribution normale. L'hypothèse sur l'ajout de distributions n'est vraiment valable que si les distributions d'origine sont très similaires ou si vous avez beaucoup de distributions d'origine afin que les pics et les creux puissent être égalisés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top