如何在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,可优先怀疑服从三参数对数正态分布。 - 嵌套分布假设检验
两类分布属于嵌套关系,可通过似然比检验判断优化收益是否显著:- 分别拟合LN2和LN3的分布参数,LN2输出结果为均值μ、方差σ²;LN3输出结果为位置参数γ、均值μ、方差σ²
- 计算似然比统计量:
-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
相关产品推荐
相关产品推荐

