R中如何使用PearsonFitM()解读皮尔逊分布拟合结果并绘图
R中基于PearsonDS包实现皮尔逊分布拟合、绘图与验证
一、pearsonFitM()返回值含义
传入前四阶矩调用pearsonFitM()得到的结果中,各字段作用如下:
type:皮尔逊分布族的具体分型,取值范围为1-7,由传入的偏度、峰度组合自动判定。不同分型对应不同的概率密度形式:1型属于Beta分布族、4型为无界偏态厚尾分布、5型属于逆Gamma分布族、6型属于F分布族、7型属于t分布族。a、b:分布的形状参数,是决定分布偏斜程度、尾部厚度的核心参数。不同分型下参数的数学定义存在差异,不需要手动换算,直接传入包内置的密度、分布、分位数函数即可调用。location:位置参数,控制分布整体的平移幅度,与传入的样本均值直接相关。scale:尺度参数,控制分布的拉伸/压缩幅度,与传入的样本方差直接相关。
注意:
pearsonFitM()要求传入的峰度为超额峰度,即常规计算得到的峰度值减3,直接传入原始峰度会得到完全错误的分型和参数。
二、拟合效果绘图方法
完成拟合后,通过两类图可以直观判断匹配程度,以下代码可直接运行,替换你自己的样本数据变量名即可:
library(PearsonDS) # 第一步:拟合模型,替换为你自己计算的样本矩 # mu=样本均值,var=样本方差,skew=样本偏度,kurt=样本原始峰度 fit <- pearsonFitM(mean = mu, variance = var, skewness = skew, kurtosis = kurt - 3) # 第二步:绘制直方图+理论密度对比图 hist(your_data, freq = FALSE, breaks = "FD", main = "皮尔逊分布拟合密度对比", xlab = "观测值", col = "lightgray") # 生成拟合分布的密度坐标 x_seq <- seq(min(your_data), max(your_data), length.out = 1000) lines(x_seq, dpearson(x_seq, params = fit), col = "red", lwd = 2) legend("topright", legend = c("实际数据直方图", "拟合皮尔逊分布密度"), fill = c("lightgray", NA), col = c(NA, "red"), lwd = c(NA, 2), bty = "n") # 第三步:绘制经验CDF与理论CDF对比图(不受直方图分组方式干扰,更适合判断尾部拟合效果) plot(ecdf(your_data), main = "皮尔逊分布拟合CDF对比", xlab = "观测值", ylab = "累积概率", col = "gray", lwd = 1) lines(x_seq, ppearson(x_seq, params = fit), col = "blue", lwd = 2) legend("bottomright", legend = c("实际数据经验CDF", "拟合皮尔逊分布CDF"), col = c("gray", "blue"), lwd = 2, bty = "n")
如果红色密度线和直方图轮廓基本重合、蓝色CDF线和灰色经验CDF线几乎重叠,说明拟合效果较好。
三、量化拟合优度验证
除了可视化,还可以通过两个方法量化判断拟合效果:
- K-S检验:检验样本是否来自拟合得到的理论分布
ks_res <- ks.test(your_data, "ppearson", params = fit) print(ks_res)
若检验p值大于0.05,说明在95%置信水平下,无法拒绝数据服从该拟合皮尔逊分布的原假设。
- 分位点对比:对比关键分位点的实际值和理论值,判断局部偏差
check_probs <- c(0.01, 0.05, 0.25, 0.5, 0.75, 0.95, 0.99) q_compare <- data.frame( 样本实际分位数 = quantile(your_data, probs = check_probs), 拟合分布理论分位数 = qpearson(check_probs, params = fit) ) print(q_compare)
两个分位数的差值越小,对应位置的拟合效果越好,重点关注1%、99%这类尾部分位点的偏差。
内容的提问来源于stack exchange,提问作者Anna Morelli
相关产品推荐
相关产品推荐

