Diagnostic Plots and Structural Break Analysis

/*--------------------------------------------------------------
                    SAS Sample Library

       Name: ssmex08.sas
       Description: Example program from SAS/ETS User's Guide,
              The SSM Procedure
       Title: Diagnostic Plots and Structural Break Analysis
       Product: SAS/ETS Software
        Keys: Diagnostic Plots, Structural Break Analysis
        PROC: SSM
        Notes:

--------------------------------------------------------------*/

 title;

data seatBelt;
input f_KSI r_KSI @@;
label f_KSI = "Front Seat Passengers Injured--log scale";
label r_KSI = "Rear Seat Passengers Injured--log scale";
date = intnx( 'quarter', '1jan1969'd, _n_-1 );
format date YYQS.;
datalines;
    6.72417 5.64654  6.81728 6.06123  6.92382 6.18190
    6.92375 6.07763  6.84975 5.78544  6.81836 6.04644
    7.00942 6.30167  7.09329 6.14476  6.78554 5.78212
    6.86323 6.09520  6.99369 6.29507  6.98344 6.06194
    6.81499 5.81249  6.92997 6.10534  6.96356 6.21298
    7.02296 6.15261  6.76466 5.77967  6.95563 6.18993
    7.02016 6.40524  6.87849 6.06308  6.55966 5.66084
    6.73627 6.02395  6.91553 6.25736  6.83576 6.03535
    6.52075 5.76028  6.59860 5.91208  6.70597 6.08029
    6.75110 5.98833  6.53117 5.67676  6.52718 5.90572
    6.65963 6.01003  6.76869 5.93226  6.44483 5.55616
    6.62063 5.82533  6.72938 6.04531  6.82182 5.98277
    6.64134 5.76540  6.66762 5.91378  6.83524 6.13387
    6.81594 5.97907  6.60761 5.66838  6.62985 5.88151
    6.76963 6.06895  6.79927 6.01991  6.52728 5.69113
    6.60666 5.92841  6.72242 6.03111  6.76228 5.93898
    6.54290 5.72538  6.62469 5.92028  6.73415 6.11880
    6.74094 5.98009  6.46418 5.63517  6.61537 5.96040
    6.76185 6.15613  6.79546 6.04152  6.21529 5.70139
    6.27565 5.92508  6.40771 6.13903  6.37293 5.96883
    6.16445 5.77021  6.31242 6.05267  6.44414 6.15806
    6.53678 6.13404
run;

 proc ssm data=seatBelt optimizer(tech=interiorpoint) plots=all;
    ods select
       Ssm.Diagnostics.'Plots for f_KSI'n.ResidualNormalityPlot
       Ssm.Diagnostics.'Plots for f_KSI'n.StdPredErrorPlot
       MaximalShockPlot StateElementBreakSummary;
    id date interval=quarter;
    state error(2) type=WN cov(g);
    component wn1 = error[1];
    component wn2 = error[2];
    state level(2) type=RW cov(rank=1)  checkbreak;
    component rw1 = level[1];
    component rw2 = level[2];
    state season(2) type=season(length=4);
    component s1 = season[1];
    component s2 = season[2];
    model f_KSI = rw1 s1  wn1;
    model r_KSI = rw2 s2 wn2;
 run;

 ods output ElementStateBreakDetails=stateBreak;
 proc ssm data=seatBelt optimizer(tech=interiorpoint) plots=all;
    id date interval=quarter;
    Q1_83_Pulse = (date = '1jan1983'd);
    zero = 0;
    state error(2) type=WN cov(g);
    component wn1 = error[1];
    component wn2 = error[2];
    state level(2) type=RW cov(rank=1) W(g)=(Q1_83_Pulse zero)
        checkbreak print=breakdetail;
    component rw1 = level[1];
    component rw2 = level[2];
    state season(2) type=season(length=4);
    component s1 = season[1];
    component s2 = season[2];
    model f_KSI =  rw1 s1  wn1;
    model r_KSI = rw2 s2 wn2;
 run;

 proc sgpanel data=stateBreak;
     panelby elementIndex;
     scatter x=time y=zValue;
     refline 3 / axis=y lineattrs=(pattern=shortdash) noclip;
     refline -3 / axis=y lineattrs=(pattern=shortdash) noclip;
 run;