File: imr.arl.Rd

package info (click to toggle)
r-cran-spc 1%3A0.6.7-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,880 kB
  • sloc: ansic: 22,125; makefile: 2
file content (210 lines) | stat: -rw-r--r-- 9,642 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
\name{imr.arl}
\alias{imr.arl}
\alias{imr.Ru_Mgiven}
\alias{imr.Rl_Mgiven}
\alias{imr.MandRu}
\alias{imr.MandRuRl}
\title{Compute ARLs and control limit factors for I-MR combos in case of normal data}
\description{Computation of the (zero-state) Average Run Length (ARL) at given mean \code{mu} and \code{sigma} etc.}
\usage{imr.arl(M, Ru, mu, sigma, vsided="upper", Rl=0, cmode="coll", N=30, qm=30)

imr.Ru_Mgiven(M, L0, N=30, qm=30)

imr.Rl_Mgiven(M, L0, N=30, qm=30)

imr.MandRu(L0, N=30, qm=30)

imr.MandRuRl(L0, N=30, qm=30)}
\arguments{
\item{M}{control limit multiple for mean chart.}
\item{Ru}{upper control limit multiple for moving range chart.}
\item{mu}{actual mean.}
\item{sigma}{actual standard deviation.}
\item{vsided}{switches between the more common "upper" and the less popular "two"(-sided) case of the MR chart.
Setting \code{vsided} to "two" and \code{Ru} sufficiently large (at least \code{2*M}), creates an I-MR chart
with a lower limit only for the MR part.}
\item{Rl}{lower control limit multiple for moving range chart (not needed in the upper case, i.e. if \code{vsided}="upper").}
\item{cmode}{selects the numerical algorithm. The default \code{"coll"} picks the piecewise collocation, which is
the most accurate method. Selecting \code{"Crowder"}, the algorithm from Crowder (1987b) is chosen (re-implemented in R).
Taking a label from \code{"gl"}, \code{"rectangular"}, \code{"trapezoid"}, \code{"simpson"} or \code{"simpson3_8"},
one decides for the quite common Nystroem procedure to numerically solve the considered integral equation.
It is astonishing that Crowder's modified Nystroem design with the trapezoidal quadrature works so well.
However, it is clearly dominated by the piecewise collocation algorithm.}
\item{N}{Controls the dimension of the linear equation system and consequently the accuracy of the result. See details.}
\item{qm}{Number of quadrature nodes (and weights) to determine the collocation definite integrals.}
\item{L0}{pre-defined in-control ARL, that is, determine \code{Ru}, \code{Rl}, or \code{M} and \code{Ru} or
all of them (essentially ending in a lower limit MR chart) so that the mean
number of observations until a false alarm is \code{L0}.}
}
\details{
Crowder (1987a) provided some math to determine the ARL of the so-called individual moving range (IMR) chart.
The given integral equation was approximated by a linear equation system applying trapezoidal quadratures.
Interestingly, Crowder did not recognize the specific behavior of the solution for \code{Ru} >= \code{M} (which is
the more common case), where the resulting function L() is constant in the central part of the
considered domain. In addition, by performing collocation on two (\code{Ru} > \code{M})
or three (\code{Ru} < \code{M}) subintervals piecewise, one obtains highly accurate
ARL numbers. Note that \code{imr.MandRu} yields \code{M} and \code{Ru} for the upper MR trace, whereas
\code{imr.MandRuRl} provides in addition the lower factor \code{Rl} for IMR consisting of two two-sided control charts.
Note that the underlying ARL unbiased condition suppresses the upper limit \code{Ru} in all considered cases so far.
This is not completely surprising, because the mean chart is already quite sensitive for increases in the variance.
The two functions \code{imr.Ru_Mgiven} and \code{imr.Rl_Mgiven} deliver the single upper and lower limit,
respectively, if a one-sided MR design is utilized and the control lmit factor \code{M} of
the mean chart is set already. Note that for \code{Ru} > \code{2*M}, the upper MR limit is
not operative anymore. If it was initially an upper MR chart, then it reduces to a single mean chart.
If it was originally a two-sided MR design, then it becomes a two-sided mean/lower variance chart combo.
Within the latter scheme, the mean chart signals variance increases (a well-known pattern), whereas
the MR subchart delivers only decreasing variance signals. However, these simple Shewhart charts
exhibit in all configurations week variance decreases detection behavior.
Eventually, we should note that the scientific control chart community mainly recommends to
ignore MR charts, see, for example, Vardeman and Jobe (2016), whereas standards (such as ISO), commercial
SPC software and many training manuals provide the IMR scheme with completely wrong upper limits for the MR chart.}
\value{Returns either the ARL or control limit factors (alias multiples).}
\references{
S. V. Crowder (1987a)
Computation of ARL for Combined Individual Measurement and Moving Range Charts,
\emph{Journal of Quality Technology} 19(2), 98-102.
  
S. V. Crowder (1987b)
A Program for the Computation of ARL for Combined Individual Measurement and Moving Range Charts,
\emph{Journal of Quality Technology} 19(2), 103-106.

K. C. B. Roes, R. J. M. M. Does, Y. Schurink,
Shewhart-Type Control Charts for Individual Observations,
\emph{Journal of Quality Technology} 25(3), 188-198.

S. E. Rigdon, E. N. Cruthis, C. W. Champ (1994)
Design Strategies for Individuals and Moving Range Control Charts,
\emph{Journal of Quality Technology} 26(4), 274-287.

D. Radson, L. C. Alwan (1995)
Detecting Variance Reductions Using the Moving Range,
\emph{Quality Engineering} 8(1), 165-178.

S. R. Adke, X. Hong (1997)
A Supplementary Test Based on the Control Chart for Individuals,
\emph{Journal of Quality Technology} 29(1), 16-20.

R. W. Amin, R. A. Ethridge (1998)
A Note on Individual and Moving Range Control Charts,
\emph{Journal of Quality Technology} 30(1), 70-74.

C. A. Acosta-Mejia, J. J. Pignatiello (2000)
Monitoring process dispersion without subgrouping,
\emph{Journal of Quality Technology} 32(2), 89-102.

N. B. Marks, T. C. Krehbiel (2011)
Design And Application Of Individuals And Moving Range Control Charts,
\emph{Journal of Applied Business Research ({JABR})} 25(5), 31-40.

D. Rahardja (2014)
Comparison of Individual and Moving Range Chart Combinations to Individual
Charts in Terms of ARL after Designing for a Common ``All OK'' ARL,
\emph{Journal of Modern Applied Statistical Methods} 13(2), 364-378.

S. B. Vardeman, J. M. Jobe (2016)
\emph{Statistical Methods for Quality Assurance},
Springer, 2nd edition.
}
\author{Sven Knoth}
\seealso{later.}
\examples{
## Crowder (1987b), Output Listing 1, trapezoidal quadrature (less accurate)

M <- 2
Ru <- 3
mu <- seq(0, 2, by=0.25)
LL <- LL2 <- rep(NA, length(mu))
for ( i in 1:length(mu) ) {
  LL[i] <- round( imr.arl(M, Ru, mu[i], 1), digits=4)
  LL2[i] <- round( imr.arl(M, Ru, mu[i], 1, cmode="Crowder", N=80), digits=4)
}
LL1987b <- c(18.2164, 16.3541, 12.4282, 8.7559, 6.1071, 4.3582, 3.2260, 2.4878, 1.9989)
print( data.frame(mu, LL2, LL1987b, LL) )

## Crowder (1987a), Table 1, trapezoidal quadrature (less accurate)

M <- 4
Ru <- 3
mu <- seq(0, 2, by=0.25)
LL <- rep(NA, length(mu))
for ( i in 1:length(mu) ) LL[i] <- round( imr.arl(M, Ru, mu[i], 1), digits=4)
LL1987a <- c(34.44, 34.28, 34.07, 33.81, 33.45, 32.82, 31.50, 28.85, 24.49)
print( data.frame(mu, LL1987a, LL) )

## Rigdon, Cruthis, Champ (1994), Table 1, Monte Carlo based

M <- 2.992
Ru <- 4.139
icARL <- imr.arl(M, Ru, 0, 1)
icARL1994 <- 200
print( data.frame(icARL1994, icARL) )

M <- 3.268
Ru <- 4.556
icARL <- imr.arl(M, Ru, 0, 1)
icARL1994 <- 500
print( data.frame(icARL1994, icARL) )

## ..., Table 2, Monte Carlo based

M <- 2.992
Ru <- 4.139
tau <- c(seq(1, 1.3, by=0.05), seq(1.4, 2, by=0.1))
LL <- rep(NA, length(tau))
for ( i in 1:length(tau) ) LL[i] <- round( imr.arl(M, Ru, 0, tau[i]), digits=2)
LL1994 <- c(200.54, 132.25, 90.84, 65.66, 49.35, 38.92, 31.11, 21.35, 15.47,
12.04, 9.81, 8.21, 7.03, 6.14)
print( data.frame(tau, LL1994, LL) )

## Radson, Alwan (1995), Table 2 (Monte Carlo based), half-normal, known parameter case
## two-sided (!) MR-alone (!) chart, hence the ARL results has to be decreased by 1
## Here: a large M (=12) is deployed to mimic Inf
alpha <- 0.00915
Ru <- sqrt(2) * qnorm(1-alpha/4)
Rl <- sqrt(2) * qnorm(0.5+alpha/4)
k <- 1.5 - (0:7)/10
LL <- rep(NA, length(k))
for ( i in 1:length(k) )
  LL[i] <- round( imr.arl(12, Ru, 0, k[i], vsided="two", Rl=Rl), digits=2) - 1
RA1995 <- c(18.61, 24.51, 34.21, 49.74, 75.08, 113.14, 150.15, 164.54)
print( data.frame(k, RA1995, LL) )

## Amin, Ethridge (1998), Table 2, column sigma/sigma_0 = 1.00

M <- 3.27
Ru <- 4.56
#M <- 3.268
#Ru <- 4.556
mu <- seq(0, 2, by=0.25)
LL <- rep(NA, length(mu))
for ( i in 1:length(mu) ) LL[i] <- round( imr.arl(M, Ru, mu[i], 1), digits=1)
LL1998 <- c(505.3, 427.6, 276.7, 156.2, 85.0, 46.9, 26.9, 16.1, 10.1)
print( data.frame(mu, LL1998, LL) )

## ..., column sigma/sigma_0 = 1.05

for ( i in 1:length(mu) ) LL[i] <- round( imr.arl(M, Ru, mu[i], 1.05), digits=1)
LL1998 <- c(296.8, 251.6, 169.6, 101.6, 58.9, 34.5, 20.9, 13.2, 8.7)
print( data.frame(mu, LL1998, LL) )

## Acosta-Mejia, Pignatiello (2000), Table 2
## AMP utilized Markov chain approximation
## However, the MR series is not Markovian!
## MR-alone (!) chart, hence the ARL results has to be decreased by 1
## Here: a large M (=8) is deployed to mimic Inf
Ru <- 3.93
sigma <- c(1, 1.05, 1.1, 1.15, 1.2, 1.3, 1.4, 1.5, 1.75)
LL <- rep(NA, length(sigma))
for ( i in 1:length(sigma) ) LL[i] <- round( imr.arl(8, Ru, 0, sigma[i], N=30), digits=1) - 1
AMP2000 <- c(201.0, 136.8, 97.9, 73.0, 56.3, 36.4, 25.6, 19.1, 11.0)
print( data.frame(sigma, AMP2000, LL) )

## Mark, Krehbiel (2011), Table 2, deployment of Crowder (1987b), nominal ic ARL 500

M <- c(3.09, 3.20, 3.30, 3.50, 4.00)
Ru <- c(6.00, 4.67, 4.53, 4.42, 4.36)
LL0 <- rep(NA, length(M))
for ( i in 1:length(M) ) LL0[i] <- round( imr.arl(M[i], Ru[i], 0, 1), digits=1)
print( data.frame(M, Ru, LL0) )
}
\keyword{ts}