Skip to Main Content

SPSS Library: Panel Data Analysis using GEE

Introduction

Panel data analysis, also known as cross-sectional time-series analysis, looks at a group of
people, the ‘panel,’ on more than one occasion. Panel studies are essentially equivalent to
longitudinal studies, although there may be many response variables observed at each time point.

These data are from a 1996 study (Gregoire, Kumar Everitt, Henderson and Studd) on
the efficacy of estrogen patches in treating postnatal depression. Women were randomly
assigned to either a placebo control group (group=0, n=27) or estrogen patch group
(group=1, n=34). Prior to the first treatment all patients took the Edinburgh Postnatal
Depression Scale (EPDS). EPDS data was collected monthly for six months once the treatment began.
Higher scores on the EDPS are indicative of higher levels of depression. You can
download the data file here.

get file = 'D:\depress-3.sav'.

Let the analyses begin

Note that the data are in the wide format, we will collect some information and perform
two analyses while the data are in this format.

sort cases by group.
split file by group.
descriptives var = pre dep1 dep2 dep3 dep4 dep5 dep6.
split file off.

Image gee1

correlations var = pre dep1 dep2 dep3 dep4 dep5 dep6.

Image gee2

graph
 /scatterplot(matrix) = pre dep1 dep2 dep3 dep4 dep5 dep6.

Image gee3

Let’s check to see if the groups differ on the pretest depression score.

t-test groups = group(0 1)
 /var = pre.

Image gee4

Image gee5

There isn’t much of a difference between groups on the pretest, so let’s continue
on to the panel data analysis.

GEE with Continuous Response Variable

In order to use these data for our panel data analysis, the data must be reorganized
into the long form using the varstocases command.

varstocases
 /make dep from dep1 dep2 dep3 dep4 dep5 dep6
 /index = visit.

Image gee6

Image gee7

Before we begin the panel data analyses, let’s look at some other analyses
for comparison. We will begin with a repeated measures analysis of variance.

unianova dep by visit group subj
 /test =group vs subj(group)
 /design = group visit group*visit subj(group).

Image gee8

Image gee9

This analysis indicates that both group (F = 5.6, p = .021) and visit
(F = 18.21, p = .000) are statistically significant, while the
group*visit interaction is not (F = .335, p = .892). Some researchers are critical of this type of
analysis because it is based on fixed-effects adjusted for the repeated factor.
Also, this repeated measures analysis assumes compound symmetry in the
covariance matrix (which seems to be a stretch in this case). However, we can do
worse.  Below we will try OLS regression.

regression
 /dependent = dep
 /method = enter pre group visit.

Image gee10

Image gee11

Image gee12

We are finally ready to try the panel data analysis using SPSS’s genlin
command. This command allows us to specify various working covariance structures
through the use of the corrtype option on the repeated subcommand. We will start with a covariance
structure of independence. We don’t believe that this is the correct covariance
structure, but it allows us to compare results with the OLS regression results above. The
workingcorr option on the print subcommand will allow us to view the working correlation matrix.
Note that this option is only available if the repeated subcommand is
used. (The genlin command was introduced in SPSS version 15 and enhanced
in version 16.  If you are using an earlier version of SPSS, this command
will not work.)

genlin dep with pre visit group
 /model pre group visit distribution = normal link = identity
 /repeated subject = subj
 /print modelinfo cps solution workingcorr.

Image gee13

Image gee14

Image gee15

Image gee16

The previous analyses yielded identical but probably incorrect results.
The common thread among
them is that they all assume that the observations within subjects are independent.
This seems, on the face of it, to be highly unlikely. Scores on the depression scale
are not likely to be independent from one visit to the next.

We can also try analyzing these data using compound symmetry for the correlational structure.
Compound symmetry is obtained using exchangable for the corrtype option.

genlin dep with pre visit group
 /model pre visit group distribution = normal link = identity
 /repeated subject = subj corrtype = exchangeable
 /print modelinfo cps solution workingcorr.

Image gee17

Image gee18

Image gee19

Image gee20

Note in particular the change in the standard errors between this analysis and the previous one.
Now, let’s try a different correlation structure, auto regressive with lag one. This is the correlational structure that is most likely to be correct considering the repeated measures
over time.  I should note that, in some cases, SPSS and SAS handle models
with an ar(1) structure differently than other packages, such as Stata.  Stata does not use
subjects that have only observation, since ar(1) doesn’t make much sense given
one data point.  SPSS and SAS use all of the available
cases.  You can see how many cases SPSS is using the Case Processing
Summary table.

genlin dep with pre visit group
 /model pre group visit distribution = normal link = identity
 /repeated subject = subj corrtype = ar(1)
 /print modelinfo cps solution workingcorr.

Image gee21

Image gee22

Image gee23

Image gee24

Image gee25

This analysis probably more closely reflects the correlations among the depression scores
over six visits that we observed in our descriptive analysis.

Now, let’s back up and reconsider the group by visit interaction. We will try a model
with the interaction using the ar1 correlations.  Note that we have omitted
some of the output in order to save space.

compute gxv = group*visit.
exe.
genlin dep with pre visit group gxv
 /model pre group visit gxv distribution = normal link = identity
 /repeated subject = subj corrtype = ar(1).

Image gee26

Image gee27

Image gee28

Image gee29

The group by visit interaction still is not significant, even though this may be a better
approach for testing it. So far we have been treating visit as a continuous
variable. Is it possible that our analysis might change if we were to treat
visit as a categorical variable, in the way that the ANOVA did?

compute visit2 = 0.
if visit = 2 visit2 = 1.
compute visit3 = 0.
if visit = 3 visit3 = 1.
compute visit4 = 0.
if visit = 4 visit4 = 1.
compute visit5 = 0.
if visit = 5 visit5 = 1.
compute visit6 = 0.
if visit = 6 visit6 = 1.
exe.
genlin dep with pre visit2 visit3 visit4 visit5 visit6 group 
 /model pre visit2 visit3 visit4 visit5 visit6 group distribution = normal link = identity
 /repeated subject = subj corrtype = ar(1).

Image gee30

Image gee31

Image gee32

Image gee33

In the final analysis, I think that I prefer the following model:

genlin dep with pre visit group
 /model pre group visit distribution = normal link = identity
 /repeated subject = subj corrtype = ar(1).

of all the analyses run so far. Those results looked as follows:

Image gee38

The final interpretation of these results indicate that there is a
significant effect for the pretest, i.e., for every one point increase in the
pretest score there is about a 0.4 increase in the depression score, when
controlling for treatment and visit. There is also an effect for the estrogen
patch when controlling for pretest depression and visit. Use of the estrogen
patch reduces the depression score by 4 points.
Finally, there is also a significant visit effect when controlling
for pretest depression and group membership. The depression score decreases on the average by 1.2
points for each visit.

GEE with Binary Response Variable

The binary response variable in these examples was created from the
data from the 1996 Gregoire, Kumar Everitt, Henderson and Studd study on
the efficacy of estrogen patches in treating postnatal depression. Women were randomly
assigned to either a placebo control group (group=0, n=27) or estrogen patch group
(group=1, n=34). Prior to the first treatment all patients took the Edinburgh Postnatal
Depression Scale (EPDS). EPDS data was collected monthly for six months once the treatment began.
Depression scores greater than or equal to 11 were coded as 1. You can download
the data file here.

get file = 'D:\depressed01.sav'.

We will go through as series of analyses pretty much paralleling models that were
run above using the continuous response variable. To get a binary logit type model
we will set distribution to binomial and link to logit. We will start with the
correlation structure independent follow by exchangeable (compound symmetry) and then unstructured.

genlin depressd (reference = first) with visit group
 /model visit group distribution = binomial link = logit
 /repeated subject = subj
 /print modelinfo cps solution workingcorr.

Image gee39

Image gee40

Image gee41

Image gee42

Image gee43

genlin depressd (reference = first) with visit group
 /model visit group distribution = binomial link = logit
 /repeated subject = subj corrtype = exchangeable
 /print modelinfo cps solution workingcorr.

Image gee44

Image gee45

Image gee46

Image gee47

Image gee48

genlin depressd (reference = first) with visit group
 /model visit group distribution = binomial link = logit
 /repeated subject = subj corrtype = unstructured
 /print modelinfo cps solution workingcorr.

Image gee49

Image gee50

Image gee51

Image gee52

Image gee53

With these data, just as with the continuous response variable, it might be more reasonable to
hypothesize that the correlation structure would be autoregressive.

genlin depressd (reference = first) with visit group
 /model visit group distribution = binomial link = logit
 /repeated subject = subj withinsubject=visit corrtype = ar(1) covb=model
 /print modelinfo cps solution workingcorr.

Image gee54

Image gee55

Image gee56

Image gee57

Image gee58

If we want, we can also obtain the results in the odds ratio metric using the
exponentiated
option on the print subcommand.

genlin depressd (reference = first) with visit group
 /model visit group distribution = binomial link = logit
 /repeated subject = subj corrtype = ar(1)
 /print solution (exponentiated) modelinfo.

Image gee59

Image gee60

Let’s add in the pretest (pre) and a group by visit
interaction.

compute gxv = group*visit.

genlin depressd (reference = first) with pre group visit gxv
 /model pre group visit gxv distribution = binomial link = logit
 /repeated subject = subj corrtype = ar(1)
 /print solution modelinfo.

Image gee61

Image gee62

Clearly, there is no interaction but we’ll stick with the pretest for the moment.
Next let’s try the categorical version of visit and the model that contains both
the categorical and continuous version of visit.

compute visit2 = 0.
if visit = 2 visit2 = 1.
compute visit3 = 0.
if visit = 3 visit3 = 1.
compute visit4 = 0.
if visit = 4 visit4 = 1.
compute visit5 = 0.
if visit = 5 visit5 = 1.
compute visit6 = 0.
if visit = 6 visit6 = 1.
exe.

genlin depressd (reference = first) with pre group visit2 visit3 visit4 visit5 
 /model pre group visit2 visit3 visit4 visit5 distribution = binomial link = logit
 /repeated subject = subj corrtype = ar(1)
 /print solution modelinfo.

Image gee63

Image gee64