BookmarkSubscribeRSS Feed
NURAO
Obsidian | Level 7

PROC IML;
RESET NONAME;


START BP(Y, LOWFEN, UPPFEN, LEFTDATA, TRIMEAN) GLOBAL (NY,NTOT,WOBS,BOBS);
NTOT=NROW(Y);
WOBS=NCOL(Y);
BOBS=NCOL(NY);
YT=J(NTOT, WOBS, 0);
DOQ1= J(1, NCOL(NY),0);
IDOQ1=DOQ1;
DECIMAL=DOQ1;
Q1DIFF=DOQ1;
Q1DEC=DOQ1;
Q1=J(1, NCOL(NY),0);
DOQ3=DOQ1;
IDOQ3=DOQ1;
DECIMAL3=DOQ1;
Q3DIFF=DOQ1;
Q3DEC=DOQ1;
Q3=Q1;
RMAD=Q1;
MADN=Q1;
LOWFEN=Q1;
UPPFEN=Q1;
LEFT=Q1;
NEWN=Q1;
HA=Q1;
TRIMEAN=J(1,NCOL(NY),0);
SS=Q1;
SM=Q1;
SEM=Q1;

F=1;
M=0;

DO J=1 TO NCOL(NY);
SAMP=NY[J];
L=M+SAMP;
TEMP1= Y[F:L];

NV1=TEMP1;
TEMP1[RANK(NV1),]=NV1;

YT = TEMP1;
DOQ1[,J]=(SAMP+1)/4;
IDOQ1[,J]=INT(DOQ1[,J]);
DECIMAL[,J]=DOQ1[,J]-IDOQ1[,J];
Q1DIFF[,J]=YT[IDOQ1[,J]+1,1]- YT[IDOQ1[,J],1];
Q1DEC[,J]=DECIMAL[,J]*Q1DIFF[,J];
Q1[,J]= YT[IDOQ1[,J],1] + Q1DEC[,J];
DOQ3[,J]=(SAMP+1)*3/4;
IDOQ3[,J]=INT(DOQ3[,J]);
DECIMAL3[,J]=DOQ3[,J]-IDOQ3[,J];
Q3DIFF[,J]=YT[IDOQ3[,J]+1,1]- YT[IDOQ3[,J],1];
Q3DEC[,J]=DECIMAL3[,J]*Q3DIFF[,J];
Q3[,J]= YT[IDOQ3[,J],1] + Q3DEC[,J];


RMAD[,J]=MAD(TEMP1,"MAD");
MADN[,J]=MAD(TEMP1,"NMAD");
LOWFEN[,J]=Q1[,J]-(1.44*MADN[,J]);
UPPFEN[,J]=Q3[,J]+(1.44*MADN[,J]);
LEFT=TEMP1[LOC(LOWFEN[,J]<TEMP1 & TEMP1<UPPFEN[,J])];
LEFTDATA=LEFT;
NEWN=NROW (LEFTDATA);
HA=NEWN;
TRIMEAN[,J]=SUM(LEFTDATA)/HA;


M=L;
F=F+SAMP;
*PRINT 'LEFT DATA' LEFT;
*PRINT "SORT DATA" YT;

END;
*PRINT "ORI DATA" Y;
*PRINT "DEPTH OF Q3" DOQ3;
*PRINT IDOQ3;
*PRINT DECIMAL3;
*PRINT Q3DIFF;
*PRINT "DEC Q3" Q3DEC;
*PRINT "Q3=" Q3;
*PRINT "RMAD" RMAD;
*PRINT MADN;

 


*PRINT "QUARTILE=" Q;
*PRINT "Q1=" Q1;
*PRINT "LOWER FENCE" LOWFEN;
*PRINT "BOXPLOT TRIMMEAN = " TRIMEAN;

FINISH;


***MENJANA SAMPEL BUTSTRAP UNTUK PENGIRAAN RALAT PIAWAI PENGANGGAR
MOM **;
START BOOTDAT(Y, TRIMEAN, YB) GLOBAL(NY, NTOT, WOBS, BOBS, SEED);
F = 1;
M = 0;
DO J = 1 TO BOBS;
L = M+NY[J];
TEMP = Y[F:L,];
BVAL = TEMP;
DO P = 1 TO NROW(TEMP);
RVAL = UNIFORM(SEED);
BVAL[P,] = TEMP[CEIL(NROW(TEMP)#RVAL),];
END; **DO P**;
IF J = 1 THEN YB = BVAL;
ELSE YB = YB//BVAL;
M = L;
F = F + NY[J];
END; **DO J**;

***** CENTRALIZATION OF BOOTSTRAP DATA *****************;
F = 1;
M = 0;
DO I = 1 TO BOBS;
L = M + NY[I];
MVAL = TRIMEAN[,I];
DO K = F TO L BY 1;
YB[K,] = YB[K,] - MVAL;
END; **DO K**;
M = L;
F = F + NY[I];
END; ** DO I**;

FINISH;


START BOOTSTAT(YB, TRIMEANB) GLOBAL(NY, NTOT, WOBS, BOBS, SEED);
CALL BP(YB, LOWFENB, UPPFENB, LEFTDATAB, TRIMEANB);
FINISH;

************* CALCULATION OF STANDARD ERROR********************;
START SEBOXPLOT;
CALL BP(Y, LOWFEN, UPPFEN, LEFTDATA, TRIMEAN);
F = 1;
M = 0;
DO BOOTLOOP = 1 TO NUMSIM;
CALL BOOTDAT(Y, TRIMEAN, YB);
CALL BOOTSTAT(YB, TRIMEANB);
IF BOOTLOOP = 1 THEN TMEANB = TRIMEANB;
ELSE TMEANB = TMEANB//TRIMEANB;
*PRINT 'BOOTSTRAP DATA' YB;
END; **DO BOOTLOOP**;

VAR=J(1, BOBS, 0);
SE=J(1,BOBS,0);
DO I=1 TO BOBS;
VAR[,I]=(SSQ(TMEANB[,I])-(SUM(TMEANB[,I])**2/NUMSIM))/(NUMSIM-1);
SE[,I]=SQRT(VAR[,I]);

END;

PRINT "BOOTSTRAP STANDARD ERROR=" SE;

FINISH;

*/


**BILANGAN SAMPEL BUTSTRAP**;
NUMSIM = 50;
**SEED UTK BUTSTRAP**;
SEED = 40389;

********cubaan menggunakan data yg dijana*******;

NY = {11 11 11};
Y = {5,8,7,3,9,4,3,29,5,6,7,
3,2,6,4,14,4,7,6,9,3,4,
9,9,8,7,10,11,27,12,15,17,16};
*PRINT 'ORI DATA' Y;
RUN SEBOXPLOT;

/*
CALL AG (A, TRIMEAN, SEM, HA, INVVAR, SUMP, WEIGHT, XPLUS, WEIGMEAN,TJ);
CALL TRANS(A, B, C, ZJ, ZZJ, TEST, P);
*/

*CALL BP(A, LOWFEN, UPPFEN, LEFT);

 

QUIT;

 

Hi all, basically this is my coding. how do i get the bootstrap standard error.

5 REPLIES 5
PaigeMiller
Diamond | Level 26

I'm not sure I grasp the question.

 

It seems like the IML code you are showing actually prints the bootstrap standard error.

PRINT "BOOTSTRAP STANDARD ERROR=" SE;
--
Paige Miller
Rick_SAS
SAS Super FREQ

the bootstrap SE is the standard deviation of the bootstrap distribution.  It looks like the statistics are stored in the TMEANB vector in the SEBOXPLOT module. You can get the standard error as

SE = std( TMEANB );

 

By the way, it looks like you are using a loop to try to compute the variance and std error. No loops are necessary.

NURAO
Obsidian | Level 7

thank you. but for now I cannot figure out what is happening at "LEFT=TEMP1[LOC(LOWFEN[,J]<TEMP1 & TEMP1<UPPFEN[,J])];", this code affects entire programming.

Rick_SAS
SAS Super FREQ

Did you write this code yourself or did you get it from someone else?

NURAO
Obsidian | Level 7

Only module BOOTDAT I took from my supervisor.

sas-innovate-2024.png

 

Secure your spot at the must-attend AI and analytics event of 2024: SAS Innovate 2024! Get ready for a jam-packed agenda featuring workshops, super demos, breakout sessions, roundtables, inspiring keynotes and incredible networking events.

 

Register by March 1 to snag the Early Bird rate of just $695! Don't miss out on this exclusive offer. 

 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 5 replies
  • 962 views
  • 0 likes
  • 3 in conversation