<br><font size=2 face="sans-serif">[my original message to s-news &amp; r-help is attached ]</font>
<br>
<br><font size=2 face="sans-serif">No one possessed or knew of any S/R code for the sequential t-test. &nbsp;Also it doesn't appear in the SAS index.</font>
<br><font size=2 face="sans-serif">One or two suggested obtaining the S+ seqtrial software which may (or may not) cover this, but this seemed to be a bit of a &quot;hammer to crack a nut&quot;. &nbsp;</font>
<br>
<br><font size=2 face="sans-serif">I have written a function based on the treatment in Wetheril and Glazebrook 'Sequential Methods in Statistics', which seems to reproduce the published tables OK (eg, table L in O.L.Davies Design and Analysis of Industrial Experiments).</font>
<br>
<br><font size=2 face="sans-serif">The function is neither elegant nor fast, but anyone is free to make use of it ... there being no guarantees or support with it, of course.</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cheers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Bob</font>
<br>
<br><font size=2 face="sans-serif">Code follows &nbsp;...</font>
<br>
<br><font size=1 face="Courier New">function(delta = 1, alpha = 0.05, beta = 0.05, minn = 1, maxn = 20, bot = -10, top = 10)</font>
<br><font size=1 face="Courier New">{</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # Create tables and graphs for Barnard's SPRT (&quot;sequential t-test&quot;) </font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # (a) uses expressions given in Wetherill &amp; Glazebrook 'Sequential Methods in Statistics', p 60</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # (b) succesfully reproduces table L in OL Davies Design &amp; Analysis of Industrial Experiments'</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # notation is a mixture of a and b.</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # delta is the difference-to-detect ( in std devs )</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # alpha, beta are the reqd type1 &amp; 2 errors</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # minn:maxn is the range of sample-numbers</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # bot:top is the range used in solving for critical values</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; Hh &lt;- function(N = 5, X = 0, lolim = 0, hilim = Inf)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; {</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # an integral required in the likelehood ratio</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integrand &lt;- function(y, n, x)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ans &lt;- ((y^n) * exp(-0.5 * (x + y)^2))/gamma(n + 1)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ans</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a &lt;- integrate(f = integrand, lower = lolim, upper = hilim, subdivisions = 500, n = N, x = X)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a$integral</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; }</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; Lik &lt;- function(U, N, DELTA, lhs)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; {</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # roots of this function are the critical values ( 'U0' and 'U1' in Davies )</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lik &lt;- lhs - (exp(-0.5 * (DELTA^2) * (N - U^2)) * Hh(N - 1, &nbsp;- DELTA * U))/Hh(N - 1)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lik</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; }</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # </font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; U0 &lt;- U1 &lt;- rep(NA, maxn)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; SampNo &lt;- 1:maxn</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # for each n in the required sequence, get the critical values U0 and U1</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; for(n in minn:maxn) {</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; U1[n] &lt;- uniroot(Lik, lower = bot, upper = top, N = n, DELTA = delta, lhs = (1 - beta)/alpha)$root</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; U0[n] &lt;- uniroot(Lik, lower = bot, upper = top, N = n, DELTA = delta, lhs = beta/(1 - alpha))$root</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cat(&quot;\n&quot;, n, &quot;\t&quot;, U0[n], &quot;\t&quot;, U1[n])</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; }</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # make a plot to provide hard-copy for users</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; ttl &lt;- paste(&quot;delta=&quot;, delta, &quot;alpha=&quot;, alpha, &quot;beta=&quot;, beta)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; yr &lt;- range(na.omit(c(U0, U1)))</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # &nbsp; &nbsp; &nbsp; &nbsp;dyr &lt;- max(yr) - min(yr)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # &nbsp; &nbsp; &nbsp; &nbsp;yr &lt;- c(yr[1] - 0.2 * dyr, yr[2] + 0.2 * dyr)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; pyr &lt;- pretty(yr)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; plot(c(1, maxn), yr, type = &quot;n&quot;, xlab = &quot;Sample no.&quot;, ylab = &quot;&quot;, main = ttl)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; lines(1:maxn, U0, lwd = 5, col = 13)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; lines(1:maxn, U1, lwd = 5, col = 13)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; text(1, U1[1], &quot;Difference detected&quot;)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; text(1, U0[1], &quot;Difference not detected&quot;)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; abline(v = seq(1:maxn), h = pyr)</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; # table as in Davies</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; #</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; ans &lt;- data.frame(cbind(SampNo, U0, U1))</font>
<br><font size=1 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; ans</font>
<br><font size=1 face="Courier New">}</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>
................................<br>
Robert D. Kinley<br>
Site Statistician<br>
Eli Lilly &amp; co<br>
Speke, UK<br>
++151 448 6347<br>
</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td>
<td><font size=1 face="sans-serif"><b>KINLEY_ROBERT@lilly.com</b></font>
<br><font size=1 face="sans-serif">Sent by: s-news-owner@lists.biostat.wustl.edu</font>
<p><font size=1 face="sans-serif">08/03/2002 11:21</font>
<br>
<td><font size=1 face="Arial">&nbsp; &nbsp; &nbsp; &nbsp; </font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; To: &nbsp; &nbsp; &nbsp; &nbsp;&quot;s-news (E-mail)&quot; &lt;s-news@lists.biostat.wustl.edu&gt;</font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; cc: &nbsp; &nbsp; &nbsp; &nbsp;</font>
<br><font size=1 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Subject: &nbsp; &nbsp; &nbsp; &nbsp;[S] any S/R Code for Barnard's sequential t-test ?</font>
<br></table>
<br>
<br>
<br><font size=2 face="sans-serif"><br>
Does anyone have, or know of, some S or R code to implement <br>
the sequential t-test ?</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
The test is outlined in Kendall &amp; Stuart vol 2A, ch 24, and a 'how <br>
to do it' with a set of tables is given in 'Design &amp; Analysis of <br>
Industrial Experiments' &nbsp;( O.L.Davies).</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
I'm interested in obtaining/creating an Splus or R application which</font><font size=3> </font><font size=2 face="sans-serif"><br>
calculates the upper and lower curves appropriate for arbitrary <br>
choices of alpha , Beta and mean-shift. &nbsp; &nbsp; &nbsp;</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
Can anyone give me any pointers ?</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ta &nbsp; &nbsp; &nbsp; &nbsp;Bob</font><font size=3> </font><font size=2 face="sans-serif"><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>
...............................<br>
Robert D. Kinley<br>
Site Statistician<br>
Eli Lilly &amp; co<br>
Speke, UK<br>
++151 448 6347</font>
<br>
<br>