gpt4 book ai didi

r - 使用 `bbmle:mle2` 和矢量参数(已经使用 `optim` )

转载 作者:行者123 更新时间:2023-12-03 16:52:32 35 4
gpt4 key购买 nike

我在使用 bbmle:mle2 时遇到了一些问题尝试进行回归时的函数。为了说明我的问题,我想出了一个玩具示例。

我们定义泊松分布(或任何自定义分布)的负对数似然:

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)

评估大量不同模型的方法非常简单,只需指定模型矩阵即可。如何使其与 mle2 一起使用来自 bbmle 的函数包裹?

如果 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 兼容”的前进方向。任何提示将不胜感激。

另外,有没有办法通过 zx我的对数似然函数中的参数以更优雅的方式 mle2就像我在 optim 中所做的那样?

最佳答案

我认为主要问题是您需要提供start作为原子向量(不是列表)。

 library(bbmle)
LL2 <- function(beta) {
LL(beta, z = z2, x = claim)
}
parnames(LL2) <- colnames(z2)
mle2(
minuslogl = LL2 ,
start = setNames(c(0,0),colnames(z2)),
vecpar = TRUE
)

知道您可以在 bbmle 中更轻松地实现泊松回归之类的东西可能会有所帮助。带有公式界面和 parameters争论:
mle2(claim~dpois(exp(loglambda)),     ## use log link/exp inverse-link
data=data.frame(claim,age), ## need to specify as data frame
parameters=list(loglambda~age), ## linear model for loglambda
start=list(loglambda=0)) ## start values for *intercept*

关于r - 使用 `bbmle:mle2` 和矢量参数(已经使用 `optim` ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300955/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com