macro GOLD14 #______________________________________________________________________ # ANALYTICAL METHODS COMMITTEE # MINITAB 14 MACRO FOR A SAMPLING ANALYTICAL STRATEGY GAME # AUTHOR MICHAEL THOMPSON # FOR MINITAB 14 AND HIGHER # LAST MODIFIED 01.08.05 # FOR INFORMATION ABOUT THE PURPOSE OF THIS PROGRAM, # AND HOW TO RUN IT, DOWNLOAD THE AMC EXPLANATION SHEET # "GOLDMINE - AN ANALYTICAL STRATEGY GAME' # FROM THE AMC SOFTWARE WEBPAGES. #_______________________________________________________________________ MCOLUMNS KEY MCOLUMNS X Y XX YY MCOLUMNS AUBAR AUTRUE AUFOUND AUZ AUSYMB MCOLUMNS SAM ANAL MCOLUMNS XANOM YANOM ANOM RESULT VERDICT MCOLUMNS FINDEX TINDEX PINDEX MCOLUMNS CX CY ANGLE MCOLUMNS TEMP MCONSTANTS NSAM RSDSAM RSDAN TEST PATTERN MCONSTANTS I MCONSTANTS CANAL CSAM CFOLL CTOT MCONSTANTS MROB SROB MCONSTANTS HIT MISS MCONSTANTS DX DY MCONSTANTS KOUNT RECYCLE SUCCESS COST ANSWERA ANSWERB NREP MCONSTANTS GOODIES MCONSTANTS TEMPA RFNOTE1 RFNOTE2 RFNOTE3 MCONSTANTS RS RA MRESET NOTITLE NOECHO BRIEF 2 NAME CANAL 'ANALYTICAL' CSAM 'SAMPLING' CFOLL 'FOLLOWUP' CTOT 'TOTAL' LET HIT="HIT" LET MISS="MISS" LET NREP=10 # DEFINE POSITION OF ANOMALY - FIXED UNTIL GAME IS RESTARTED RANDOM 1 XANOM YANOM; UNIFORM 0 1000. # NEW PROCEDURE SPECIFICATION STARTS HERE MLABEL 10 NOTE NOTE WHAT SAMPLING PATTERN DO YOU WANT? NOTE 1=SQUARE GRID NOTE 2=RANDOM NOTE 3=STRATIFIED RANDOM NOTE 0=QUIT PROGRAM SET KEY; FILE 'TERMINAL'; NOBS 1. LET PATTERN=KEY(1) IF PATTERN=0 EXIT ELSEIF PATTERN<>1 and PATTERN<>2 and PATTERN<>3 NOTE NOTE ILLEGAL CODE - TRY AGAIN GOTO 10 ENDIF NOTE NOTE HOW MANY SITES DO YOU WANT TO SAMPLE? SET KEY; FILE 'TERMINAL'; NOBS 1. LET NSAM=KEY(1) IF NSAM<1 NOTE NOTE INVALID ENTRY - TERMINATING EXIT ELSEIF NSAM<50 NOTE NOTE THERE IS LITTLE CHANCE OF SUCCESS WITH NOTE SO FEW SAMPLES - TRY AGAIN GOTO 10 ENDIF NOTE NOTE WHAT SAMPLING RELATIVE STANDARD DEVIATION DO YOU WANT? NOTE ENTER RSD AS PERCENTAGE IN THE RANGE 1 TO 30 NOTE (JUST THE NUMBER - DON'T USE THE % SIGN) MLABEL 11 SET KEY; FILE 'TERMINAL'; NOBS 1. LET RSDSAM=KEY(1)/100 IF RSDSAM>0.3 OR RSDSAM<0.01 NOTE NOTE %RSD OUTSIDE FEASIBLE LIMITS - TRY AGAIN GOTO 11 ENDIF NOTE NOTE WHAT ANALYTICAL RELATIVE STANDARD DEVIATION DO YOU WANT? NOTE ENTER RSD AS A PERCENTAGE IN THE RANGE 1 TO 30. NOTE (DON'T USE % SIGN, JUST THE NUMBER) MLABEL 12 SET KEY; FILE 'TERMINAL'; NOBS 1. LET RSDAN=KEY(1)/100 IF RSDAN<0.01 OR RSDAN>0.3 NOTE %RSD OUTSIDE FEASIBLE RANGE - TRY AGAIN GOTO 12 ENDIF # INITIALISE WORKSPACE LET KOUNT=0 LET RECYCLE=0 LET SUCCESS=0 LET COST=0 ERASE VERDICT # RECYCLE PROCEDURE STARTS HERE MLABEL 20 #DEFINE BACKGROUND SITES AND CONCENTRATIONS IF PATTERN=1 CALL RANGRID NSAM X Y ELSEIF PATTERN=2 RANDOM NSAM X Y; UNIFORM 0 1000. ELSE CALL RANSTRAT NSAM X Y ENDIF LET AUBAR=50-Y/40+X/80 #ADD RANDOM SAMPLING NOISE BY SPECIFICATION LET KOUNT=KOUNT+1 RANDOM NSAM SAM; T 2. LET AUTRUE=AUBAR*(1+RSDSAM*SAM) #INITIALISE FLAGS SET TINDEX NSAM(0) END LET FINDEX=TINDEX #REDEFINE CONCENTRATIONS IN ANOMALOUS ZONE DO I=1:NSAM LET DX=X(I)-XANOM LET DY=Y(I)-YANOM LET TEST=DX*DX+DY*DY IF TEST<10000 RANDOM 1 ANOM; T 2. LET AUTRUE(I)=150*(1+0.7*SAM(I)) LET VERDICT(I)=HIT LET TINDEX(I)=1 ELSE LET VERDICT(I)=MISS ENDIF ENDDO # ADD ANALYTICAL VARIATION RANDOM NSAM ANAL; T 5. LET AUFOUND=AUTRUE*(1+RSDAN*ANAL) LET AUFOUND=ABSOLUTE(AUFOUND) # FLAG ANOMALOUS RESULTS CALL H15 AUFOUND MROB SROB LET AUZ=(AUFOUND-MROB)/SROB DO I=1:NSAM IF AUZ(I)>3 LET FINDEX(I)=1 ENDIF ENDDO LET PINDEX=TINDEX*FINDEX # CALCULATE SAMPLING AND ANALYTICAL AND FOLLOW-UP COSTS LET CANAL=NSAM*50*(0.1/RSDAN)**2 LET CSAM=NSAM*(50+100*(0.1/RSDSAM)**2) LET GOODIES=SUM(PINDEX) IF GOODIES>3 LET GOODIES=3 ENDIF LET CFOLL=10000*(SUM(FINDEX)-SUM(TINDEX)+GOODIES) LET CTOT=CANAL+CSAM+CFOLL # RECYCLE MODE HERE FOR AVERAGE SUCCESS AND COSTS IF SUM(PINDEX)>2 LET SUCCESS=SUCCESS+1 ENDIF LET COST=COST+CTOT IF RECYCLE=1 IF KOUNT0 COPY AUFOUND VERDICT X Y RESULT VERDICT XX YY; USE FINDEX 1. NOTE NOTE THESE ARE THE ANOMALOUSLY HIGH VALUES YOU HAVE FOUND (PPB GOLD) NAME XX 'EASTING' YY 'NORTHING' PRINT XX YY RESULT VERDICT NOTE NOTE THESE ARE THE COSTS YOU HAVE INCURRED (EUROS) PRINT CANAL CSAM CFOLL CTOT IF SUM(PINDEX)>2 NOTE NOTE YOU HAVE FOUND A MINE - WELL DONE! ELSE NOTE NOTE YOU HAVE NOT FOUND A MINE - SEE EXPLORATION MANAGER! ENDIF ELSE NOTE NOTE THESE ARE THE COSTS YOU HAVE INCURRED (EUROS) PRINT CANAL CSAM CFOLL CTOT NOTE NOTE YOU HAVE FOUND NO ANOMALOUS SAMPLES NOTE REPORT TO EXPLORATION MANAGER! ENDIF # DRAW MAP OF RESULTS # define symbol codes CODE (-10000:-0.67)1 (-0.6699999999:0)2 (0.000001:0.67)3 (0.670001:3)4 & (3.00001:10000)5 AUZ AUSYMB #DEFINE MINERALISATION AREA SET ANGLE 0:360/10 END LET ANGLE=ANGLE*0.017453 LET CY=100*SIN(ANGLE) LET CX=100*COS(ANGLE) LET CX=CX+XANOM LET CY=CY+YANOM # COMPOSE FOOTNOTES LET RFNOTE1="Number of samples = " LET RFNOTE2="Sampling RSD% = " LET RFNOTE3="Analytical RSD% = " COPY NSAM TEMP NTOA TEMP TEMP COPY TEMP TEMPA KKCAT RFNOTE1 TEMPA RFNOTE1 LET RS=RSDSAM*100 COPY RS TEMP NTOA TEMP TEMP COPY TEMP TEMPA KKCAT RFNOTE2 TEMPA RFNOTE2 LET RA=RSDAN*100 COPY RA TEMP NTOA TEMP TEMP COPY TEMP TEMPA KKCAT RFNOTE3 TEMPA RFNOTE3 text ausymb ausymb; maxwidth 2. NAME AUSYMB 'Quartiles+' brief 0 LAYOUT; Graph 1 1. Plot CY*CX; figure 0 1 0 1; data .15 .85 .15 .85; Connect; Order 0; XYSame; XYMin 0; XYMax 1000; Axlabel 1 " "; Axlabel 2 " "; nodtitle. Plot Y*X; figure 0 1 0 1; data .15 .85 .15 .85; type 0; Symbol AUSYMB; Type 6 6 6 6 6; Color 14 13 3 4 2; Size 1 1 1 1 1; XYSame; XYMin 0; XYMax 1000; Axlabel 1 "Easting"; Axlabel 2 "Northing"; Offset 0.015 0; Title "Colour codes show concentration ranges defined by quartiles, plus anomalies"; Tsize 0.7; TITLE "Grey = below lower quartile, blue = above upper quartile"; Tsize 0.7; TITLE "High anomalies in red"; Tsize 0.7; NoDTitle; legend; Footnote "Circle shows mineralised area."; Tsize 0.5; Footnote rfnote1; Tsize 0.5; Footnote rfnote2; Tsize 0.5; Footnote rfnote3; Tsize 0.5. EndLayout brief 2 NOTE NOTE ESTIMATE THE AVERAGE COST AND SUCCESS RATE OF YOUR STRATEGY (Y/N)? YESNO ANSWERB IF ANSWERB=1 NOTE NOTE LONG(ISH) CALCULATION - PLEASE WAIT LET RECYCLE=1 GOTO 20 ENDIF MLABEL 40 NOTE NOTE DO YOU WANT TO TRY TO IMPROVE THE OUTCOME WITH A NEW STRATEGY (Y/N)? YESNO ANSWERA IF ANSWERA=1 GOTO 10 ENDIF ENDMACRO #------------------------------------------------------------------------ MACRO H15 X M S #___________________________________________________________ # Minitab local macro # Author: M Thompson, Birkbeck College #Lasr modified: 04/02/00 # Takes input column X and returns Huber's H15 robust mean and standard deviation. #The input column is not changed. Follows the AMC algorithm. #_______________________________________________________________ #i/o arguments MCOLUMN X #column of input data MCONSTANTS M S #robust mean and sd MCONSTANT ANSWER #flag =1 to force median/mad solution #other declarations MCOLUMNS DIFF Y #scratch columns MCONSTANT SA #scratch constant MCONSTANT MAD #median absolute difference MCONSTANT TOL #terminates iteration if < 0.00001 MCONSTANT HIGH LOW #limits for winsorisation MCONSTANT K #counter MCONSTANT MAX MIN # #_____________________________________________________________ let answer = 0 # set up starting values IF N(X)< 6 # Very low numbers give unknown LET M = '*' LET S = '*' RETURN ELSE LET M = MEDIAN(X) LET DIFF = X - M LET MAD= MEDIAN(ABSOLUTE(DIFF)) LET S = MAD/0.6745 ENDIF # Avoid H15 for n<11 or flag IF (N(X) < 11) OR (ANSWER = 1) RETURN ENDIF # initialise for iteration LET TOL = 0.1 LET K=0 LET MAX=MAXIMUM(X)+1 LET MIN=MINIMUM(X) -1 # iteration WHILE TOL > 0.0001 AND K<100 COPY X Y LET SA = S LET LOW = M-1.5*S LET HIGH = M + 1.5*S #winsorise raw data CODE (MIN:LOW) LOW (HIGH:MAX) HIGH Y Y LET M = MEAN(Y) LET S = STDEV(Y)/0.882 IF SA > 0 LET TOL = ABSOLUTE(SA-S)/SA ELSE NOTE PROBLEM WITH NEAR ZERO SD ENDIF LET K=K+1 ENDWHILE IF K > 99 NOTE WARNING - ITERATION NOT CONVERGED ENDIF RETURN ENDMACRO #____________________________________________________________ MACRO RANGRID NSAM X Y MCONSTANTS NSAM #NUMBER OF SITES - ***CHANGED BY MACRO*** MCOLUMNS X Y #COORDINATES OF GRID POINTS MCOLUMNS XX YY #WORKSPACE MCOLUMNS TEMP MCONSTANTS GRID NGRID MCONSTANTS ANGLE COSA SINA LET NGRID=ROUND(SQRT(NSAM*2)) LET GRID=1414.2/NGRID #SETUP OF ORIGINAL GRID SET XX NGRID(-707:707/GRID) END SET YY (-707:707/GRID)NGRID END #ROTATE GRID TO RANDOM ANGLE RANDOM 1 TEMP; UNIFORM 0 6.283. LET ANGLE=TEMP(1) LET COSA=COS(ANGLE) LET SINA=SIN(ANGLE) LET X=XX*COSA+YY*SINA+500 LET Y=YY*COSA-XX*SINA+500 #DELETE POINTS OUTSIDE AREA COPY X Y X Y; uSE X 0:1000. COPY X Y X Y; USE Y 0:1000. LET NSAM=N(X) ENDMACRO MACRO RANSTRAT NSAM X Y MCOLUMNS X Y XA YA MCONSTANTS NSAM NGRID MGRID GRID TOP LET NGRID=ROUND(SQRT(NSAM)) LET GRID=1000/NGRID LET MGRID=NGRID-1 LET TOP=MGRID*GRID LET NSAM=NGRID*NGRID SET X NGRID(0:TOP/GRID) END SET Y (0:TOP/GRID)NGRID END RANDOM NSAM XA YA; UNIFORM 0 GRID. LET X=X+XA LET Y=Y+YA ENDMACRO