(num_samples), chi_square_values, marker='o', label="加权卡方统计量") plt.axhline(y=ucl, color='r', linestyle='--', label=f"UCL ({ucl:.2f})") plt.axhline(y=lcl, color='g', linestyle='--', label=f"LCL ({lcl:.2f})") plt.fill_between(range(num_samples), lcl, ucl, color='gray', alpha=0.2) plt.title(title) plt.xlabel("样本编号") plt.ylabel("加权卡方统计量") plt.legend() plt.show() # 休哈特控制图计算 def shewhart_control_chart(data, alpha=0.05): """ 计算并绘制休哈特控制图 :param data: 观测数据 :param alpha: 显著性水平 :return: 控制限和均值 """ num_samples, num_categories = data.shape means = np.mean(data, axis=0) stds = np.std(data, axis=0, ddof=1) overall_mean = np.mean(means) overall_std = np.sqrt(np.sum(stds 2) / num_categories) lcl = overall_mean - chi2.ppf(1 - alpha / 2, num_categories - 1) * overall_std ucl = overall_mean + chi2.ppf(1 - alpha / 2, num_categories - 1) * overall_std return lcl, ucl, overall_mean # 绘制休哈特控制图 def plot_shewhart_control_chart(data, lcl, ucl, overall_mean, title="休哈特控制图"): """ 绘制休哈特控制图 :param data: 观测数据 :param lcl: 下控制限 :param ucl: 上控制限 :param overall_mean: 总体均值 :param title: 图表 """ sample_means = np.mean(data, axis=1) num_samples = len(sample_means) plt.figure(figsize=(12, 6)) plt.plot(range(num_samples), sample_means, marker='o', label="样本均值") plt.axhline(y=ucl, color='r', linestyle='--', label=f"UCL ({ucl:.2f})") plt.axhline(y=lcl, color='g', linestyle='--', label=f"LCL ({lcl:.2f})") plt.axhline(y=overall_mean, color='b', linestyle='-', label=f"总体均值 ({overall_mean:.2f})") plt.fill_between(range(num_samples), lcl, ucl, color='gray', alpha=0.2) plt.title(title) plt.xlabel("样本编号") plt.ylabel("样本均值") plt.legend() plt.show() # 示例运行 if __name__ == "__main__": # 参数设置 num_samples = 50 num_categories = 4 sample_size = 100 true_probs = [0.2, 0.3, 0.3, 0.2] weights = [1, 2, 3, 4] # 数据生成 simulated_data = generate_data(num_samples, num_categories, sample_size, true_probs) # 数据预处理 detected_data = detect_and_remove_outliers(simulated_data) imputed_data = impute_missing_values(detected_data) # 探索性数据分析 exploratory_data_analysis(imputed_data) # 加权卡方统计量计算 chi_square_values = weighted_chi_square(imputed_data, true_probs, weights) # 确定控制限 lcl, ucl = determine_control_limits(num_categories) # 绘制加权卡方控制图 plot_control_chart(chi_square_values, lcl, ucl) # 休哈特控制图计算与绘制 lcl_shewhart, ucl_shewhart, overall_mean = shewhart_control_chart(imputed_data) plot_shewhart_control_chart(imputed_data, lcl_shewhart, ucl_shewhart, overall_mean) [2025-04-05 17:47:55 | AI问答 | 925点数解答]