मैंने @ मैक्रों के उत्तर को कम्प्यूटेशनल रूप से सत्यापित करने की कोशिश की, लेकिन पाया कि कोवरियस समाधान में एक छोटी सी त्रुटि प्रतीत होती है। उसने
हालांकि, ऐसा प्रतीत होता है कि सही समाधान वास्तव में
निम्नलिखित आर स्क्रिप्ट एक सरल उदाहरण प्रदान करता है जिसमें परिमित अंतर की गणना प्रत्येक तत्व । यह दर्शाता है किबी=2एक-निदान(एक)Σएकबी
∂L∂Σ=−12(Σ−1−Σ−1(y−μ)(y−μ)′Σ−1)=A
B=2A−diag(A)
ΣAकेवल विकर्ण तत्वों के लिए सही उत्तर प्रदान करता है जबकि हर प्रविष्टि के लिए सही है।
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