Как построить функцию логарифмического правдоподобия многомерного нормального распределения - PullRequest
0 голосов
/ 16 мая 2019

У меня есть функция логарифмического правдоподобия нормального распределения 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)):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...