【发布时间】:2014-10-10 13:14:33
【问题描述】:
我想估计涉及贝塞尔函数和积分的函数参数。但是,当我尝试运行它时,我收到一条消息“f(x, ...) 中的错误:找不到函数“BesselI””。我不知道如何修复它,如果有任何相关建议,我将不胜感激。
library(Bessel)
library(maxLik)
library(miscTools)
K<-300
f <- function(theta,lambda,u) {exp(-u*theta)*Vectorize(BesselI(2*sqrt(t*u*theta*lambda),1))/u^0.5}
F <- function(theta,lambda){integrate(f,0,K,theta=theta,lambda=lambda)$value}
tt <- function(theta,lambda){(sqrt(lambda)*exp(-t*lambda)/(2*sqrt(t*theta)))*
(theta*(2*t*lambda-1)*F(theta,lambda))}
loglik <- function(param) {
theta <- param[1]
lambda <- param[2]
ll <-sum(log(tt(theta,lambda)))
}
t <- c(24,220,340,620,550,559,689,543)
res <- maxNR(loglik, start=c(0.001,0.0005),print.level=1,tol = 1e-08)
summary(res)
牛顿-拉夫森最大化 迭代次数:0 返回码:100 初始值超出范围。
我收到“有 50 个或更多警告(使用 warnings() 查看前 50 个)”,当我使用 warnings() 时,以下是警告。
In t * u : longer object length is not a multiple of shorter object length.
sessionInfo()
R version 2.14.2 (2012-02-29)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] maxLik_1.1-2 miscTools_0.6-16 Bessel_0.5-4 Rmpfr_0.5-1
[5] gmp_0.5-4
loaded via a namespace (and not attached):
[1] sandwich_2.2-10
【问题讨论】:
-
Bessel 包真的安装了吗?
-
Yes Bessel 包已安装。
-
你能发布
sessionInfo()的输出吗?为了清楚起见,我的意思是请将其添加到问题的末尾 - 而不是在 cmets 中。 -
BesselI函数未矢量化... -
即使在矢量化之后,我也有同样的错误,即“In t * u:较长的对象长度不是较短对象长度的倍数”
标签: r integration newtons-method bessel-functions