%MACRO boosting (table, test, nbBoucles=100, Log=non) ; %IF &log = non %THEN %DO ; OPTION NOMPRINT NOMLOGIC NOSYMBOLGEN NONOTES ; %END ; /* initialize weights for boosting selection */ DATA work._travail ; SET &table NOBS = nb ; error = 1 ; CALL SYMPUT ("nb", nb) ; RUN ; %DO i = 1 %TO &nbBoucles ; PROC SURVEYSELECT DATA = work._travail (DROP = samplingWeight) OUT = work._samp METHOD = PPS_WR /* weighted sampling with replacement */ SAMPSIZE = &nb SEED = &i NOPRINT ; SIZE error ; RUN ; %modeleBoost (table = work._samp, out = work._coeffs, test = &table, outTest = work._travail) ; %IF &i = 1 %THEN %DO ; DATA work._histo ; SET work._coeffs ; RUN ; %END ; %ELSE %DO ; PROC APPEND BASE = work._histo DATA = work._coeffs ; RUN ; %END ; %END ; /* computing bootstrap coefficients of the model */ PROC MEANS DATA = work._histo NOPRINT NWAY ; CLASS _model_ _type_ ; VAR _numeric_ ; OUTPUT OUT = work._bagging (DROP = _freq_) MEAN = ; RUN ; /* computing bootstrap prediction for each individual */ DM "ODSRESULTS CLEAR ; PGM OFF ;" WPGM ; PROC SCORE DATA = &test SCORE = work._bagging OUT = work._test TYPE = PARMS ; VAR age puiss anc_veh ; RUN ; PROC SQL ; CREATE TABLE work._test AS SELECT *, (_score_ > 0) AS _into_ FROM work._test ; SELECT AVG((_into_ = good_bad)) LABEL = "Correctly classified" FORMAT = PERCENT8.2, AVG((_into_ NE good_bad)) LABEL = "Misclassified" FORMAT = PERCENT8.2 FROM work._test ; DROP TABLE work._histo ; DROP TABLE work._coeffs ; DROP TABLE work._travail ; DROP TABLE work._samp ; QUIT ; %IF &log = non %THEN %DO ; OPTION NOTES ; %END ; %MEND boosting ;