m0_69473531 2024-04-26 11:08 采纳率: 78.6%
浏览 6
已结题

绘制cusum控制图

怎么用python或者r绘制cusum控制图,或者有什么其他快速的办法绘制

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-26 11:08
    关注

    引自免费微信小程序:皆我百晓生

    CUSUM(Cumulative Sum)控制图是一种用于实时监测过程均值变化的统计工具。在Python中,我们可以使用scipy.stats库中的累积和函数,然后配合matplotlib进行绘图。这里是一个简单的例子,展示了如何使用Python绘制CUSUM控制图。

    首先确保安装了必要的库:

    pip install numpy scipy matplotlib pandas
    

    接下来是详细的步骤:

    1. 导入所需的库:
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from scipy.stats import cumsum
    
    1. 创建一个示例数据集,这个数据集可以代表你的过程测量值。在这个例子中,我们将创建一个正态分布的数据集,其中均值在某个点发生改变。
    np.random.seed(42)  # 设置随机种子以便于复现结果
    
    # 假设初始过程稳定,均值为50,标准差为10
    stable_mean = 50
    stable_std = 10
    n_stable_points = 100
    
    stable_data = stable_mean + stable_std * np.random.randn(n_stable_points)
    
    # 均值在第100个点后变为60
    shifted_mean = 60
    shifted_data = shifted_mean + stable_std * np.random.randn(len(stable_data))
    
    process_data = np.concatenate((stable_data, shifted_data))
    
    1. 计算CUSUM值:
    def calculate_cusum(data, target):
        diff = data - target
        cusum_values = np.cumsum(diff)
        return cusum_values
    
    target_value = process_data.mean()  # 假设我们不知道过程均值发生了变化,所以使用原始数据的均值作为目标值
    cusum_values = calculate_cusum(process_data, target_value)
    
    1. 绘制CUSUM控制图:
    plt.figure(figsize=(12, 6))
    plt.plot(process_data, label='Process Data')
    plt.plot(cusum_values, color='red', linestyle='-', linewidth=2, label='CUSUM')
    
    # 添加控制限
    upper_control_limit = 3 * np.std(cusum_values)
    lower_control_limit = - upper_control_limit
    plt.axhline(linewidth=1, color='black', y=upper_control_limit, ls='--', label='UCL')
    plt.axhline(linewidth=1, color='black', y=lower_control_limit, ls='--', label='LCL')
    
    # 添加垂直线表示均值变化点
    plt.vlines(n_stable_points, min(process_data), max(process_data), colors='blue', linestyles='dashed', label='Shift Point')
    
    plt.xlabel('Sample Number')
    plt.ylabel('Value / CUSUM Value')
    plt.legend()
    plt.title('CUSUM Control Chart for Process Mean Change Detection')
    plt.grid(True)
    plt.show()
    

    这段代码将创建一个包含过程数据和CUSUM值的图表。当过程均值从50变为60时,CUSUM值会显著增加,这表明可能发生了过程变化。

    如果你有实际的数据并且想要分析,请替换process_data变量为你自己的数据,同时根据实际情况调整控制限。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 创建了问题 4月26日

悬赏问题

  • ¥15 基础的图像处理问题求解答
  • ¥50 全国两定智慧医保接口开发相关业务文档,以及技术实现流程文档
  • ¥15 idea做图书管理系统,要求如下
  • ¥15 最短路径分配法——多路径分配
  • ¥15 SQL server 2022安装程序(英语)无法卸载
  • ¥15 关于#c++#的问题:把一个三位数的素数写在另一个三位数素数的后面
  • ¥15 求一个nao机器人跳舞的程序
  • ¥15 anaconda下载后spyder内无法正常运行
  • ¥20 统计PDF文件指定词语的出现的页码
  • ¥50 分析一个亿级消息接收处理策略的问题?