我们的配方开发项目团队准备了一份小型实验设计(DOE)。该项目需要考察大量不同的测量响应,以研究如何优化一种新型实验涂料配方中的颜料稳定性。然而,团队在分析结果时难以获得明确的指导。通过使用 JMP 的数据重构工具,可以将现有数据重新格式化为易于利用 SLS 和逻辑模型进行分析的格式,从而得出对稳定性有关键影响的因素,以及特定因素组合产生令人满意结果的概率。
大家好,我是John Steele。我在阿克苏诺贝尔公司装饰涂料业务的研发部门工作。我将讲解如何使用JMP软件重构我们团队遇到的颜料稳定性优化问题的实验设计(DoE)数据。
最初,我们设计了一个实验方案(DoE),旨在研究三种不同稳定剂在涂料体系中的影响。这些稳定剂可以防止颜料絮凝,从而避免最终产品出现问题。最初的实验方案包含17个实验,考察了这些稳定剂的不同相互作用和浓度水平。作为颜料稳定性测试的一部分,每个实验方案都测试了五种不同的颜料。这些颜料需要进行剪切稳定性和混合稳定性测试,并在三个不同的时间点进行测试。
该设计完全按照一个合理的实验设计流程进行,所有规则和注意事项都得到了遵守。然而,在数据分析阶段,我们遇到了一些问题。
在本实验设计中,剪切或混合试验、不同颜料材料以及试验时间点的每种不同组合均作为单独的响应变量输入并进行单独分析。总共,这17个独立的实验设计运行产生了25个单独的响应变量。
部分结果建模效果相当不错,正如我们从上方的图表中所见。它们的线性关系相当笔直,R² 值也相当高。然而,另一些结果,正如我们从下方的两张图表中所见,建模效果不佳。噪声较大,R² 值非常低。
遗憾的是,并没有明显的规律可以判断哪些回复能够正常分析,哪些不能。部分原因是某些回复的数据范围非常窄,仅涵盖了很小的数值范围,而且这些数值之间的差异并不大。
如果我们看一下数据的初始结构,就会发现每个模型都运行了不同浓度的三种稳定剂。正如我所说,这些模型在五种不同的颜料上进行了测试,每种颜料又分别在三个时间点进行了测试。对于颜料和时间点的每种组合,以及每种不同的测试类型,都重复了上述过程。
尽管这些数据是作为单独的响应输入的,但您可以将其视为您正在分析的数据中的一个因素。本次测试是质量控制测试。它们不能像传统实验设计中的常规因素那样处理,因为传统实验设计要求在特定的时间点使用特定的颜色进行测试。显然,由于实验设计的运作方式,它无法涵盖所有可能的组合。
为了便于分析,我们可以将这些因素视为伪隐藏因素,并重新构建数据以获得更好的分析结果。那么问题来了,我们该如何重新构建这些数据呢?
如果我打开 JMP,这里可以看到设计本身的初始数据。我们有 ID 运行结果,有不同稳定器水平形式的各种因素,还有所有单独的响应。这里只填充了一些用于演示的虚拟数据。我们要做的是将每个单独的响应合并成一个单一的响应。
我们可以使用 JMP 的一些非常实用的表格和数据操作工具来实现这一点。第一步是使用堆叠功能,然后我们可以选择收集所有要合并到同一列中的单个响应的列。如果我们点击“堆叠列”,就会将所有这些列放入此处。
如果我们向下滚动到最底部,就可以选择要保留的数据表中的哪些初始列。我们想要保留 ID 和因子。如果需要,我们还可以更改数据和响应标签以及列标题。点击确定后,我们将得到一个新的数据表,其中包含各个运行的 ID、因子,所有响应现在都位于同一列中,对应的响应名称则位于其旁边的另一列中。
从初始数据表中,所有数据都已设置,使得 ID1 的所有结果都为 1,ID2 的所有结果都为 2。您可以看到,如果我们选择 ID1 的行,所有数据都已传输过来。如果您需要定期执行此类流程,可以使用 JMP 的脚本构建器或一些工作流功能来实现自动化。但是,在本例中,这只是我们进行的一次性测试。
如果我们切换到下一个表格,可以看到目前标签中包含了序列号、测试时间和测试类型的混合信息。从因子分析的角度来看,这本身并没有太大用处。我们需要将这些信息拆分出来,这同样可以使用一些内置工具来实现。依次点击“列”、“实用工具”和“文本列”,选中这些列后,我们可以定义一个分隔符。在本例中,我们将使用逗号来分隔文本字符串。
输入逗号,然后点击确定。现在可以看到,我们新增了几列,分别包含材料一、材料二、材料三等等。测试类型和与之关联的时间点标签也已分离出来。我们可以将它们作为单独的因素进行处理,并完全删除初始列。
之后,我们可以进行一些额外的格式调整。我们可以更改列名,对于时间点,我们甚至可以将其从文本字符串重新编码为数值之类的格式,这同样可以使用 JMP 的一些内置函数来实现。
如果我们在菜单中选择“重新编码”并进行原地更改,我们可以将时间 1 改为 1,时间 2 改为 2,时间 3 改为 3。我们直接进行原地重新编码。所有这些值都已更改。然后在“列信息”下,我们可以将其从字符型变量更改为数值型变量或因子型变量。我们可以将其保持为名义型,也可以将其更改为连续型或序数型。在本例中,我将将其更改为序数型。
完成所有格式调整后,根据我的个人经验,我知道这种特定类型的测试,也就是我们最终得到的实际数值,其实并不那么重要。更重要的是测试结果是否通过。我们可以将这些个体结果转换成通过或失败的判定标准,用于建模。
在这个数据表中,结果值略有不同,但我们在最后一列单独列出了通过或失败。如果我们进入“列信息”部分,可以看到在“列属性”下,我们添加了“值颜色”和“公式”两个部分。
这里我们使用了一些 if 语句来检查结果是否高于或低于某个特定值,并根据该阈值返回结果是失败、通过,还是因为没有输入数据而返回空白。值颜色部分还允许我们指定与这些值关联的数据点或单元格的颜色。在本例中,通过为绿色,失败为红色。
当开始对这些数据进行建模时,我们可以保持数据格式不变,然后使用测试的 by 变量进行建模,分别对剪切试验和混合试验进行建模,这有时更方便;或者我们可以拆分这些数据,这本质上是堆叠过程的逆过程,这样我们就可以在一列中得到剪切试验的结果,在另一列中得到混合试验的结果。
为此,我们需要使用 JMP 表格工具中的拆分功能,根据测试结果(合格或不合格)和测试类型进行拆分。然后,如果再按 ID 和材料进行分组,就能确保数据保留在同一行中。同样,我们可以选择要保留的列。这里,我们选择保留 ID 和因子。此外,我们还要确保将时间点也包含在内。最终,我们将得到一个数据表,其中包含混合测试和剪切测试的单独列。
接下来,我们可以开始研究这些数据的实际建模。现在我们有了这些结果的合格/不合格标准。与我们最初针对此特定问题使用的标准线性回归方法不同,我们可以开始使用逻辑回归和分类方法。如果我们运行我已经准备好的模型之一,我们最初得到的 R² 值要高得多,达到了 0.9 左右。此外,我们还能获得影响结果的各个因素的相对影响以及这些因素之间的交互作用。
另一个实用功能是,向下滚动页面,你会看到一个名为“混淆矩阵”的部分,它或许能更准确地描述分类模型的质量。根据结果的真假(1 或 0),它会告诉你,有多少个真假结果被错误地预测为真,又有多少个假假结果被错误地预测为假。在本例中,整个测试数据集中只有两个结果被错误分类。
为了更深入地了解潜在的行为和交互作用,我们可以利用数据模拟将这些数据可视化。对于逻辑回归模型,模拟工具位于轮廓分析器下,而不是像标准线性回归和数值型模型那样位于分析器下。
然后,我们可以开始指定要模拟数据的区域以及要模拟的数据点数量。这样,在模拟过程中,我们不仅可以得到一系列随机组合的因素、指定的材料水平和时间点,以及它们最可能的结果,还可以得到结果属于合格还是不合格的概率。
如你所见,有些数值为 1,意味着几乎肯定会通过,而另一些数值则只有大约 60% 的概率通过。
我们可以把这些概率值全部提取出来,然后根据我们关注的因素(例如稳定剂、颜料和时间点)绘制图表,得到类似这样的图形。我刚刚取消选中了单元格。这里,一个轴代表稳定剂 1 的浓度。稳定剂 2 和稳定剂 3 的阈值范围也在这里。这些是单元格的坐标轴。底部的坐标轴则代表不同的颜料材料。
然后,所有这些区域都会根据其通过或失败的概率进行着色。而一开始,我们对某种材料是否会产生某种结果并没有清晰的概念,对实际情况也缺乏把握。通过这种基于重构数据的可视化图表,我们可以立即看到哪些区域是绿色的,哪些区域是红色的,从而能够更深入地了解哪些区域可能存在潜在的故障问题。
您可以看到,材料 4 和 5 通常呈现偏红的颜色,尤其是在稳定剂 2 含量较低的情况下。它们更有可能存在潜在问题。而材料 1 和材料 3 在大多数情况下几乎完全呈现绿色。如果您想从该图表中获得更具体的输出结果,可以添加局部数据过滤器,例如,只关注材料 1 和材料 3,并进行对比。
总之,你的实验设计的结果和输出可能包含一些你最初没有考虑到的隐藏因素或类似因素的属性。如果不考虑这些因素,你最终可能会得到模型效果很差的数据。但这并不意味着你的数据就毫无价值。有时候,你只需要对现有数据进行一些细微的结构调整,就能从中挖掘出更大的价值和效用。值得庆幸的是,JMP 内置了许多非常实用的工具,可以极大地简化这个过程。
完成这些步骤后,您不一定非要使用最基础、最标准化的线性回归和数值建模方法来从数据中获取有用的信息和结果。这就是我今天想讲的全部内容。非常感谢您的时间。