我试图使用R来计算一组数据(likelihood_N
)相对于参数$v_0$的边际似然。为此,我创建了以下子函数:
prior_u= function(v0, v){
1/40}
likelihood=function(v0,data){
#turns dataframe to vectors
Gmu=data[2]$V2
v=data[1]$V1
G=(1 - (1/g)*(sqrt(log(2)/pi)) * exp(- (log(2)*((v-v0)^2))/(g^2)))
return(dnorm(Gmu,G,s))
}
likelihood_N=function(v0,data){
prod(likelihood(v0,data))*prior_u(v0,data[1]$V1)
}
然而,当我使用integrate
R内置功能时,它总是给我以下错误信息:
(v - v0)中的警告信息:"较长的对象长度不是较短对象长度的倍数">
在integral (likelihood (d_n, start, stop, dataset_1, subdivision = N)中出错:函数的求值结果长度错误
不管我选择的细分的数量。有人知道我该怎么解决这个问题吗?我对R很陌生所以我不知道是否有其他的积分函数可以用来计算边际似然。我试图创建自己的基于直方图的集成算法,但它非常无效,我想比较我得到的结果,以确保它们是正确的,因为它们似乎比我预期的要低。
integrate
函数为您的likelihood_N
提供了一个具有多个v0
值的向量,但是您的函数被编写为仅处理单个数字v0
。