You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言绘制指数分布极大似然函数代码错误排查求助

错误说明
  • 核心逻辑错误:你当前编写的liklihood函数调用了rpois(),该函数是泊松分布随机数生成工具,和指数分布似然函数的计算完全不相关。似然函数的作用是计算给定参数theta下,观测到现有样本的概率乘积,而非生成新的随机数。
  • 输入参数缺失:似然函数需要传入实际观测的样本数据才能计算对应似然值,你当前的函数仅传入theta和样本量n,没有用到实际观测的电池寿命数据,计算结果完全无意义。
  • 绘图参数不合理:你设置theta的取值范围为0到30,仅取10个采样点,绘制的曲线会非常粗糙,且如果采用率参数形式的指数分布,该参数范围也不符合实际似然值的分布区间,theta=0时似然值无意义,需要避开。

修正代码

指数分布有两种常见参数化形式,你可以根据自己的定义选择对应代码:

形式1:率参数θ,Exp(θ)的概率密度为$f(x;\theta)=\theta e^{-\theta x}$,期望为$1/\theta$

# 定义指数分布似然函数
likelihood <- function(theta, obs) {
  n <- length(obs)
  sum_obs <- sum(obs)
  return(theta^n * exp(-theta * sum_obs))
}

# 观测样本
ac <- c(3, 33, 12, 22, 23)
# 调整theta取值范围,增加采样点保证平滑
theta <- seq(from = 0.001, to = 0.5, length = 200)
# 计算对应似然值
L_val <- likelihood(theta, obs = ac)

# 绘图
plot(theta, L_val, type = "l", xlab = expression(theta),
     ylab = expression(L(theta)), col = "blue",
     main = "极大似然函数图像")
# 可选:标注极大似然估计点
mle <- 1/mean(ac)
abline(v = mle, col = "red", lty = 2)
text(mle + 0.02, max(L_val)*0.9, paste0("MLE≈", round(mle, 3)), col = "red")

形式2:尺度参数θ,Exp(θ)的概率密度为$f(x;\theta)=\frac{1}{\theta}e^{-x/\theta}$,期望为$\theta$(符合你原代码theta的取值范围设置)

# 定义指数分布似然函数
likelihood <- function(theta, obs) {
  n <- length(obs)
  sum_obs <- sum(obs)
  return((1/theta)^n * exp(-sum_obs/theta))
}

# 观测样本
ac <- c(3, 33, 12, 22, 23)
# 调整theta取值范围,增加采样点保证平滑
theta <- seq(from = 1, to = 50, length = 200)
# 计算对应似然值
L_val <- likelihood(theta, obs = ac)

# 绘图
plot(theta, L_val, type = "l", xlab = expression(theta),
     ylab = expression(L(theta)), col = "blue",
     main = "极大似然函数图像")
# 可选:标注极大似然估计点
mle <- mean(ac)
abline(v = mle, col = "red", lty = 2)
text(mle + 1, max(L_val)*0.9, paste0("MLE≈", round(mle, 2)), col = "red")

内容的提问来源于stack exchange,提问作者Abbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:48:04