为什么R中的这条3D曲线显示出sigma ^ 2的明显最大值,而不是μ?

时间:2015-04-17 07:57:30

标签: r 3d curve mle natural-logarithm

所以我使用了rgl包并创建了我自己的似然函数来输出正态分布中样本的对数似然。我这样做只是为了学习如何自己编程,这样我就能更好地理解可能性的工作原理以及MLE的工作原理。无论如何,我注意到一些特别奇怪的东西,我想知道是否有人知道这里的答案。当我绘制图形时,它以折叠曲线形状出现,但我认为我期待更多的锥形形状。基本上,令人好奇的是为什么当情节在sigma ^ 2值达到峰值时(在此轴上,峰值两侧有一个良好的下降),mu值保持大致相同?就好像一旦sigma ^ 2参数达到最佳水平,mu值之间的似然差异非常小。例如,当我检查sigma最大点的可能性的方差(保持不变)时,它是11.5。相反,当我检查相同点的mu的方差时,方差是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曲线应该是什么样的?如果是这样,为什么sigma ^ 2似乎显示出清晰的曲线和高度,而mu几乎没有差异?提前谢谢!

0 个答案:

没有答案