ฉันพยายามตรวจสอบยืนยันคำตอบของ @ Macro แต่พบสิ่งที่ดูเหมือนว่าจะเป็นข้อผิดพลาดเล็กน้อยในโซลูชันความแปรปรวนร่วม เขาได้รับ
อย่างไรก็ตามปรากฏว่าโซลูชันที่ถูกต้องเป็นจริง
สคริปต์ R ต่อไปนี้ให้เป็นตัวอย่างที่ง่ายในการที่แตกต่างกันแน่นอนจะถูกคำนวณสำหรับองค์ประกอบของแต่ละSigma} มันแสดงให้เห็นว่าB=2A-diag(A)Σ
∂L∂Σ=−12(Σ−1−Σ−1(y−μ)(y−μ)′Σ−1)=A
B=2A−diag(A)
ΣBAให้คำตอบที่ถูกต้องเฉพาะสำหรับองค์ประกอบในแนวทแยงในขณะที่ถูกต้องสำหรับทุกรายการ
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