R中拉普拉斯分布尺度参数的优化

p3rjfoxz  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(188)

我使用拉普拉斯分布(位置= 0,尺度= b)从标准正态分布中进行采样。正态分布的范围从-1到2。我使用拒绝抽样方法。换句话说,拉普拉斯函数是包络函数。
如果不指定比例B,我就无法创建任何图,因此我决定寻找b可以采用的最佳值。
我考虑使用从正态分布中采样的一些观察值来找到包络函数的最大似然估计。
这是我的R代码:

# Define the log-likelihood function
log_likelihood <- function(b, x) {
  n <- length(x)
  -n*log(2*b) - sum(abs(x))/b
}

# Generate the data
set.seed(123)
x <- rnorm(1000, mean = 0, sd = 1)
x <- x[x >= -1 & x <= 2]  # Restrict the range to [-1, 2]

# Find the maximum likelihood estimate of b
fit <- optim(par = 1, fn = log_likelihood, x = x, lower = 0)
b <- fit$par

# Plot the Laplace envelope function
curve((1/(2*b))*exp(-abs(x)/b), from = -5, to = 5, ylim = c(0, 0.4), ylab = "Density", xlab = "x")

上面的代码从标准正态分布中生成1000个观测值的样本,并将范围限制为[-1,2]。然后使用optim()函数来查找使对数似然函数最大化的b值。最后,它用b的估计值绘制拉普拉斯包络函数。

y <- seq(-1, 2, length = 1000)
z <- dnorm(y)
par(new=TRUE)
plot(y, z, type = "l", xlab = "X", ylab = "Density", main = "Standard Normal Distribution")

下图显示了两个函数:

结果是B=1。我希望得到一些关于我在这里遵循的过程的反馈,我不确定它是否正确。当我稍微修改代码时,我得到了不同的图和不同的b值。

snz8szmq

snz8szmq1#

我已经能够用下面的代码进行优化。我改变了目标函数的符号。

# Define the log-likelihood function
log_likelihood <- function(b, x) {
  n <- length(x)
  return(n*log(2*b) + sum(abs(x))/b)
}

# Generate the data
set.seed(123)
x <- rnorm(1000, mean = 0, sd = 1)
x <- x[x >= -1 & x <= 2]  # Restrict the range to [-1, 2]

# Find the maximum likelihood estimate of b
fit <- optim(par = 1, fn = log_likelihood, x = x)
b <- fit$par

# Plot the Laplace envelope function
curve((1/(2*b))*exp(-abs(x)/b), from = -5, to = 5, ylim = c(0, 0.4), ylab = "Density", xlab = "x")
curve(dnorm(x), add = TRUE, col = "red")

b

0.5892578

相关问题