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

截断新广义Poisson Lindley分布参数估计:β1估计值异常

问题分析与修正方案

针对你在截断新广义Poisson Lindley分布参数MLE估计中beta1结果异常的问题,以下是代码中的关键问题排查及修正:

1. 似然函数未使用传入的数据集参数

你的lik函数定义了data参数,但内部直接调用全局变量Tx,逻辑不严谨且易引发错误。修正后让函数依赖传入参数而非全局变量:

lik=function(par, data, Tr){
  alpha1=par[1]; beta1=par[2]
  ll=-sum(log(UT(data, alpha1, beta1, Tr)))
  return(ll)
}

2. 未施加参数非负约束

alpha1和beta1均为分布的正参数,默认的Nelder-Mead算法不支持约束,易出现参数非正的迭代结果,导致对数似然计算异常。改用支持约束的L-BFGS-B算法,并设置参数下界:

pp=optim(par=c(alpha1=0.1, beta1=2), 
         fn=lik, 
         data=Tx, 
         Tr=Tr,
         method="L-BFGS-B",
         lower=c(1e-4, 1e-4),  # 避免参数为0或负数
         control = list(parscale=c(alpha1=0.1, beta1=1)))

同时将初始值设为更接近真实值(alpha1=0.1),帮助算法收敛到正确解。

3. 数据生成时的概率归一化

原始数据生成中,marginal返回的概率可能因数值精度问题总和略偏离1,需归一化后再采样:

for(i in 1:10000){
  a=0:1000
  pr1=marginal(alpha1,beta1,a)
  pr1=pr1/sum(pr1)  # 归一化概率向量
  y1=sample(a,1,replace=TRUE,prob=pr1)
  t1[i]=y1
}

4. 截断分布的生存函数验证

检查UT函数中cf(即CDF(Tr))的公式是否准确,可通过累加PMF验证:

# 对比公式计算与累加PMF得到的CDF
cdf_check = sum(marginal(alpha1, beta1, 0:Tr))
cf_original = ((alpha1+beta1)*(1+alpha1)^(Tr+2)-(alpha1+alpha1^2+2*alpha1*beta1+alpha1*beta1*Tr+beta1))/((alpha1+beta1)*(1+alpha1)^(Tr+2))
cat("累加PMF的CDF:", cdf_check, "\n公式计算的CDF:", cf_original, "\n")

若两者差异较大,说明cf公式推导有误,需重新核对截断分布的推导过程。

修正后关键代码片段

# 修正后的似然函数
lik=function(par, data, Tr){
  alpha1=par[1]; beta1=par[2]
  if(alpha1 <= 0 || beta1 <=0) return(1e10)  # 无效参数返回极大值
  ll=-sum(log(UT(data, alpha1, beta1, Tr)))
  return(ll)
}

# 带约束的MLE估计
pp=optim(par=c(alpha1=0.1, beta1=2), 
         fn=lik, 
         data=Tx, 
         Tr=Tr,
         method="L-BFGS-B",
         lower=c(1e-4, 1e-4),
         control = list(parscale=c(alpha1=0.1, beta1=1)))

# 查看估计结果
pp$par

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:15:08