2

ベッセル関数と積分を含む関数のパラメータを推定したいと思っています。しかし、実行しようとすると、「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 件以上の警告がありました (最初の 50 件を表示するには warnings() を使用してください)」というメッセージが表示され、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
4

2 に答える 2

1

警告: 不完全な回答/探索。

これを少し取り除いて、警告がどこから来ているかを確認してみましょう。これにより、さらに洞察が得られる可能性があります。少なくとも、その可能性は排除できます。

K <- 300 ## global variable, maybe a bad idea
t <- c(24,220,340,620,550,559,689,543)  ## global/same name as t(), ditto
library(Bessel)
f  <- function(theta,lambda,u) {
    exp(-u*theta)*BesselI(2*sqrt(t*u*theta*lambda),1)/u^0.5}
## Vectorize() isn't doing any good here anyway, take it out ...
F  <- function(theta,lambda){
       integrate(f,0,K,theta=theta,lambda=lambda)$value}

F()動作しますが、ベクトル化の警告が表示されます:

F(theta=1e-3,lambda=5e-4)
## [1] 3.406913
## There were 50 or more warnings (use warnings() to see the first 50)
f(theta=1e-3,lambda=5e-4,u=0:10)
##  [1]         NaN 0.010478182 0.013014566
##  [4] 0.017562239 0.016526010 0.016646497
##  [7] 0.018468755 0.016377872 0.003436664
## [10] 0.010399265 0.012919646
## Warning message:
## In t * u : longer object length is not a multiple of shorter object length

まだ警告が表示されます。uまた、被積分関数を 0 で評価することが問題になる可能性が高いこともわかります (分母にの平方根があります ...)。

外積(とのすべての組み合わせ)を評価f()し、おそらくの値を合計する必要があるようです。これは本当に解決する必要があります。これは、統合変数が任意に多くの値を持つことになる一方で、固定長 (おそらく何らかのデータ サンプル)を持っているためです ...tufttu

対数尤度関数の元の導出へのリンクを提供できますか?

于 2014-08-26T01:53:17.963 に答える