我正在尝试使用最大似然度将截断的正态分布拟合到5000个声明大小的数据集:
l1 = function(theta)
{
-sum(dtruncnorm(x=size, a=0, b=Inf, mean = theta[1], sd=theta[2]))
}
mle1=optim(par=c(4,4), fn=l1)
然而,当我运行optim(par=c(4, 2), fn=l1)
行时,我收到错误:
Error in dtruncnorm(x = size, a = 0, b = Inf, mean = theta[1], sd = theta[2]) :
Argument 's_x' is not a real vector.
我知道它与size
变量有关,但据我所知,它是一个整数向量,因为当我运行typeof(size)
时,我得到"integer"
作为输出
感谢任何帮助!
答案 0 :(得分:1)
由于某种原因,该功能不接受序列。这对我有用:
-sum(sapply(size, function(v){
dtruncnorm(x=as.numeric(v), a=0, b=Inf, mean = theta[1], sd=theta[2])
}))