You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中生成符合预期的指定参数EWMA控制图?

EWMA控制图生成问题解决方法

你遇到的核心问题是qcc库的ewma()函数默认输出与预期示例图不符,主要原因是函数的默认行为(如初始值设定、控制限展示、绘图元素)和示例图的要求存在差异。以下是具体分析和解决步骤:

可能的不符点

  1. 初始EWMA值:qcc默认用设定的过程中心(center=100)作为第一个EWMA统计量的初始值,部分示例图会采用第一个观测值作为初始值。
  2. 绘图元素:qcc的EWMA图仅展示EWMA统计量的折线,示例图可能同时包含原始观测点。
  3. 控制限展示:虽然qcc默认计算动态控制限(随观测次数变化),但部分示例图可能使用稳态控制限(观测次数趋近无穷时的固定值)。

解决方法

方法1:调整qcc函数参数匹配预期

如果希望用qcc生成接近示例的图,可以手动计算EWMA统计量并叠加原始数据:

library(qcc)

test <- c(100.23,100.19,102.02,99.59,99.81,99.86,99.6,100.35,99.38,100.83,99.73,98,99.72,101.34,98.77,99.94,99.47,99.95,100.33,99.57,100.82,100.23,100.68,101.64,100.86,99.28,101.41,100.21,101.85,101.43,103)
lambda <- 0.2
center <- 100
sigma <- 1
k <- 2.859

# 手动计算EWMA统计量(可切换初始值:center或test[1])
n <- length(test)
ewma_vals <- numeric(n)
ewma_vals[1] <- test[1] # 改为center则匹配qcc默认初始值
for(i in 2:n) {
  ewma_vals[i] <- lambda * test[i] + (1 - lambda) * ewma_vals[i-1]
}

# 用qcc绘制EWMA图,传入手动计算的统计量
v <- ewma(ewma_vals, lambda = lambda, nsigmas = k, xlab="观测序号", ylab="EWMA", 
          std.dev = sigma, center = center)
# 叠加原始观测点
points(test, col = "red", pch = 16)

方法2:手动绘制完全自定义的EWMA图(推荐新手)

如果需要100%匹配示例图的样式,用ggplot2手动计算所有元素更灵活:

library(ggplot2)

test <- c(100.23,100.19,102.02,99.59,99.81,99.86,99.6,100.35,99.38,100.83,99.73,98,99.72,101.34,98.77,99.94,99.47,99.95,100.33,99.57,100.82,100.23,100.68,101.64,100.86,99.28,101.41,100.21,101.85,101.43,103)
lambda <- 0.2
center <- 100
sigma <- 1
k <- 2.859

n <- length(test)

# 计算EWMA统计量
ewma_vals <- numeric(n)
ewma_vals[1] <- center # 可改为test[1]切换初始值逻辑
for(i in 2:n) {
  ewma_vals[i] <- lambda * test[i] + (1 - lambda) * ewma_vals[i-1]
}

# 计算动态控制限
cl_lower <- center - k * sigma * sqrt(lambda/(2 - lambda) * (1 - (1 - lambda)^(2*(1:n))))
cl_upper <- center + k * sigma * sqrt(lambda/(2 - lambda) * (1 - (1 - lambda)^(2*(1:n))))

# 整理绘图数据
plot_df <- data.frame(
  index = 1:n,
  original = test,
  ewma = ewma_vals,
  lcl = cl_lower,
  ucl = cl_upper,
  center = rep(center, n)
)

# 生成自定义图
ggplot(plot_df, aes(x = index)) +
  geom_line(aes(y = ewma), color = "#0072B2", linewidth = 1) +
  geom_point(aes(y = ewma), color = "#0072B2", size = 2) +
  geom_point(aes(y = original), color = "#D55E00", size = 1.5, alpha = 0.7) +
  geom_line(aes(y = lcl), color = "#E69F00", linetype = "dashed") +
  geom_line(aes(y = ucl), color = "#E69F00", linetype = "dashed") +
  geom_line(aes(y = center), color = "black") +
  labs(x = "观测序号", y = "EWMA/原始值") +
  theme_minimal() +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

关键原理补充

EWMA控制限分为两种:

  • 动态控制限:随观测次数t变化,公式为 $\text{UCL/LCL} = \mu \pm k\sigma\sqrt{\frac{\lambda}{2-\lambda}(1-(1-\lambda)^{2t})}$
  • 稳态控制限:当t趋近无穷时的固定值,公式为 $\text{UCL/LCL} = \mu \pm k\sigma\sqrt{\frac{\lambda}{2-\lambda}}$

可根据示例图的控制限样式选择对应计算方式。

内容的提问来源于stack exchange,提问作者Arion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:50:45