R

时间:2017-02-18 12:41:47

标签: r rstudio truncated mle

我对我的代码感到有些困惑,如果有人可以帮助我,我会非常感激!

下面的代码基本上是我编写的一个函数,它使您能够根据带有参数μ,σ2和的截断正态分布的iid样本x1,...,xn计算μ和σ2的最大似然估计值。 τ,其中τ的值是已知的。

这是我到目前为止的代码。

tnorm.negll <- function(theta,xbar,SS,n,tau){

  #storing variance into a more appropriate name
  sigmasq <- theta[2]
  logvar <- log(sigmasq)

  if (sigmasq<0) {
  warning("Input for variance is negative")
  return(Inf)
  }

  #storing mean into a more appropriate name
  mu <- theta[1]

  #standard normal
  phi <- function(x) exp(-x^2/2)/sqrt(2*pi)

  #using the given formula for the negative log-likelihood
  negloglike <- (n/2)*(logvar) + (SS - 2*n*mu*xbar + n*mu^2)/(2*sigmasq) + n*log(1-phi((tau-mu)/(sqrt(sigmasq))))

  #returning value:
      return(negloglike)

}

我现在需要编写另一个函数,比如trnorm.MLE(),它将使用上面的函数计算给定观测值x1,...,xn和τ值的μ和σ2的最大似然估计值。

我决定我的函数应该有以下参数:

  • x:观察载体,
  • tau:阈值,
  • theta0:带元素theta0的向量[1]初始猜测mu和theta0 [2] sigmasq的初始猜测。

理想情况下,trnorm.MLE()函数应返回长度为2的向量,其中第一个分量是μ的MLE,第二个分量是σ2的MLE。

作为猜测,我写了这个:

x <- rep(1:11, c(17,48,68,71,42,19,14,7,1,0,1))
tau <- 3
theta0 <- c(3,15)

xbar <- mean(x)
SS <- sum(x^2)
n <- length(x)
nlm(tnorm.negll,theta0,xbar,SS,n,tau,hessian = TRUE)

我知道这远非正确但我无法正确表达! 我得到了各种错误

  

nlm中的错误(tnorm.negll,theta0,xbar,SS,n,tau,hessian = TRUE):   'nlm'优化器

中的函数值无效

  

if(theta [2]&gt; = 0){:缺少值需要TRUE / FALSE

时出错

感谢您阅读本文。希望有人可以指导我完成这个过程吗?

最诚挚的问候。

编辑:更改了tnorm.negll返回结果的方式

0 个答案:

没有答案