【发布时间】:2020-08-11 06:41:00
【问题描述】:
我正在尝试使用 R 中的对数似然函数和 optim 函数从混合双指数模型中获取参数 w, lambda_1, lambda_2 和 p。模型如下
这里是代码
biexpLL <- function(theta, y) {
# define parameters
w <- theta[1]
lambda_1 <- theta[2]
a <- theta[3]
lambda_2 <- theta[4]
# likelihood function with dexp
l <- w * dexp((y - a), rate = 1/lambda_1) + (1 - w) * dexp((y - a), rate = 1/lambda_2)
- sum(log(l))
}
# Generate some fake data
w <- 0.7
n <- 500
lambda_1 <- 2
lambda_2 <- 0.2
set.seed(45)
biexp_data <- (w * rexp(n, 1/lambda_1) + (1 - w) * rexp(n, 1/lambda_2))
# Optimization
optim(par = c(0.5,0.1,0.001,0.2),
fn=biexpLL,
y=biexp_data)
#$par
#[1] -94789220.4 16582.9 -333331.7 134744336.2
参数与假数据中使用的参数有很大不同!我做错了什么?
【问题讨论】:
-
这可能不是问题的直接原因,但您似乎正在生成两个指数分布的加权平均值。但通常混合模型以
w的概率选择其中之一。 -
@KotaMori 谢谢。我不确定我是否在关注你。你的意思是我只需要估计
lambda_1和w?但是如何从中获得lambda_2? -
不,我的意思是您生成假数据的代码可能不正确。请参阅下面的答案。
标签: r minimization mle