【问题标题】:SPC - Control Charts by Group in RSPC - R 中的分组控制图
【发布时间】:2016-07-29 14:45:58
【问题描述】:

我想为此数据框中的每个名称创建一个统计过程控制图,并提取每个名称失控的行。

下面是数据框:

DATE <- as.Date(c('2016-06-18', '2016-06-19', '2016-06-20', 
              '2016-06-21', '2016-06-22', '2016-06-23', 
              '2016-06-24', '2016-06-25', '2016-06-26', 
              '2016-06-27', '2016-06-28', '2016-06-29', 
              '2016-06-30', '2016-06-18', '2016-06-19', 
              '2016-06-20', '2016-06-21', '2016-06-22', 
              '2016-06-23', '2016-06-24', '2016-06-25', 
              '2016-06-26', '2016-06-27', '2016-06-28', 
              '2016-06-29', '2016-06-30', '2016-06-18',
              '2016-06-19', '2016-06-20', '2016-06-21',
              '2016-06-22', '2016-06-23', '2016-06-24',
              '2016-06-25', '2016-06-26', '2016-06-27',
              '2016-06-28', '2016-06-29', '2016-06-30'))

Name <- c('A', 'A', 'A', 'A', 'A', 'A','A', 'A', 'A', 'A', 'A', 'A', 'A',
          'B', 'B', 'B', 'B', 'B', 'B','B', 'B', 'B', 'B', 'B', 'B', 'B',
          'C', 'C', 'C', 'C', 'C', 'C','C', 'C', 'C', 'C', 'C', 'C', 'C')

Revenue <- c(0.08, 0.03, 0.09, 2, 0.09, 0.29, 0.56, 0.23, 0.12, 0.76, 0.23, 0.45,0.32,
             0.10, 0.14, 0.80, 0.3, 0.12, 0.75, 0.20, 0.09, 0.22, 0.11, 4, 0.30, 0.45,
             0.19, 0.23, 0.56, 0.77, 0.9, 9, 0.38, 0.11, 0.98, 0.87, 0.09, 0.20, 0.65)
df<-data.frame(DATE, Name, Revenue)

dput(df)
structure(list(DATE = structure(c(16970, 16971, 16972, 16973, 
16974, 16975, 16976, 16977, 16978, 16979, 16980, 16981, 16982, 
16970, 16971, 16972, 16973, 16974, 16975, 16976, 16977, 16978, 
16979, 16980, 16981, 16982, 16970, 16971, 16972, 16973, 16974, 
16975, 16976, 16977, 16978, 16979, 16980, 16981, 16982), class = "Date"), 
Name = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("A", 
"B", "C"), class = "factor"), Revenue = c(0.08, 0.03, 0.09, 
2, 0.09, 0.29, 0.56, 0.23, 0.12, 0.76, 0.23, 0.45, 0.32, 
0.1, 0.14, 0.8, 0.3, 0.12, 0.75, 0.2, 0.09, 0.22, 0.11, 4, 
0.3, 0.45, 0.19, 0.23, 0.56, 0.77, 0.9, 9, 0.38, 0.11, 0.98, 
0.87, 0.09, 0.2, 0.65)), .Names = c("DATE", "Name", "Revenue"), 
row.names = c(NA, -39L), class = "data.frame")

df

> df
         DATE Name Revenue
1  2016-06-18    A    0.08
2  2016-06-19    A    0.03
3  2016-06-20    A    0.09
4  2016-06-21    A    2.00
5  2016-06-22    A    0.09
6  2016-06-23    A    0.29
7  2016-06-24    A    0.56
8  2016-06-25    A    0.23
9  2016-06-26    A    0.12
10 2016-06-27    A    0.76
11 2016-06-28    A    0.23
12 2016-06-29    A    0.45
13 2016-06-30    A    0.32
14 2016-06-18    B    0.10
15 2016-06-19    B    0.14
16 2016-06-20    B    0.80
17 2016-06-21    B    0.30
18 2016-06-22    B    0.12
19 2016-06-23    B    0.75
20 2016-06-24    B    0.20
21 2016-06-25    B    0.09
22 2016-06-26    B    0.22
23 2016-06-27    B    0.11
24 2016-06-28    B    4.00
25 2016-06-29    B    0.30
26 2016-06-30    B    0.45
27 2016-06-18    C    0.19
28 2016-06-19    C    0.23
29 2016-06-20    C    0.56
30 2016-06-21    C    0.77
31 2016-06-22    C    0.90
32 2016-06-23    C    9.00
33 2016-06-24    C    0.38
34 2016-06-25    C    0.11
35 2016-06-26    C    0.98
36 2016-06-27    C    0.87
37 2016-06-28    C    0.09
38 2016-06-29    C    0.20
39 2016-06-30    C    0.65

我想编写一个脚本,该脚本将使用 qcc 包为每个 Name 创建一个控制图,然后标注超出每个名称的控制图的限制

所以我知道如何分别为每个名称制作一个正常的单独控制图,就是这样。名称:“A”例如:

library(dplyr)
library(qcc)
target <- c("A")
testing<-filter(df, Name %in% target)
library(qcc)
my.xmr.x <- qcc(testing$Revenue, type = "xbar.one", plot=TRUE)
beyond.limits(my.xmr.x)

结果:

结果是超出限制的一个数据点,仅适用于名称 A

6

我的目标是编写一个脚本来提取所有名称的行(而不仅仅是像 6 这样的行号)。

所以这就是我希望输出最终的样子:

Out_of_Control_Rows_By_Name
         DATE     Name Revenue 
   6  2016-06-21    A    2.00
   11 2016-06-28    B    4.00
   6  2016-06-23    C    9.00

任何帮助都会很棒,谢谢!

【问题讨论】:

  • 将来最好与dput 共享数据,以便可以轻松将其读入R。尤其是当您有行名时,因为这使得从您的问题中获取数据变得更加困难并尝试阅读。
  • 您仍然希望我这样做还是您能够以 R 的方式阅读它? @Hack-R
  • @Hack-R 将 dput 添加到数据帧中。希望这能让你更容易理解。谢谢!
  • 非常感谢。我在找时间来解决这个问题时遇到了一些麻烦,但我今天会尽力去做,你的更新也将帮助其他人回答。
  • 好的,谢谢@Hack-R

标签: r charts qcc spc


【解决方案1】:
require(pacman) # you don't have to use this; it's my package manager
p_load(dplyr,qcc)

tmp <- df[0,]
for(i in unique(df$Name)){
  testing<-filter(df, Name == i)
  my.xmr.x <- qcc(testing$Revenue, type = "xbar.one", plot=TRUE)
  beyond.limits(my.xmr.x)
  df2 <- df[df$Name == i,]
  tmp <- rbind(tmp,df2[beyond.limits(my.xmr.x),])
}
         DATE Name Revenue
4  2016-06-21    A       2
24 2016-06-28    B       4
32 2016-06-23    C       9

【讨论】:

  • 这在这个数据集上效果很好,但由于某种原因不适用于我更大的数据集。出现错误,知道我需要在脚本中更改什么以消除错误吗?: plot.window(...) 中的错误:需要有限的 'ylim' 值
  • 我认为这与缺失值有关,因为在我的实际数据集中,并非所有名称都在每个 DATE 一起出现。因此,例如,有几个名称不会出现在某些日期导致情节中出现 NA
  • 更进一步。我认为问题可能出在计算图表中的限制时。由于数字的原因,它输出的 NA 值不允许图表绘制/计算限制。所以我需要找到一种方法来以某种方式在没有 NA 的情况下创建它。对不起所有的cmets。谢谢@Hack-R
  • 最后一个,答应哈哈。所以我只是做了 plot=FALSE 并且它可以使点越界。再次感谢@Hack-R !!
  • 这可能是因为您假设的缺失值(除非您实际上有无限的值)。您可能需要估算它们(RRF::na.roughfix 或 Amelia II 等)或排除它们。没有例子很难说。如果你能提供一个例子,我今晚或明天可以提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
相关资源
最近更新 更多