1

我对以下型号有疑问,

在此处输入图像描述

我想对 μ 和 tau 进行推断,u 是已知向量,x 是数据向量。对数似然是

在此处输入图像描述

我在 R 中编写对数似然时遇到问题。

x <- c(3.3569,1.9247,3.6156,1.8446,2.2196,6.8194,2.0820,4.1293,0.3609,2.6197)
mu <- seq(0,10,length=1000)

normal.lik1<-function(theta,x){ 
  u <- c(1,3,0.5,0.2,2,1.7,0.4,1.2,1.1,0.7)  
  mu<-theta[1] 
  tau<-theta[2] 
  n<-length(x) 

logl <-  sapply(c(mu,tau),function(mu,tau){logl<- -0.5*n*log(2*pi) -0.5*n*log(tau^2+u^2)- (1/(2*tau^2+u^2))*sum((x-mu)^2) } )

  return(logl) 
  } 

#test if it works for mu=1, tau=2
head(normal.lik1(c(1,2),x))
#Does not work..

我希望能够插入 mu 的向量并将其绘制在 mu 上以获得固定的 tau 值,例如 2。我还想使用 optim 函数找出 tau 和 mu 的 MLE。我试过了:

theta.hat<-optim(c(1,1),loglike2,control=list(fnscale=-1),x=x,,method="BFGS")$par

但它不起作用..关于我如何写可能性的任何建议?

4

1 回答 1

2

首先,正如您在问题的评论中提到的那样,没有必要使用sapply(). 您可以简单地使用sum()- 就像在 logLikelihood 的公式中一样。

我更改了这部分normal.lik1()并将分配给的表达式乘以logl负1,以便函数计算负对数似然。您想搜索 theta 上的最小值,因为该函数返回正值。

x < c(3.3569,1.9247,3.6156,1.8446,2.2196,6.8194,2.0820,4.1293,0.3609,2.6197)
u <- c(1,3,0.5,0.2,2,1.7,0.4,1.2,1.1,0.7) 

normal.lik1 <- function(theta,x,u){ 
  mu <- theta[1] 
  tau <- theta[2] 
  n <- length(x) 
  logl <- - n/2 * log(2*pi) - 1/2 * sum(log(tau^2+u^2)) - 1/2 * sum((x-mu)^2/(tau^2+u^2))
  return(-logl) 
}

这可以通过使用来完成nlm(),例如

nlm(normal.lik1, c(0,1), hessian=TRUE, x=x,u=u)$estimate

其中c(0,1)是算法的起始值。

要绘制一系列值mu和一些固定值的对数似然,tau您可以调整函数,使得mutau是单独的数字参数。

normal.lik2 <- function(mu,tau,x,u){ 
  n <- length(x) 
  logl <- - n/2 * log(2*pi) - 1/2 * sum(log(tau^2+u^2)) - 1/2 * sum((x-mu)^2/(tau^2+u^2))
  return(logl) 
}

然后为 定义一些范围mu,计算对数似然并使用plot()

range.mu <- seq(-10,20,0.1)

loglik <- sapply(range.mu, function(m) normal.lik2(mu=m,tau=2,x=x,u=u))

plot(range.mu, loglik, type = "l")

在此处输入图像描述

我敢肯定有更优雅的方法可以做到这一点,但这可以解决问题。

于 2018-01-09T18:33:10.783 回答