回帰をしようとするときにbbmle:mle2
関数を使用する際に問題があります。私の問題を説明するために、私はおもちゃの例を思いついた。`bbmle:mle2`とベクトルパラメータの使用(すでに` optim`を使って動作します)
我々は、ポアソン分布(または任意のカスタム分布)のためにマイナス対数尤度を定義する:上記のコードで
LL <- function(beta, z, x){
-sum(stats::dpois(x, lambda = exp(z %*% beta), log = TRUE))
}
、beta
私は推定したいパラメータ・ベクトルであり、z
モデル/設計であります行列とx
は私の興味のある変数です。
私はその後で動作するようにいくつかのランダムなデータを生成します。
set.seed(2)
age <- round(exp(rnorm(5000, mean = 2.37, sd = 0.78) - 1))
claim <- rpois(5000, lambda = 0.07
私は簡単に私の回帰のためoptim
を使用することができます。ここでintercept
唯一のモデルは次のとおりです。ここで
z1 <- model.matrix(claim ~ 1)
optim(par = 0, fn = LL, z = z1, x = claim)
はintercept + age
モデルです:異なる多数のモデルを評価することができ
z2 <- model.matrix(claim ~ age)
optim(par = c(0, 0), fn = LL, z = z2, x = claim)
方法は1つがちょうどモデル行列を指定する必要があり、非常に簡単です。 bbmle
パッケージのmle2
機能を使用するにはどうすればいいですか?
私はそれを行うことができ、beta
は、一次元の場合:
mle2(minuslogl = function(beta){ LL(beta = beta, z = z1, x = claim) },
start = list(beta = 0))
しかしbeta
がベクトルであれば、その後、私は問題に実行:
mle2(
minuslogl = function(beta){ LL(beta = beta, z = z2, x = claim) },
start = list(beta = c(0, 0)),
vecpar = T,
parnames = colnames(z2)
)
私は、構文の権利を得ることができないとドキュメンテーションやビネットで例を見つけることができません。問題は確かにbeta
がベクターになりました。ドキュメントには、vecpar = T
引数を使用することが、「optim
との互換性」の方法であることが示唆されています。任意のヒントをいただければ幸いです。
また、私はoptim
にそうしているようmle2
に、よりエレガントな方法で私の対数尤度関数でz
とx
引数を渡す方法はありますか?
はお返事、ベンいただきありがとうございます!これは素晴らしいことであり、私の問題を解決するので、実際の対数尤度で実装できるはずです。乾杯! –