Data visualization with SAS programming

Segmented regression plot or interrupted time series

Reply
Contributor
Posts: 60

Segmented regression plot or interrupted time series

Hi!

 

I have similar data (just a small part of it):

Rate time

7.5 1

7.4 2

7.8 3

7.2 4

8.0 5

7.9 6

8.2 7

 

I han information that there was a change in policy and it hapend when time=4. I want to plot in one graph rate*time and regression lines (before and after policy was introduce)

 

How can I do it?

SAS Super FREQ
Posts: 890

Re: Segmented regression plot or interrupted time series

The way I would do it is to introduce a third column that grouped the data into "before" and "after" the policy change:

 

 

data rates;
length policy $ 6;
input rate time policy $;
cards;
7.5 1 before
7.4 2 before
7.8 3 before
7.2 4 before
8.0 5 after
7.9 6 after
8.2 7 after
;
run;

proc sgplot data=rates;
reg x=time y=rate / group=policy;
run;
SAS Super FREQ
Posts: 3,415

Re: Segmented regression plot or interrupted time series

[ Edited ]

Dan has the right idea. For less coding, you can create the indicator variable without changing the data:

policy = (time < 4);

 

Contributor
Posts: 60

Re: Segmented regression plot or interrupted time series

Thanks, it does not do what i want. I would like to see something as the Figure1a in the link below

http://www.cdc.gov/pcd/issues/2013/12_0268.htm

 

SAS Super FREQ
Posts: 3,415

Re: Segmented regression plot or interrupted time series

You need to use a technique called "scoring the regression model" to add a new value to your data set. You want to add an observation with coordinates x=Xmax and y=(predicted value at XMax).

 

This will require that you fit the model in one of the regression procedures, such as PROC GLM, and output the predicted value to a SAS data set.  The following code provides the main ideas:

data rates;
input rate time;
group = (time<4);
cards;
7.5 1
7.4 2
7.8 3
7.2 4
8.0 5
7.9 6
8.2 7
;

/* create scoring observations with 
   x=XMax and Y=. for the group=1 */
data Fake;
rate=.; time=7; group=1;
run;

/* merge data sets */
data All;
set rates fake;
run;

/* evaluate model; create output data set that contains the
   new predicted value for XMax for group=1 */
proc glm data=All plots=fitplot;
class group;
model rate = time group;
output out=FitOut p=pred;
quit;

proc sgplot data=FitOut;
scatter x=time y=rate / group=group;
series x=time y=pred / group=group;
run;
Ask a Question
Discussion stats
  • 4 replies
  • 546 views
  • 1 like
  • 3 in conversation