Using Splines to Incorporate Nonlinear Effects
/*--------------------------------------------------------------
SAS Sample Library
Name: ucmex06.sas
Description: Example program from SAS/ETS User's Guide,
The UCM Procedure
Title: Using Splines to Incorporate Nonlinear Effects
Product: SAS/ETS Software
Keys: equally spaced univariate time series data
PROC: UCM
Notes:
--------------------------------------------------------------*/
ods graphics on;
data utility;
input temp load @@;
label temp= "Average Daily Temperature"
load= "Average Daily Electricity Demand";
date = intnx('day', '01JAN1999'd, _n_ - 1 );
format date date7.;
datalines;
28 52 29 51 28 53 26 59 27 56 26 58
25 58 25 56 24 55 24 53 25 57 25 57
24 58 26 55 27 50 28 44 29 43 29 50
28 50 27 51 26 52 28 48 29 46 29 46
28 53 28 51 28 48 28 48 28 47 29 45
29 43 29 48 29 48 30 49 28 53 28 48
27 46 28 43 30 46 31 45 31 46 31 51
28 51 26 45 28 39 30 46 29 49 28 50
28 49 28 48 28 43 27 43 28 47 29 47
29 46 30 45 31 43 31 41 31 40 31 44
31 44 31 46 31 47 31 46 30 42 30 42
30 47 30 45 31 44 30 45 30 44 31 40
31 39 31 41 31 41 31 43 31 43 32 41
32 38 32 36 32 42 32 43 32 43 32 42
32 41 32 39 33 37 33 41 34 40 37 40
35 44 33 43 32 41 35 36 35 42 37 42
40 40 39 40 40 39 39 37 39 35 41 40
44 39 45 40 41 42 37 43 37 38 38 35
40 39 42 39 43 38 44 38 44 37 46 33
48 31 49 38 49 38 50 38 51 37 53 36
53 32 53 32 54 37 57 38 57 37 57 37
51 39 49 34 49 33 50 40 53 39 52 39
51 39 52 38 56 34 59 32 58 38 58 38
59 38 61 37 61 35 61 33 58 31 57 36
58 37 59 38 62 38 62 37 64 34 63 31
58 31 58 35 61 37 62 36 64 38 67 36
68 35 68 40 69 40 69 40 67 37 67 37
67 33 65 31 64 36 64 35 63 35 63 36
64 35 63 31 65 31 66 39 68 41 68 40
68 40 69 41 69 37 66 33 65 37 64 36
65 36 67 37 68 37 70 37 70 35 71 37
69 40 70 41 68 41 66 38 67 34 69 34
69 41 72 45 74 46 73 46 71 40 69 35
69 34 70 42 71 43 73 45 74 47 74 46
74 42 74 41 71 41 71 41 72 45 75 49
74 45 70 34 69 32 69 38 71 40 69 40
70 42 72 43 70 35 69 32 70 39 71 42
71 41 69 38 67 36 67 33 69 34 69 39
70 36 69 38 68 38 68 38 70 35 71 35
69 39 69 41 70 42 72 45 72 45 72 36
68 32 66 39 68 43 67 39 64 38 62 39
62 34 62 30 62 31 65 37 63 37 60 37
61 36 59 33 59 32 58 37 57 37 58 36
59 37 60 37 61 34 59 32 56 37 56 38
58 35 59 36 58 38 58 34 57 33 55 38
54 39 52 38 52 39 49 40 48 37 47 36
48 41 48 41 46 41 49 39 50 37 51 35
51 33 49 40 50 40 49 40 50 40 50 40
48 37 47 35 48 42 46 43 45 41 47 40
45 41 43 39 43 37 45 41 44 42 45 42
43 43 44 41 45 37 45 34 45 42 41 43
40 43 40 42 41 41 40 38 41 35 44 39
43 40 42 42 42 42 42 41 43 35 41 37
41 42 40 42 40 43 39 44 38 43 37 41
38 39 39 44 37 44 36 45 35 38 35 41
34 40 33 41 32 48 33 46 35 44 35 44
36 44 36 42 33 42 32 47 32 47 32 47
31 47 31 49 32 43 32 43 32 48 32 47
32 51 31 55 31 53 31 48 31 48 30 59
29 59 29 57 29 52 30 45 30 40 31 44
30 51 30 46 31 45 31 46 31 44 30 43
29 46 29 52 27 55 28 52 28 53 28 52
29 44 29 43 29 48 29 53 28 57 28 54
28 51 28 48 27 50 28 52 27 52 27 54
25 55 25 57 25 52 25 52 25 53 26 51
25 54 25 53 25 50 25 47 25 47 26 50
27 49 28 48 29 49 29 48 28 44 28 43
27 48 27 46 28 49 27 51 26 52 26 49
26 48 27 50 27 50 27 51 27 50 28 48
28 46 28 42 28 45 30 44 31 43 31 43
31 42 31 40 32 38 32 42 32 41 32 41
32 42 33 39 33 36 35 34 37 38 37 38
37 43 32 46 32 43 32 39 32 39 32 43
32 44 31 46 32 45 32 45 32 38 32 38
32 42 32 40 33 39 36 40 40 38 39 35
38 35 36 42 35 41 37 40 41 38 41 39
40 36 41 34 39 41 38 41 40 40 39 41
39 41 39 37 39 36 38 43 37 42 35 43
39 40 38 43 35 39 37 37 39 41 42 38
41 40 42 38 44 35 47 33 49 31 51 35
52 35 52 36 52 35 51 35 51 32 52 31
52 35 53 37 55 36 56 37 59 38 60 34
58 32 57 36 56 35 56 36 55 37 53 37
50 36 50 33 52 37 54 37 55 36 54 37
54 36 55 32 56 30 57 36 58 36 57 37
58 38 60 37 58 33 57 31 59 32 61 36
60 36 58 37 60 37 58 34 58 32 60 37
59 37 61 41 63 42 65 42 65 37 64 32
68 39 67 39 64 37 62 36 60 35 60 32
63 30 64 36 64 37 61 35 63 38 68 39
69 34 66 31 65 36 65 36 66 36 67 38
69 40 71 39 72 35 70 36 72 34 73 40
74 41 73 41 73 41 75 39 75 44 73 40
74 43 76 45 77 44 76 40 74 36 71 36
68 37 66 37 67 36 67 36 69 33 71 33
71 42 71 41 73 42 74 44 75 44 75 40
75 39 73 46 72 44 73 44 72 43 73 43
75 38 74 34 73 41 74 41 73 42 74 44
77 46 78 42 75 35 73 44 71 39 65 36
65 36 66 36 67 33 68 32 69 38 68 38
69 41 70 43 72 43 73 39 71 36 69 41
66 39 67 39 64 37 63 35 62 32 64 29
65 32 64 37 64 37 65 38 63 37 65 36
63 31 62 37 60 37 60 37 60 37 58 36
60 34 61 33 63 41 63 38 58 37 55 37
54 38 51 36 51 33 51 38 53 38 52 37
54 38 56 37 56 33 56 31 54 37 52 38
49 40 49 41 46 42 45 39 43 37 44 41
46 41 48 40 50 39 51 38 50 37 49 35
49 40 50 40 49 41 51 39 51 38 49 36
51 34 51 40 51 40 55 38 55 39 50 40
49 38 50 36 50 40 51 38 54 40 50 43
46 42 44 38 45 37 47 43 46 45 41 47
39 48 38 46 38 43 38 42 38 48 36 49
35 49 35 49 35 50 34 46 34 45 34 52
34 52 33 52 33 43 33 43 33 43 33 44
33 50 33 52 32 52 33 53 33 50 33 49
33 46 33 53 32 57 33 56 32 55 32 55
32 52 32 55 32 61 31 60 31 60 30 60
30 57 30 56 30 55 30 58 29 59 29 58
28 61 28 59 28 55 27 54 27 52 27 54
28 53 28 54 29 53 29 51 28 51 28 51
28 55 29 50 29 48 30 48 30 44 30 44
29 51 28 50 28 48 28 49 29 48 29 47
30 45 29 51 29 53 28 51 28 52 27 53
26 47 26 46 27 49 27 48 27 53 26 52
27 49 27 46 27 45 27 51 28 51 28 52
26 57 24 57 25 48 27 45 27 49 28 49
27 52 27 55 26 54 25 54 25 51 26 53
26 54 26 56 26 55 26 55 26 53 26 49
26 51 26 56 26 57 26 53 26 53 27 48
27 48 27 54 27 56 27 52 27 48 28 46
29 44 30 42 30 46 31 48 31 46 31 47
31 47 30 43 30 44 29 47 30 45 31 44
31 44 31 44 31 41 31 41 31 44 31 43
31 43 31 45 31 47 32 46 31 44 30 48
30 46 31 45 31 45 31 44 31 41 32 39
31 43 32 44 32 44 32 43 32 41 32 40
33 38 34 44 34 42 34 44 36 42 35 40
37 36 36 37 32 45 34 43 37 40 40 39
42 38 40 38 34 39 33 41 38 39 43 38
46 36 46 35 49 33 52 32 53 37 52 37
51 36 51 37 52 36 51 34 51 33 50 37
51 37 54 37 56 36 55 35 56 32 57 31
60 39 61 40 60 37 60 36 59 36 62 34
59 31 54 37 51 38 49 39 52 37 55 36
58 32 59 30 60 31 62 37 62 35 63 36
60 35 60 32 61 30 61 36 59 37 59 37
62 36 64 37 65 34 67 34 66 38 66 38
66 38 65 37 64 36 64 32 65 31 64 37
63 36 64 36 65 36 65 35 66 33 69 36
72 46 72 44 72 46 73 46 75 44 72 36
67 29 67 35 68 39 69 32 68 36 70 40
72 38 74 38 75 46 74 42 71 38 72 40
73 42 74 39 74 37 73 43 75 47 77 46
78 46 78 44 78 41 77 38 78 44 73 38
72 38 70 37 69 37 71 34 72 35 74 46
77 47 76 43 74 43 77 48 79 46 79 45
79 50 79 51 79 50 74 40 71 38 72 36
71 33 69 39 70 41 70 40 69 38 69 38
68 33 68 33 69 40 71 42 73 44 73 46
73 45 73 39 71 36 69 42 69 43 69 42
67 38 65 36 65 33 68 33 66 32 66 39
70 45 71 45 67 37 63 32 63 30 62 34
62 35 62 35 61 35 59 35 58 32 59 30
60 36 61 36 62 34 61 35 59 35 58 32
56 31 53 36 54 37 55 37 56 38 57 37
58 34 59 32 57 37 58 37 56 37 53 38
49 41 46 38 47 36 50 40 52 40 52 40
50 40 52 38 52 36 51 36 49 43 46 43
46 41 48 40 47 41 46 37 45 37 46 43
47 43 44 45 43 47 40 46 38 42 40 38
41 44 42 44 45 42 46 42 43 43 43 38
43 36 45 40 43 42 43 43 42 43 41 42
41 38 41 38 42 42 41 41 44 41 44 41
44 40 46 37 45 38 39 46 37 44 38 43
40 36 40 38 40 42 38 42 36 50 35 52
36 51 37 51 37 48 37 45 37 44 37 47
36 47 36 48 36 50 35 49 35 46 34 44
34 49 34 50 34 49 33 50 33 50 33 45
34 43 33 47 33 49 32 50 31 51 31 51
31 48 30 49 29 49 29 48 29 52 29 51
29 52 28 51 28 50 26 53 26 49 25 55
26 52 27 49 28 43 27 45 27 48 29 45
31 45 31 46 31 43 31 42 31 42 30 49
29 51 28 51 28 52 25 54 26 49 26 47
27 50 27 51 24 54 23 52 27 47 26 47
25 49 21 57 23 56 24 54 24 53 24 53
25 47 25 48 23 54 24 49 27 47 29 47
30 47 30 46 27 44 28 48 29 48 29 47
30 44 30 45 30 41 30 40 31 43 31 46
31 46 30 46 30 46 31 41 30 43 28 53
26 53 25 52 25 54 23 53 22 50 20 50
23 51 25 49 25 51 25 52 25 51 26 49
24 48 26 48 29 45 30 44 29 47 29 45
29 41 30 40 31 45 30 48 29 51 27 53
27 50 28 44 27 44 27 48 28 44 30 42
31 43 31 43 31 43 31 40 31 47 31 49
31 50 31 49 31 47 31 42 31 39 32 46
32 43 33 45 34 43 37 40 41 35 44 33
46 39 47 40 47 38 43 41 38 43 38 39
38 39 37 44 41 42 42 43 37 45 37 42
38 41 40 38 41 41 42 41 41 42 40 42
43 40 46 37 45 36 44 42 41 43 41 42
41 43 43 41 45 37 47 34 49 39 50 39
53 39 50 40 49 40 48 36 49 35 51 40
52 39 54 39 51 40 50 39 52 35 55 32
57 34 60 40 62 42 62 43 62 41 63 36
60 33 60 38 61 38 62 39 62 40 61 39
61 35 64 37 66 43 65 39 65 39 62 38
64 38 66 34 66 32 67 39 67 41 69 42
67 39 67 39 68 39 71 38 73 47 73 47
72 46 73 46 73 48 75 48 75 46 73 49
72 45 72 44 70 33 72 41 75 41 73 38
72 42 73 44 70 39 69 39 71 39 73 38
74 39 75 48 76 49 76 47 75 46 77 47
77 45 76 40 71 38 68 37 69 38 71 43
73 45 73 41 72 36 72 43 73 47 73 46
71 39 69 37 69 35 70 34 70 39 69 38
71 43 74 47 73 43 70 37 71 38 69 40
68 38 67 39 67 39 66 38 65 33 63 31
65 38 65 40 67 40 68 41 69 42 70 40
71 40 73 47 73 45 72 45 71 45 71 42
71 40 72 37 70 36 68 41 69 44 71 45
72 47 73 44 73 41 70 43 67 40 67 41
67 41 67 40 65 35 62 34 64 41 66 41
66 41 64 38 61 37 58 32 56 31 55 38
54 39 55 39 54 39 53 39 54 36 54 34
58 38 55 40 52 40 51 41 51 39 50 36
49 35 49 39 49 40 48 40 50 38 53 38
50 38 46 37 47 40 46 40 44 42 45 43
44 44 42 42 42 40 41 44 40 42 40 46
39 47 39 47 40 43 41 42 42 48 38 49
33 50 34 51 33 50 34 45 34 45 34 48
34 49 34 47 36 46 36 45 37 42 37 44
35 48 35 49 34 50 34 51 34 51 33 47
33 43 34 46 34 46 35 46 36 48 36 48
36 46 33 48 32 53 32 52 31 52 31 41
32 45 31 48 31 46 30 55 30 56 29 56
29 55 29 53 30 47 28 49 29 51 30 49
30 49 30 49 30 48 30 44 31 44 31 53
31 52 31 50 31 50 31 51 31 47 31 47
31 54 30 52 30 48 30 51 30 50 31 45
31 45 31 50 30 52
;
proc sgplot data=utility;
loess x=temp y=load / smooth=0.4;
run;
ods output OutlierSummary = loadbreaks(drop=_group_ BreakType);
proc ucm data=utility;
id date interval=day;
model load;
autoreg;
level plot=smooth;
splinereg temp knots=30 40 50 65 75 degree=3
variance=0 noest;
season length=7 var=0 noest;
estimate plot=panel back=60
extradiffuse=50;
outlier maxnum=10;
forecast back=60 lead=60
extradiffuse=50;
run;
proc print data=loadbreaks noobs;
run;