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

如何在R中判断数据服从二参数或三参数对数正态分布

二参数/三参数对数正态分布判别方法

两者核心差异:二参数对数正态分布(LN2)的定义域为x>0,本质是ln(x)服从正态分布;三参数对数正态分布(LN3)多了一个位置参数γ,定义域为x>γ,本质是ln(x-γ)服从正态分布,当γ=0时LN3直接退化为LN2。因此判别核心是检验位置参数γ是否显著不为0。

具体操作步骤

  • 探索性分析前置验证
    先计算变量c4的最小值,从你给出的模拟代码来看,c4的理论最小值为(0.14^4)*360.5≈0.137,远大于0,此时γ大概率显著不为0,可优先怀疑服从三参数对数正态分布。
  • 嵌套分布假设检验
    两类分布属于嵌套关系,可通过似然比检验判断优化收益是否显著:
    1. 分别拟合LN2和LN3的分布参数,LN2输出结果为均值μ、方差σ²;LN3输出结果为位置参数γ、均值μ、方差σ²
    2. 计算似然比统计量:-2ln(L_LN2 / L_LN3),该统计量服从自由度为1的卡方分布。如果计算得到的p值小于预设显著性水平(通常取0.05),则拒绝γ=0的原假设,判定应当使用LN3,否则选择LN2即可。
  • 拟合优度交叉验证
    分别对两类拟合后的分布做KS检验,或绘制PP图/QQ图对比拟合偏差,进一步确认拟合效果更优的分布类型。

R语言实现参考代码

# 依赖包安装(首次运行执行):install.packages("fitdistrplus")、install.packages("ActuDistns")
library(fitdistrplus)
library(ActuDistns)

# 生成你使用的c4数据
set.seed(123)
sample1 = runif(1500, 0.14,0.26)
sample2 = runif(1500, 0.14,0.26)
sample3 = runif(1500, 0.14,0.26)
sample4 = runif(1500, 0.14,0.26)
sample_product = sample1*sample2*sample3*sample4
c4 = sample_product*360.5

# 拟合二参数对数正态分布
fit_ln2 <- fitdist(c4, "lnorm")
# 拟合三参数对数正态分布
fit_ln3 <- fitdist(c4, "lnorm3", start = list(meanlog=mean(log(c4)), sdlog=sd(log(c4)), shape=min(c4)*0.9))

# 似然比检验计算
lr_stat <- -2*(fit_ln2$loglik - fit_ln3$loglik)
p_value <- pchisq(lr_stat, df=1, lower.tail = F)
print(paste0("似然比检验p值:", round(p_value,4)))

# 输出两类分布的拟合优度指标对比
gofstat(list(fit_ln2, fit_ln3), fitnames = c("二参数对数正态", "三参数对数正态"))

运行代码后如果p值小于0.05,即可判定三参数对数正态的拟合效果显著更优,应当选择三参数对数正态分布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 06:15:10