0

そこで、rgl パッケージを使用して独自の尤度関数を作成し、正規分布からサンプルの対数尤度を出力しました。私はこれを自分でプログラムする方法を学ぶためだけにこれを行っていたので、可能性がどのように機能し、MLE がどのように機能するかをよりよく理解できるようになりました。とにかく、私は特に奇妙なことに気づきました。誰かがここで答えを知っているかどうか知りたいと思っていました. グラフをプロットすると、折り畳まれた曲線の形になりますが、もっと円錐形の形を期待していたはずです。基本的に、プロットが sigma^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 は明確な曲線と高さを示しているように見えるのに、mu は最大でほとんど変わらないのはなぜですか? 前もって感謝します!

4

0 に答える 0