3. 数据准备与探索性分析
非线性拟合的效果,往往在按下“拟合”按钮之前就已经被数据质量决定了。一个常见的误区是:拿到 (x, y) 数据就直接套用指数、幂函数或 Logistic 模型,结果残差图呈现明显的喇叭形或系统性弯曲,却误以为是模型选错了。实际上,很多“拟合不好”的根源在于数据准备阶段没有处理好缺失、重复、量纲差异、异常点和变量形态。本节围绕四个动作展开:数据清洗、异常值初筛、变量变换、散点图诊断,目标是让进入拟合器的数据“干净、可比、形态可辨”。
一、数据清洗:先保证每一行都可信
数据清洗不是简单删掉空值,而是逐项确认观测记录的有效性。对非线性拟合而言,至少需要检查以下几类问题:
- 缺失与无效编码:传感器掉线常被记为 -999、NaN 或空字符串。若直接参与计算,-999 会被当作真实响应值,严重扭曲曲线。应统一转换为缺失标记,再决定删除还是插补。
- 重复观测:同一 x 下多次测量是正常的,但完全相同的 (x, y) 重复行若来自导出错误,会人为放大该点权重。应先按业务主键去重,保留真实重复测量。
- 量纲与单位不一致:温度混用 ℃ 与 K、浓度混用 mg/L 与 g/L,会让参数估计完全失真。清洗阶段应统一到同一单位体系,并在数据字典中记录。
- 记录顺序与配对错误:多列数据来自不同文件按行拼接时,容易出现 x 与 y 错位。可通过时间戳或样本编号核对配对关系。
一个实用的做法是先输出一份“数据体检表”:样本量、缺失数、重复数、各变量最小值/最大值/均值/标准差。若某变量的最大值比中位数大两个数量级以上,就要警惕单位错误或异常点,而不是急着建模。
二、异常值初筛:区分“坏点”与“真实极端”
异常值初筛的目的不是武断删除,而是标记并解释。常用手段有三类:
1. 单变量规则。对近似对称的变量可用 3σ 或 IQR 规则:低于 Q1−1.5×IQR 或高于 Q3+1.5×IQR 的点标记为疑似异常。对明显偏态的变量(如浓度、时长),直接套 3σ 会误伤大量正常点,应先取对数再判断。
2. 残差初筛。先用一个简单模型(如线性或二次多项式)粗拟合,计算标准化残差,|ri| > 3 的点优先复核。注意这一步只是“初筛”,不能把粗拟合的残差当作最终结论。
3. 业务合理性判断。某次实验的响应值突然高出十倍,可能是仪器饱和、稀释错误或记录串行。此时应回查原始记录,而不是仅靠统计规则删除。
三、变量变换:让曲线形态更接近模型假设
非线性拟合并不要求变量必须“线性化”,但合理的变换能显著改善数值稳定性与初值质量。常见变换及其适用场景如下:
| 变换 | 适用信号 | 注意事项 |
|---|---|---|
| y → ln y | 指数增长/衰减、乘性误差 | y 必须为正;变换后残差含义改变 |
| x → ln x | 幂律关系、跨度大的正自变量 | x 必须为正;零点附近慎用 |
| y → 1/y | 饱和型、双曲线型 | y 接近 0 时数值不稳定 |
| logit(p) = ln(p/(1−p)) | 比例/概率型响应(0<p<1) | p=0 或 1 需做边界修正 |
| 中心化/标准化 | 自变量量级差异大、多项式拟合 | 不改变曲线形状,只改善条件数 |
需要强调:变换会改变误差结构。若原始数据是加性噪声,取对数后噪声变为乘性,普通最小二乘的假设随之改变。因此变换后应重新检查残差是否近似同方差;若不然,应考虑加权拟合或在原尺度上直接做非线性最小二乘。
四、散点图诊断:在拟合前“看见”模型
散点图是数据准备阶段信息密度最高的工具。它至少能回答四个问题:关系是否单调、是否存在饱和或拐点、噪声是否随 x 增大而扩散、是否存在分组结构。下面这张图展示了一个典型的诊断流程:原始散点先暴露异方差与离群点,经对数变换后线性趋势更清晰,同时保留了对数尺度下的残差检查。
读图时建议按顺序自问:点云是单调上升还是先升后平?拐点大约在哪个 x 区间?高 x 区域的纵向散布是否明显变大?是否存在与主体趋势脱节的孤立点?如果散点呈现明显的 S 形,应优先考虑 Logistic 或 Gompertz 类模型;如果呈幂律直线化特征,可尝试双对数坐标;如果噪声随响应增大而扩散,则应考虑对数变换或加权最小二乘。散点图还能暴露“分组”问题:不同批次、不同温度下的数据若混在一起,可能形成两条平行曲线,此时应引入分组变量或分别拟合,而不是用一个模型硬套全部数据。
五、把四步串成可复用的准备流程
将上述动作组织成一条可执行链路:先做数据体检并统一单位,再按业务规则与统计规则标记异常值并留痕,接着根据散点形态选择变换(对数、倒数、logit 或标准化),最后在变换前后各画一次散点图与粗残差图,确认趋势可辨、噪声结构合理。只有通过这一步“体检”的数据,才适合进入非线性最小二乘或极大似然拟合。需要提醒的是,探索性分析阶段看到的模式会直接影响模型选择,因此应保留分析脚本与图表版本,避免后续反复调整时丢失判断依据。