Comment prendre dérivé de la densité normale multivariée?

35

Disons que j'ai une densité normale multivariée de . Je veux obtenir le deuxième dérivé (partiel) wrt \ mu . Pas sûr de savoir comment prendre dérivé d'une matrice.N(μ,Σ)μ

Le wiki dit prendre le dérivé élément par élément à l'intérieur de la matrice.

Je travaille avec l'approximation de Laplace Le mode est .Θ = μ

logPN(θ)=logPN12(θθ^)TΣ1(θθ^).

θ^=μ

On m'a donné comment est-ce arrivé?

Σ1=2θ2logp(θ^|y),

Ce que j'ai fait:

logP(θ|y)=k2log2π12log|Σ|12(θθ^)TΣ1(θθ^)

Donc, je prends dérivé de θ , premièrement, il y a une transposition, deuxièmement, c'est une matrice. Donc, je suis coincé.

Note: Si mon professeur rencontre ceci, je me réfère à la conférence.

utilisateur1061210
la source
1
Une partie de votre problème peut être que votre expression pour le log-vraisemblance a une erreur - vous avez |Σ|où vous devriez avoir log(|Σ|) . Aussi, par hasard avez-vous voulu dire Σ1=2θ2logp(θ|y) ?
Macro
Oui, tu as raison, désolé. Pourquoi y a-t-il un signe négatif devant la dérivée partielle?
user1061210
Je clarifiais juste à propos du signe négatif parce que la dérivée seconde négative est l’information observée sur le pêcheur, qui est habituellement intéressante. De plus, par mon propre calcul, je découvre que2θ2logp(θ|y)=Σ1
Macro
Alors, quelle est la procédure générale pour la fonction discrète / continue? Prenez un journal, écrivez sous forme d’expansion de Taylor, différenciez-vous deux fois par . Les informations de Fisher ne sont généralement pas vraies dans la plupart des autres densités, non? θ
user1061210
3
@user Comme je l'ai indiqué, la dérivée seconde du logarithme doit avoir des valeurs propres non positives. Oui, il existe des liens entre les variances et les dérivées partielles négatives secondes, comme le révèlent la théorie de l'estimation du maximum de vraisemblance, les informations de Fisher, etc. - Macro a déjà évoqué cela plus tôt dans ces commentaires.
whuber

Réponses:

66

Dans le chapitre 2 du livre de recettes matricielles, vous trouverez un aperçu des éléments de calcul matriciel qui donne de nombreuses identités utiles pour résoudre les problèmes rencontrés lors de la réalisation de probabilités et de statistiques, y compris des règles permettant de différencier la vraisemblance gaussienne multivariée.

Si vous avez un vecteur aléatoire multivarié normal avec un vecteur moyen et une matrice de covariance , utilisez l'équation (86) dans le livre de recettes matriciel pour déterminer que le gradient de la vraisemblance du journal par rapport à estμ Σ L μyμΣLμ

Lμ=12((yμ)Σ1(yμ)μ)=12(2Σ1(yμ))=Σ1(yμ)

Je vous laisse le soin de différencier à nouveau cette question et de trouver la réponse .Σ1

En tant que "crédit supplémentaire", utilisez les équations (57) et (61) pour déterminer que le gradient par rapport à estΣ

LΣ=12(log(|Σ|)Σ+(yμ)Σ1(yμ)Σ)=12(Σ1Σ1(yμ)(yμ)Σ1)

J'ai omis beaucoup d'étapes, mais j'ai fait cette dérivation en utilisant uniquement les identités trouvées dans le livre de recettes de la matrice. Je vous laisse donc le soin de combler les lacunes.

J'ai utilisé ces équations de score pour l'estimation du maximum de vraisemblance, je sais donc qu'elles sont correctes :)

Macro
la source
4
Excellente référence - allais le recommander moi-même. Ce n'est pas une bonne référence pédagogique pour quelqu'un qui ne connaît pas l'algèbre matricielle. Le véritable défi provient de l’élaboration de . Une vraie douleur. Σ
probabilislogic
3
Une autre bonne source de calcul matriciel est Magnus & Neudecker, amazon.com/…
StasK
2
Le numéro de référence de l'équation a été modifié (peut-être en raison d'une nouvelle édition). La nouvelle équation de référence est 86.
goelakash
2
Je pourrais être en dehors de la base ici mais je ne pense pas que cette formule est correcte. J'ai utilisé cela avec des exemples réels et en regardant leurs différences finies. Il semble que la formule pour donne les valeurs correctes pour les entrées diagonales. Cependant, les entrées hors diagonale sont la moitié de ce qu'elles devraient être. LΣ
jjet
5

Vous devez vous assurer que vous prenez bien en compte les éléments répétés dans , sinon vos dérivés seront incorrects. Par exemple, (141) le livre de recettes matriciel donne pour un symétrique les dérivés suivantsΣΣΣ

log|Σ|Σ=2Σ1(Σ1I)

Et (14) de Différenciation des fonctions des matrices de covariance donne

trace(Σ1xx)Σ=2Σ1xxΣ1+(Σ1xxΣ1I)

où désigne le produit Hadmard et pour plus de commodité, nous avons défini .x : = y - μx:=yμ

Notez en particulier que ce n'est pas la même chose que lorsque la symétrie de n'est pas imposée. En conséquence, nous avons ceΣ

LΣ=Σ12(Dlog|2π|+log|Σ|+xΣ1x))=Σ12(log|Σ|+trace(Σ1xx))=12(2Σ1(Σ1I)2Σ1xxΣ1+(Σ1xxΣ1I))

où désigne la dimension de , et et la dérivée deest 0x y μ D log | 2 π |DxyμDlog|2π|

Cela garantit que l' élément de correspond à .Li,jth dela LLΣLΣij

Lawrence Middleton
la source
0

J'ai essayé de vérifier informatiquement la réponse de @ Macro mais j'ai trouvé ce qui semble être une erreur mineure dans la solution de covariance. Il a obtenu Cependant, il semble que la solution correcte soit réellement Le script R suivant fournit un exemple simple dans lequel la différence finie est calculée pour chaque élément de . Cela démontre queB=2A-diag(A)ΣAB

LΣ=12(Σ1Σ1(yμ)(yμ)Σ1)=A
B=2Adiag(A)
ΣAfournit la réponse correcte uniquement pour les éléments diagonaux, tandis que est correct pour chaque entrée.B
library(mvtnorm)

set.seed(1)

# Generate some parameters
p <- 4
mu <- rnorm(p)
Sigma <- rWishart(1, p, diag(p))[, , 1]

# Generate an observation from the distribution as a reference point
x <- rmvnorm(1, mu, Sigma)[1, ]

# Calculate the density at x
f <- dmvnorm(x, mu, Sigma)

# Choose a sufficiently small step-size
h <- .00001

# Calculate the density at x at each shifted Sigma_ij
f.shift <- matrix(NA, p, p)
for(i in 1:p) {
  for(j in 1:p) {
    zero.one.mat <- matrix(0, p, p)
    zero.one.mat[i, j] <- 1
    zero.one.mat[j, i] <- 1

    Sigma.shift <- Sigma + h * zero.one.mat
    f.shift[i, j] <- dmvnorm(x, mu, Sigma.shift)
  }
}

# Caluclate the finite difference at each shifted Sigma_ij
fin.diff <- (f.shift - f) / h

# Calculate the solution proposed by @Macro and the true solution
A <- -1/2 * (solve(Sigma) - solve(Sigma) %*% (x - mu) %*% t(x - mu) %*% solve(Sigma))
B <- 2 * A - diag(diag(A))

# Verify that the true solution is approximately equal to the finite difference
fin.diff
A * f
B * f
jjet
la source
Merci pour votre commentaire. Je crois que vous interprétez la notation différemment de tous les autres, car vous modifiez simultanément des paires d'éléments non diagonaux correspondants de , ce qui double l'effet de ce changement. En fait, vous calculez un multiple d'une dérivée directionnelle. Il semble y avoir un petit problème avec la solution de Macro dans la mesure où une transposition doit être prise - mais cela ne changerait rien dans l'application aux matrices symétriques. Σ
whuber