我对我的代码感到有些困惑,如果有人可以帮助我,我会非常感激!
下面的代码基本上是我编写的一个函数,它使您能够根据带有参数μ,σ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的最大似然估计值。
我决定我的函数应该有以下参数:
理想情况下,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
时出错
感谢您阅读本文。希望有人可以指导我完成这个过程吗?
最诚挚的问候。