У меня есть функция логарифмического правдоподобия нормального распределения mvn, заданная как: (изначально NLL, но изменяющаяся для целей построения графиков)
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 <- -0.5 * logdet - 0.5 * (t(data - mu) %*% sigma.inv %*% (data - mu) - (length(data) / 2) * log(2 * pi))
Я пытаюсь найти MLE для этой функции, учитывая мои данные, но optimx дает мне некоторые странные значения, поэтому я хочу посмотреть, есть ли какие-нибудь странные точки на графике.
p <- 0.5
k <- 50
b <- 1
data <- dataset[1,]
mu <- k * exp(-b * (1-density)) * (p * colSums(hadza_LHbones) + (1 - p) * colSums(hadza_LKbones))
sigma <- k * diag(exp(-b * (1-density))) %*% (p* crossprod(as.matrix(hadza_LHbones)) + (1 - p) *crossprod(as.matrix(hadza_LKbones))) %*% diag(exp(-b * (1-density)))
plot(data,NLLmvnorm(data,mu,sigma))
При этом я получаю сообщение о том, что длины x и y различаются, что, очевидно, имеет смысл, поскольку NLL выдает только одно значение, тогда как data
является многомерным, поэтому мне нужно построить вектор такой же длины, как и data
, но я не уверен, как это сделать или если это даже правильный курс действий. Будет ли лучший способ составить график II для обнаружения аномалий?
Дополнительная информация (сначала str(data)
):