4. 探索性数据分析与分布初判
在完成输入参数的识别与数据采集之后,我们手里往往只有一张原始数据表:几百到几千行、若干列参数值。此时直接套用某个分布去拟合,风险很高——数据里可能藏着双峰、离群点、截断或量测分辨率造成的堆积,这些结构一旦被忽略,后续抽样就会系统性偏离真实不确定性。探索性数据分析(EDA)的任务,就是在拟合之前先用图形把数据的"形状"看清楚,并据此形成候选分布族的初步判断。
本节聚焦四类最常用的可视化工具:直方图、经验累积分布函数(ECDF)、箱线图与分位数图(Q-Q 图)。它们各自回答不同的问题,组合使用才能形成较完整的判断。
四类图形的分工
直方图回答"数据大致长什么样"。它把取值范围切成若干等宽区间,统计落入每个区间的样本数。观察要点包括:峰的数量(单峰还是双峰)、对称性(是否明显右偏)、尾部厚度(是否有长尾)、端点行为(是否在某个值处突然截断)。分箱数对形状影响很大,样本量 n 在数百量级时,可先用 Sturges 规则 k≈1+3.322·log₁₀n 起步,再上下调整观察稳定性;若形状随分箱数剧烈变化,说明样本不足或结构复杂,需要谨慎。
ECDF回答"任意阈值以下占多大比例"。它不需要分箱,因而没有分箱主观性,对样本量小的情况尤其稳健。ECDF 的斜率反映局部密度:斜率陡说明该区间样本密集,斜率平说明稀疏。两个 ECDF 的对比还能直观看出两组数据(例如不同工况、不同批次)是否整体平移或形状不同。
箱线图回答"中心、离散与离群点在哪里"。五数概括(最小值、Q1、中位数、Q3、最大值)加上 1.5 倍四分位距(IQR)规则的离群点标记,能快速暴露偏态(中位数不居中)和异常值数量。注意:箱线图对双峰不敏感,不能单独用来判断分布族。
分位数图(Q-Q 图)回答"数据与某个候选分布有多接近"。把样本分位数与候选分布的理论分位数作图,若数据来自该分布,点应大致落在 45° 参考线上。尾部偏离提示尾部行为不符(例如正态拟合下两端上翘说明实际尾部更厚),中部弯曲提示偏态或位置—尺度不匹配。Q-Q 图是"初判"阶段最有力的确认工具,但它是针对特定候选分布逐一检验的,因此需要先用前三类图缩小候选范围。
从图形到候选分布族的判断逻辑
四类图形不是并列的,而是有先后与互补关系。一个可操作的判断顺序是:先用直方图与 ECDF 确定"单峰/多峰、对称/偏斜、有界/无界、尾部厚薄",再用箱线图核对离群点规模与中位数位置,最后用 Q-Q 图对 2~3 个候选分布逐一检验,看哪个在主体段与尾部都贴合得更好。
把常见形状与候选族对应起来,可以形成如下经验映射(仅作初判起点,最终仍需拟合优度检验):
| 图形特征 | 可能的候选分布族 | 需要进一步确认的点 |
|---|---|---|
| 单峰、对称、尾部中等 | 正态、t 分布 | Q-Q 两端是否上翘(厚尾则倾向 t) |
| 单峰、右偏、取值非负 | 对数正态、伽马、威布尔 | 取对数后是否近似对称;下端是否趋零 |
| 双峰或明显分组 | 混合分布,或数据本身含两个子总体 | 先追查分组变量(工况、批次、测点) |
| 在某一端突然截断 | 截断正态、截断对数正态 | 截断点是物理限值还是筛选规则造成 |
| 离散取值、在整数处堆积 | 泊松、负二项、二项 | 方差与均值的关系(是否过度离散) |
一个可复现的示例
假设某结构参数(教学假设数据,n=300)的直方图呈单峰右偏、取值全部为正、上尾较长;ECDF 中段陡、尾部平缓;箱线图中位数靠近 Q1、上须明显长于下须,1.5·IQR 之外有 4 个离群点;对正态做 Q-Q 图时两端明显上翘。综合判断:右偏、非负、厚尾,候选族优先考虑对数正态与威布尔,正态仅作为对照。下一步应对数据取自然对数后再看直方图与 Q-Q 图——若对数变换后近似对称且 Q-Q 贴合,则对数正态的可信度显著提高。
用 Python 快速完成上述探索的骨架如下(示例代码,数据需替换为实际样本):
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
x = np.asarray(samples) # 一维样本数组
fig, ax = plt.subplots(2, 2, figsize=(10, 8))
# ① 直方图 + 核密度
ax[0, 0].hist(x, bins=20, density=True, alpha=0.6, color="#5aa9e6")
ax[0, 0].set_title("直方图")
# ② ECDF
xs = np.sort(x)
ys = np.arange(1, len(xs) + 1) / len(xs)
ax[0, 1].step(xs, ys, where="post", color="#1f8a70")
ax[0, 1].set_title("经验累积分布")
# ③ 箱线图
ax[1, 0].boxplot(x, vert=False)
ax[1, 0].set_title("箱线图")
# ④ Q-Q 图(以对数正态为候选)
stats.probplot(np.log(x), dist="norm", plot=ax[1, 1])
ax[1, 1].set_title("ln(x) 的正态 Q-Q 图")
plt.tight_layout()
plt.show()
注意最后一张图的做法:对右偏非负数据,直接对原值做正态 Q-Q 图几乎必然失败,正确做法是先取对数再检验其正态性,这等价于检验原值是否服从对数正态。这一"变换后再检验"的思路,是把图形判读转化为候选分布族结论的关键一步。
初判结论的记录方式
探索性分析的产出不应只是几张图,而应形成一条可追溯的判断记录,供后续拟合与校验环节复核。建议至少记录:样本量与来源、各图形的关键观察(峰数、偏态方向、离群点数量、Q-Q 偏离位置)、候选分布族排序及理由、以及被排除的分布族及排除依据。这样在后续做拟合优度检验(如 K-S、A-D 检验)时,若检验结果与初判冲突,就能快速定位是数据问题还是模型假设问题。
需要强调的是,EDA 阶段的结论是"候选"而非"定论"。图形判读带有主观性,不同人看同一张直方图可能给出不同分箱下的不同印象。因此初判的作用是缩小搜索空间、避免明显错误的分布假设,真正的取舍仍要交给参数估计与拟合优度检验。把这一步做扎实,后续的分布拟合才不至于在错误的方向上反复调整。