Почему эта трехмерная кривая в R показывает четкий максимум для сигмы ^2, но не для мю?

Поэтому я использовал пакет rgl и создал свою собственную функцию правдоподобия для вывода логарифмической вероятности выборки из нормального распределения. Я делал это на самом деле просто для того, чтобы научиться программировать это сам, чтобы лучше понять, как работает вероятность, а также как работает MLE. В любом случае, я заметил что-то особенно странное и хотел знать, знает ли кто-нибудь ответ здесь. Когда я строю график, он получается в форме свернутой кривой, но я предположил, что ожидал большего от формы конуса. В основном, что интересно, почему, когда график достигает максимума при значении сигма ^2 (по этой оси наблюдается хорошее снижение по обе стороны от пика), значение mu остается примерно одинаковым? Как будто параметр sigma^2 достигает оптимального уровня, различия в вероятности между значениями mu довольно малы. Например, когда я проверяю дисперсию вероятностей максимальной точки сигмы (сохраняя ее постоянной), она составляет 11,5. Напротив, когда я проверяю дисперсию мю через ту же точку, дисперсия составляет 23402. Поскольку я пока не могу публиковать изображения, так как у меня недостаточно репутации, я просто опубликую свой R-код, который создает график,

#Define LL function
LL <- function(X, theta)
{
  mu <- theta[1]
  sigma2 <- theta[2]
  log.likelihood <- 0
  n <- length(X)
  for (i in 1:length(X))
  {
      log.likelihood <- log.likelihood - (((X[i]-mu)^2)/(2*sigma2)) - 

log(sqrt(2*pi*sigma2))
  }

  return(log.likelihood)
}

#Parameters
Mu <- 100
Sigma2 <- 50

#Sample
N <- 100
set.seed(1)
IQs <- rnorm(N, mean=Mu, sd=sqrt(Sigma2))

#Possible values to test
x <- posMu <- seq(80, 120, length.out=200)
y <- posSig <- seq(20, 60, length.out=200)
#x1 <- sort(x, decreasing=T)


#Produce LLs for plotting
LLlist <- NULL
for (m in 1:length(posMu)){
  LLs <- NULL
  for(s in 1:length(posSig)){
    posTheta <- cbind(posMu[m],posSig[s])
    LLs <- c(LLs, LL(IQs,posTheta)) 
  }
  LLlist <- cbind(LLlist,LLs, deparse.level=0)
}
z <- LLlist

#Find the approximate MLE 
mLL <- which(LLlist == max(LLlist), arr.ind=TRUE)
cbind(posMu[mLL[2]],posSig[mLL[1]],LLlist[mLL])

#Graph the LLs
library(rgl)
open3d()
plot3d(mean(x),mean(y),mean(z), xlab="Mu", ylab="Sigma2", zlab="log L", xlim=c(min(x),max(x)), ylim=c(min(y),max(y)), zlim=c(min(z),max(z)))
surface3d(x, y, z, color=rainbow(length(x)))

Итак, мой код просто неверен? Или это то, как должна выглядеть кривая LL? Если так, то почему сигма ^2, кажется, показывает четкую кривую и высоту, тогда как мю почти не отличается в максимуме? Заранее спасибо!

0 ответов

Другие вопросы по тегам