Distribution normale multivariée étant donné le vecteur moyen et la matrice de covariance
-
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.
La solution
Math.net pourrait fonctionner pour vous.
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.