所以我使用了 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 几乎没有最大差异?提前致谢!