R语言MSQC包mult.chart函数添加基线失败,寻求解决建议
解决MSQC包mult.chart函数添加基线的问题
首先明确:MSQC的mult.chart中,baseline参数的核心作用是用指定的基线数据估计过程的均值向量和协方差矩阵,以此计算控制限,而非直接在图表中画出基线标记。如果你说的“添加基线未生效”是指基线未被用于计算控制限,或是想在图表中视觉区分基线与监控阶段数据,可按以下方法调整:
分析你的两种尝试
- 第一种尝试:你传入了完整的
data_MULTI作为绘图数据,同时指定baseline为前21行。此时函数确实会用基线数据计算控制限,再绘制所有100个点。但你的测试数据是线性增长的,本身不符合“基线阶段过程稳定”的统计假设,导致控制限与数据趋势不匹配,看起来像是基线未生效。 - 第二种尝试:你将基线作为
data参数、后续数据作为newdata传入,函数会用基线计算控制限,分别绘制基线阶段和监控阶段的点。同样因为测试数据的线性特性,监控点会快速超出控制限,掩盖了基线的作用。
正确实现方式
场景1:用基线计算控制限,展示所有数据并标记基线边界
library(MSQC) # 生成更符合统计假设的测试数据(基线稳定,后期偏移) set.seed(123) baseline <- data.frame(variable1 = rnorm(21), variable2 = rnorm(21)) new_data <- rbind(data.frame(variable1 = rnorm(50), variable2 = rnorm(50)), data.frame(variable1 = rnorm(29, mean=2), variable2 = rnorm(29, mean=2))) data_MULTI <- rbind(baseline, new_data) # 生成MEWMA图表对象(先不绘图) chart <- mult.chart(type = "mewma", data = data_MULTI, baseline = baseline, lambda=0.4, alpha=0.05, method = "hm", plot = FALSE) # 绘制图表 plot(chart) # 手动添加基线结束的竖线,区分基线与监控阶段 abline(v = 21, col = "red", lty = 2)
场景2:仅展示监控阶段数据,用基线计算控制限
library(MSQC) set.seed(123) baseline <- data.frame(variable1 = rnorm(21), variable2 = rnorm(21)) new_data <- rbind(data.frame(variable1 = rnorm(50), variable2 = rnorm(50)), data.frame(variable1 = rnorm(29, mean=2), variable2 = rnorm(29, mean=2))) # 直接绘制监控数据,控制限基于基线计算 mult.chart(type = "mewma", data = baseline, newdata = new_data, lambda=0.4, alpha=0.05, method = "hm")
关键注意点
- 基线数据必须满足过程稳定的假设(如数据围绕均值随机波动),否则控制限的计算会失去统计意义,这也是你之前测试数据未达到预期的核心原因。
- 如果需要在图表中标记基线范围,需通过
abline手动添加辅助线,mult.chart默认不会自动生成该标记。
内容的提问来源于stack exchange,提问作者MMH
相关产品推荐
相关产品推荐

