第3章 变量分类与影响域分析:控制变量、独立变量、干扰变量、协变量定义
3.1 适用场景
本章变量分类方法适用于以下机器人A/B测试场景:
- 多变量同时测试时需分离各变量效应
- 环境参数(光照、地面摩擦、声音噪声)无法完全复制
- 机器人自身状态(电池电量、关节温度、传感器漂移)随时间变化
- 需要引入统计协变量(如时间戳、负载序列)提升测试灵敏度
- 跨平台/跨代机器人测试时的变量对齐
💡 提示:当测试结果出现不可解释的波动时,优先检查是否遗漏了干扰变量或未统计协变量。
3.2 前置条件
- 测试假设明确:已写出待验证的零假设与备择假设
- 变量清单初稿:包含所有可能影响测试指标的可测量量
- 机器人平台接口开放:能通过命令/API读取或设置参数(速度、PID增益、传感器采样率等)
- 数据采集系统就绪:至少记录 时间戳、测试对象ID、待测指标(如成功率、路径偏差、碰撞次数)
- 环境传感器部署:光照计、测距仪、IMU等外设数据可实时回传
⚠️ 常见陷阱:将不可控的环境噪声直接视为独立变量,会导致效应量估计偏差。必须在分类前分离可控与不可控因素。
3.3 操作步骤
- 列出候选变量:从测试设计文档、传感器列表、机器人状态字典中汇总所有可记录值。
- 按可控性分组:区分测试中可人为设定/调节的量 vs. 只能被动记录的量。
- 标注影响域:用因果图标出每个变量直接影响或被影响的对象(机器人本体、环境、算法输出)。
- 分配变量角色:按下列规则赋予类别——
- 交叉验证:至少由两位工程师独立分类,不一致处集体裁决。
| 变量类型 | 定义 | 机器人测试例子 | 影响域 | 控制方式 |
|---|---|---|---|---|
| 控制变量 | 在测试中保持恒定的量,确保重复条件一致 | 电池电压稳定在11.5V±0.1V | 系统稳态特性 | 闭环稳压器 / 容量筛选 |
| 独立变量 | 主动调节以观察效应变化的因素 | 驱动电机PID的P增益(1.0/2.0/3.0) | 运动轨迹精度 | ROS参数服务器动态调参 |
| 干扰变量 | 非有意改变但会影响结果的外部或内部噪声 | 室内行人经过时的射频干扰 | 通信延迟 / 传感器误触发 | 屏蔽 / 随机化 / 统计剔除 |
| 协变量 | 可记录但不作为测试因子,用于统计校正的连续变量 | 实验进行时的CPU温度 | 计算性能波动 | ANCOVA纳入回归模型 |
关键判定逻辑:
- 若你能在测试前设定其值 → 独立变量(欲改变)或控制变量(欲固定)
- 若你不能设定但能被动记录且与待测指标相关 → 协变量
- 若你既不能设定也难以记录,但怀疑有影响 → 干扰变量(需用随机化/屏蔽解除)
3.4 输入输出物
| 类型 | 名称 | 格式 | 责任方 |
|---|---|---|---|
| 输入 | 测试设计文档 | PDF / Wiki | 算法工程师 |
| 输入 | 机器人平台参数清单 | YAML / JSON | 平台运维 |
| 输入 | 环境传感器布点图 | SVG / 表格 | 测试部署 |
| 输出 | 变量分类登记表 | Excel / 代码注释 | 测试工程师 |
| 输出 | 影响域矩阵(Dependency Matrix) | Markdown 表格 | 测试工程师 |
| 输出 | 分类决策日志 | Git commit messages | 全员 |
# 变量分类登记表示例(YAML片段)
variables:
- name: pid_p_gain
type: independent
domain: controller
fixed_value: null # 随测试条件变化
unit: ""
influence_target: trajectory_overshoot
- name: floor_friction
type: disturbing
domain: environment
fixed_value: null
unit: dimensionless
mitigation: randomize_floor_patches
- name: battery_voltage
type: control
domain: power
fixed_value: 11.5
unit: V
tolerance: 0.1
- name: trial_index
type: covariate
domain: procedure
description: continuous ordinal to detect time drift
model: linear
3.5 责任边界
- 测试工程师:主导变量分类,填写登记表,组织交叉验证。
- 平台运维:提供机器人参数接口说明,确认控制变量能否被真实锁定。
- 数据科学家:设计协变量统计模型(ANCOVA / 线性混合模型),判断干扰变量是否需要剔除或分层。
- 质量保证:审核变量分类是否覆盖全部候选变量,影响域有无矛盾。
3.6 记录材料
- 变量分类登记表(版本控制纳入
test_plan/目录) - 影响域分析报告(含因果图截图或 SVG)
- 分类决策争议记录(Wiki 或 Issue 讨论链接)
- 协变量预处理脚本(如
scripts/covariate_normalize.py)
3.7 异常处理
| 异常现象 | 可能原因 | 处理措施 |
|---|---|---|
| 同一变量被归为冲突类别 | 对“可控性”定义不一致 | 暂停分类,统一用“测试人员能否在实验前用数值设定”作为判断标准 |
| 两个变量的影响域完全重叠 | 特征共线性风险 | 标记为“潜在共线”,后续通过方差膨胀因子(VIF)检测,必要时合并为复合变量 |
| 协变量采集频率不足 | 传感器采样率低于测试帧率 | 提高采集频率或对协变量进行插值,记录插值方法到代码注释 |
| 干扰变量无法通过随机化消除 | 干扰源分布与测试区域不均匀 | 改用分层随机化,或将其升级为协变量纳入统计模型 |
3.8 验收标准
- 所有候选变量(≥90% 初始清单)均被归入四类中的一类,无“未分类”项目。
- 控制变量的固定值在测试日志中可验证(连续10次记录的偏差≤设定容差)。
- 独立变量的变化范围与步长在设计文档中有书面依据。
- 干扰变量至少有一种缓解措施(随机化、屏蔽、剔除、统计校正)。
- 协变量已与主测试指标一起纳入数据收集脚本,并预留回归分析列。
- 影响域矩阵中不存在“循环依赖”(变量A影响B,B又通过间接路径影响A)而未加注。