我的代码有点卡住了,如果有人可以帮助我,我将不胜感激!
下面的代码基本上是我编写的一个函数,它使您能够根据具有参数 μ、σ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(),它将使用上面的函数来计算 μ 和 σ2 的最大似然估计,给定一个观测向量 x1、...、xn 和 τ 值。
我决定我的函数应该有以下参数:
- 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] >= 0) { 中的错误:需要 TRUE/FALSE 的缺失值
谢谢您阅读此篇。希望有人可以指导我完成这个?
此致。