Я пытаюсь дифференцировать логарифмическую функцию вероятности многомерного нормального распределения,
NLLmvnorm <- function(data, mu, sigma) {
a <- qr(sigma)
logdet <- sum(log(abs(diag(a$qr))))
sigma.inv <- fast.ginv(sigma)
-0.5 * (logdet + t(data-mu) %*% sigma.inv %*% (data-mu))
}
Используя D
, я различаю по mu
и sigma
и сохраняю каждый результат в отдельной переменной:
du <- D(expression(NLLmvnorm),"mu")
ds <- D(expression(NLLmvnorm),"sigma")
Однако оба эти результата возвращают 0
. Я делаю что-то неправильно или неправильно понимаю, что делает D
? Если это поможет, моя цель - найти корни du
и ds
, чтобы найти максимальную вероятность, используя solve
.