目录
X-bar控制图是一种统计工具,用于监控和控制生产过程中的质量变量。它是过程能力分析和统计过程控制(SPC,Statistical Process Control)的重要组成部分。X-bar控制图主要用于追踪过程平均值的变化,帮助识别过程是否处于受控状态。
X-bar控制图包括中心线(CL,Central Line),上限控制线(UCL,Upper Control Limit)和下限控制线(LCL,Lower Control Limit)。中心线通常是过程平均值的估计值,上限控制线和下限控制线是根据中心线和标准差计算得出的。
在X-bar控制图中,每个点表示一个样本的平均值。随着时间的推移,这些点应该会围绕中心线上下波动。如果点在控制限内,说明过程是受控的。如果点超出控制限,则说明过程可能失控,需要采取措施来调整和改进过程。
除了X-bar控制图外,还有其他类型的控制图,如均值-极差控制图(X-R图)和不合格品率控制图(P图)等。这些控制图都有各自的特点和用途,可以根据需要选择适合的控制图来监控生产过程的质量。
收集数据:从生产过程中连续抽取样本,并记录每个样本的平均值。
计算平均值和范围:对每个样本计算平均值(X-bar)和范围(R)。
绘制图表:使用统计软件或手动绘制X-bar 图。图表上通常包括X-bar 和R 两个子图。
确定控制限:根据样本数据计算上限和下限,这有助于确定过程是否处于控制状态。
解读图表:监测X-bar 图以识别任何趋势、偏移或异常点。超出控制限的数据可能表明需要调整或改进生产过程。
实时监测:提供对生产过程实时性能的监控。
识别变异:有助于迅速识别过程中的变异,从而采取纠正措施。
持续改进: 通过识别问题,推动持续改进和质量管理。
- import numpy as np
- import matplotlib.pyplot as plt
-
- # 示例数据,包含10个子组的样本数据,每个子组有5个样本
- data = np.array([
- [10, 12, 11, 9, 17],
- [14, 15, 13, 11, 12],
- [10, 9, 11, 12, 10],
- [12, 11, 10, 12, 11],
- [9, 11, 22, 4, 12],
- [11, 10, 15, 10, 11],
- [13, 12, 11, 12, 14],
- [10, 9, 11, 12, 10],
- [12, 4, 34, 12, 11],
- [9, 11, 10, 9, 12]
- ])
-
- # 计算每个子组的平均值和范围
- subgroup_Xmeans = np.mean(data, axis=1) # 计算每个子组的平均值
- subgroup_Rranges = np.ptp(data, axis=1) # 计算每个子组的范围(即极差)
-
- # 计算总体平均值
- overall_Xmean = np.mean(subgroup_Xmeans) # 所有子组平均值的平均值,表示整体过程的中心位置。它是X-bar图中的中心线。
- overall_Rmean = np.mean(subgroup_Rranges) # 所有子组的极差的平均值,表示整体过程的离散程度
-
- # 计算A2、D3和D4常数(这里假设样本大小为5,您可以根据实际情况修改)
- A2 = 0.577
- D3 = 0
- D4 = 2.114
-
- # 计算控制限
- UCL_X = overall_Xmean + A2 * overall_Rmean
- LCL_X = overall_Xmean - A2 * overall_Rmean
-
- UCLR = D4 * overall_Rmean
- LCLR = D3 * overall_Rmean
-
- # 计算R控制图的控制限(使用D4常数)
- UCL_R = UCLR
- LCL_R = LCLR
-
- # 计算每个子组的Z分数
- z_scores = (subgroup_Xmeans - overall_Xmean) / (overall_Rmean / np.sqrt(data.shape[1]))
-
- # 设置阈值,通常选择2或3作为阈值
- threshold = 3
-
- # 异常检测并标记异常点
- plt.figure(figsize=(9, 6))
- plt.subplot(1, 2, 1)
- plt.plot(subgroup_Xmeans, marker='o', linestyle='-')
- plt.axhline(y=overall_Xmean, color='r', linestyle='--', label='Overall Xmean')
- plt.axhline(y=UCL_X, color='g', linestyle='--', label='UCL')
- plt.axhline(y=LCL_X, color='g', linestyle='--', label='LCL')
- plt.legend()
- plt.title('X-bar')
- plt.xlabel('Subgroup')
- plt.ylabel('Subgroup Mean')
-
- # 异常检测 - 使用Z分数
- outliers = np.where(np.abs(z_scores) > threshold)[0]
- for o in outliers:
- plt.annotate(f'Outlier (Subgroup {o + 1})', (o, subgroup_Xmeans[o]), textcoords="offset points", xytext=(0, 10),
- ha='center')
-
- # 绘制R控制图
- plt.subplot(1, 2, 2)
- plt.plot(subgroup_Rranges, marker='o', linestyle='-')
- plt.axhline(y=overall_Rmean, color='r', linestyle='--', label='Overall Rmean')
- plt.axhline(y=UCL_R, color='g', linestyle='--', label='UCL')
- plt.axhline(y=LCL_R, color='g', linestyle='--', label='LCL')
- plt.legend()
- plt.title('R Chart')
- plt.xlabel('Subgroup')
- plt.ylabel('Subgroup Range')
-
- plt.tight_layout()
- plt.show()
-