September 2017 Update

This commit is contained in:
Ingy döt Net 2017-09-23 10:01:46 +02:00
parent bba7bfd280
commit ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions

View file

@ -1,30 +1,32 @@
/*REXX program performs a permutation test on N + M subjects (volunteers): */
/* ↑ ↑ */
/* │ │ */
/* │ └─────control population. */
/* └────────treatment population. */
/*REXX program performs a permutation test on N + M subjects (volunteers): */
/* ↑ ↑ */
/* │ │ */
/* │ └─────control population. */
/* └────────treatment population. */
n=9
data=85 88 75 66 25 29 83 39 97 68 41 10 49 16 65 32 92 28 98
w=words(data); m=w-n
say 'volunteer population given treatment:' right(n,length(w))
say ' control population given a placebo:' right(m,length(w))
data= 85 88 75 66 25 29 83 39 97 68 41 10 49 16 65 32 92 28 98
w=words(data); m=w-n
say 'w=' w
say 'volunteer population given treatment:' right(n, length(w) )
say ' control population given a placebo:' right(m, length(w) )
say
say 'treatment population efficacy % (percentages):' subword(data,1,n)
say ' control population placebo % (percentages):' subword(data,n+1)
say 'treatment population efficacy % (percentages):' subword(data, 1, n)
say ' control population placebo % (percentages):' subword(data, n+1 )
say
do v= 0 for w ; #.v=word(data,v+1) ; end
treat=0; do i= 0 to n-1 ; treat=treat+#.i ; end
tot=1; do j=19 to m+1 by -1 ; tot=tot*j ; end
do k= 9 to 1 by -1 ; tot=tot/k ; end
gt=picker(n+m, n, 0)
le=tot-gt
say "<= " format(100*le/tot,,3)'%' le /*display number with 3 decimal places.*/
say " > " format(100*gt/tot,,3)'%' gt /* " " " " " " */
exit /*stick a fork in it, we're all done. */
/*────────────────────────────────────────────────────────────────────────────*/
picker: procedure expose #. treat; parse arg it,rest,eff
if rest==0 then return eff>treat
if it>rest then q=picker(it-1, rest, eff)
do v= 0 for w ; #.v=word(data, v+1) ; end
treat=0; do i= 0 to n-1 ; treat=treat + #.i ; end
tot=1; do j= w to m+1 by -1 ; tot=tot * j ; end
do k=w%2 to 1 by -1 ; tot=tot / k ; end
GT=picker(n+m, n, 0) /*compute the GT value from PICKER func*/
LE=tot - GT /* " " LE " via subtraction.*/
say "<= " format(100 * LE / tot, ,3)'%' LE /*display number with 3 decimal places.*/
say " > " format(100 * GT / tot, ,3)'%' GT /* " " " " " " */
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
picker: procedure expose #. treat; parse arg it,rest,eff /*get args.*/
if rest==0 then return eff > treat /*Zero ? */
if it>rest then q=picker(it-1, rest, eff) /*recurse. */
else q=0
itP=it-1
return picker(itP, rest-1, eff+#.itP) + q
itP=it - 1 /*temp var.*/
return picker(itP, rest - 1, eff+#.itP) + q /*recurse. */