IMIS
パッケージ(Incremental Mixture Importance Sampling)を使用してパラメーターを推定しています。残念ながら、関数、、を検索するように記述されてlikelihood
おりsample.prior
、prior
呼び出された環境では、関数でラップすることはできません(私の最終目標)。からの単変量の例は?IMIS
うまく機能しますが、
require(IMIS)
likelihood <- function(theta) exp(-1*sin(3*theta)*sin(theta^2) - 0.1*theta^2)
prior <- function(theta) dnorm(theta, 0, 5)
sample.prior <- function(n) rnorm(n, 0, 5)
result = IMIS(500, 3000, 100, 10)
## also fine using do.call (pertinent below)
result <- do.call(IMIS, args = list(B = 500, B.re = 3000, number_k = 100, D = 10))
しかし、当然のことながら、関数でラップしても次のことはできません。
rm(likelihood, prior, sample.prior, result)
imisWrap <- function() {
likelihood <- function(theta) exp(-1*sin(3*theta)*sin(theta^2) - 0.1*theta^2)
prior <- function(theta) dnorm(theta, 0, 5)
sample.prior <- function(n) rnorm(n, 0, 5)
result = IMIS(500, 3000, 100, 10)
return(result)
}
imisWrap() ## can't find sample.prior
これを回避する方法は、ラッパーで環境を作成し(またはその環境を使用して)、その環境で実行することだと思いますが、、、、を含む新しい環境を作成する方法がわかりません。do.call
IMIS
likelihood
prior
sample.prior
result
編集: @BenBolkerの優れたコメントを使用して、改善されましたが、まだ機能していません:
imisWrap2 <- function() {
likelihood <- function(theta) exp(-1*sin(3*theta)*sin(theta^2) - 0.1*theta^2)
prior <- function(theta) dnorm(theta, 0, 5)
sample.prior <- function(n) rnorm(n, 0, 5)
imisEnv <- new.env()
assign("likelihood", likelihood, envir = imisEnv)
assign("sample.prior", sample.prior, envir = imisEnv)
assign("prior", prior, envir = imisEnv)
result = do.call(IMIS,
args = list(B = 500, B.re = 3000, number_k = 100, D = 10),
envir = imisEnv)
return(result)
}
しかし、これでも関数を見つけることができません。