2017-08-24 94 views
0

我试图适应截短正态分布使用最大似然5000个根据权利要求大小的数据集:错误:参数“s_x”不是一个真正的矢量

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"作为输出。

任何帮助表示赞赏!

回答

1

出于某种原因,函数不接受序列。这工作对我来说:

-sum(sapply(size, function(v){ 
dtruncnorm(x=as.numeric(v), a=0, b=Inf, mean = theta[1], sd=theta[2]) 
})) 
相关问题