Distribution normale multivariée étant donné le vecteur moyen et la matrice de covariance

StackOverflow https://stackoverflow.com/questions/9398331

  •  29-10-2019
  •  | 
  •  

Question

J'avoue que je suis paresseux ici, mais quelqu'un est-il conscient d'une bibliothèque .NET mathématique qui me donne la sortie d'une distribution normale compte tenu d'un vecteur moyen et d'une matrice de covariance? Merci.

Était-ce utile?

La solution

Math.net pourrait fonctionner pour vous.

http://www.mathdotnet.com/

http://numerics.mathdotnet.com/probability-distributions/

Distributions multivariées

Dirichlet
Inverse Wishart
Matrix Normal
Multinomial
NormalGamma
Wishart

Référence de la fonction:

http://api.mathdotnet.com/numerics/mathnet.numerics.distributions/matrixnormal.htm

EDIT: Notez que vous devez télécharger à partir d'ici

http://mathnetnumerics.codeplex.com/releases/view/56448

D'autres liens sur MathDotnet.com sont obsolètes.

Autres conseils

Dans le cas bivarié, vous pouvez exprimer la matrice de covariance en tant que paramètre unique rho. Voici une méthode qui implémente cela directement:

[Pure]
public static double GetBivariateGuassian(double muX, double sigmaX, double muY, double sigmaY, double x, double y, double rho = 0)
{
    var sigmaXSquared = Math.Pow(sigmaX, 2);
    var sigmaYSquared = Math.Pow(sigmaY, 2);

    var dX = x - muX;
    var dY = y - muY;

    var exponent = -0.5;
    var normaliser = 2 * Math.PI * sigmaX * sigmaY;
    if (rho != 0)
    {
        normaliser *= Math.Sqrt(1 - Math.Pow(rho, 2));
        exponent /= 1 - Math.Pow(rho, 2);
    }

    var sum = Math.Pow(dX, 2)/sigmaXSquared;
    sum += Math.Pow(dY, 2)/sigmaYSquared;
    sum -= 2*rho*dX*dY/(sigmaX*sigmaY);

    exponent *= sum;

    return Math.Exp(exponent) / normaliser;
}

Voir Distributions normales bivariées sur Wikipedia pour référence.

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