* Stop syntax and large titles from printing to output.
SET PRINTBACK=NONE HEADER=NO.

***********************************************************************************.
*******   BEGIN DATA MANIPULATION OF CHAPTER 12 REPEATED MEASURES EXAMPLE   *******.
*******               CHANGE "filesave" to your directory                   *******.
***********************************************************************************.

* Define location of files used in code below.
FILE HANDLE filesave /NAME = "C:\Dropbox\PilesOfVariance\Chapter12\SPSS".

* Import chapter 12 stacked data and create variables for analysis. 
GET FILE = "filesave/SPSS_Chapter12.sav".
DATASET NAME Chapter12 WINDOW=FRONT.

* Log of response time.
COMPUTE logrt = LN(rt).
* Make copy of 'older' to be used in heterogeneous variance models.
COMPUTE agegroup = older.
* Piecewise effect of age.
IF (older=0) yrs65=0.
IF (older=1) yrs65=age-65.
* Item predictors.
COMPUTE rel3 = relevance - 3.
COMPUTE sal3 = salience - 3.
VARIABLE LABELS
logrt "logrt: Natural Log RT in Seconds"
agegroup "agegroup: Younger=0, Older=1"
yrs65 "yrs65: Subject Years of Age Over 65 (0=65)"
rel3  "rel3: Item Relevance (0=3)"
sal3  "sal3: Item Salience (0=3)".

* Subset sample to complete cases for all predictors.
SELECT IF NVALID(older, yrs65, relevance, salience, logrt)=5.
EXECUTE.

* Aggregate to subject-level data for subject descriptives.
SORT CASES BY SubjectID.
DATASET DECLARE SubjectMeans12.
AGGREGATE
   /OUTFILE="SubjectMeans12"
   /PRESORTED
   /BREAK = SubjectID
   /SMolder = MEAN(older)
   /SMage = MEAN(age).

* Aggregate to item-level data for item descriptives.
SORT CASES BY ItemID.
DATASET DECLARE ItemMeans12.
AGGREGATE
   /OUTFILE="ItemMeans12"
   /PRESORTED
   /BREAK = ItemID
   /IMrelevance = MEAN(relevance)
   /IMsalience = MEAN(salience).

* Sort back to subjects, then items.
DATASET ACTIVATE Chapter12.
SORT CASES BY SubjectID ItemID.

* Creating 'fake people' to show final model interactions.
* Each row is a fake person for which to create a predicted outcome.
DATA LIST FREE / SubjectID ItemID yrs65 older agegroup rel3 sal3.
BEGIN DATA.
-99  -99 15  1  1 -2 -2
-99  -99 15  1  1 -1 -2
-99  -99 15  1  1  0 -2
-99  -99 15  1  1  1 -2
-99  -99 15  1  1  2 -2
-99  -99  0  1  1 -2 -2
-99  -99  0  1  1 -1 -2
-99  -99  0  1  1  0 -2
-99  -99  0  1  1  1 -2
-99  -99  0  1  1  2 -2
-99  -99  0  0  0 -2 -2
-99  -99  0  0  0 -1 -2
-99  -99  0  0  0  0 -2
-99  -99  0  0  0  1 -2
-99  -99  0  0  0  2 -2
-99  -99 15  1  1 -2  1
-99  -99 15  1  1 -1  1
-99  -99 15  1  1  0  1
-99  -99 15  1  1  1  1
-99  -99 15  1  1  2  1
-99  -99  0  1  1 -2  1
-99  -99  0  1  1 -1  1
-99  -99  0  1  1  0  1
-99  -99  0  1  1  1  1
-99  -99  0  1  1  2  1
-99  -99  0  0  0 -2  1
-99  -99  0  0  0 -1  1
-99  -99  0  0  0  0  1
-99  -99  0  0  0  1  1
-99  -99  0  0  0  2  1
END DATA.
DATASET NAME FakePeople.
* Merge with real data.
ADD FILES FILE=Chapter12 /FILE=FakePeople.
DATASET NAME PlotFakePeople.
SORT CASES BY SubjectID ItemID.
DATASET CLOSE FakePeople.

***********************************************************************************.
*******          BEGIN CHAPTER 12 CROSSED RANDOM EFFECTS MODELS             *******.
*******          NOTE: MODELS WITH GROUP-HETEROGENEOUS RANDOM               *******.  
*******          INTERCEPTS AND SLOPES ARE NOT POSSIBLE IN SPSS             *******.
***********************************************************************************.

* Open output directory.
OUTPUT NAME SPSS_Chapter12_Output.

DATASET ACTIVATE SubjectMeans12.
ECHO "Chapter 12: Descriptive Statistics for Subject-Level Variables".
SUMMARIZE
   /TABLES = SMage BY SMolder
   /FORMAT = NOLIST TOTAL 
   /CELLS  = COUNT MEAN STDDEV MIN MAX.

DATASET ACTIVATE ItemMeans12.
ECHO "Chapter 12: Descriptive Statistics for Item-Level Variables".
SUMMARIZE
   /TABLES = IMrelevance IMsalience
   /FORMAT = NOLIST TOTAL 
   /CELLS  = COUNT MEAN STDDEV MIN MAX.

DATASET ACTIVATE Chapter12.
ECHO "Chapter 12: Descriptive Statistics for Trial-Level Variables".
SUMMARIZE
   /TABLES = rt logrt
   /FORMAT = NOLIST TOTAL 
   /CELLS  = COUNT MEAN STDDEV MIN MAX.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Empty Means, Single-Level Model for Log RT'.
MIXED logrt
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    =
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Add Subject Random Intercept Variance'.
MIXED logrt BY SubjectID
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    =
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(SubjectID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Add Item Random Intercept Variance'.
MIXED logrt BY SubjectID ItemID
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    =
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Add Fixed Effects of Item Predictors'.
MIXED logrt BY SubjectID ItemID WITH rel3 sal3
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
     /TEST     = 'Multivariate Test of 3 Item Predictor Effects' rel3 1; sal3 1; rel3*sal3 1
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Remove Item Random Intercept Variance'.
MIXED logrt BY SubjectID WITH rel3 sal3
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(SubjectID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Eq 12.12: Add Fixed Main Effects of Subject Predictors'.
MIXED logrt BY SubjectID ItemID WITH rel3 sal3 older yrs65
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3 older yrs65
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
     /TEST     = 'Multivariate Test of 2 Subject Predictor Effects' older 1; yrs65 1
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Remove Subject Random Intercept Variance'.
MIXED logrt BY ItemID WITH rel3 sal3 older yrs65
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3 older yrs65
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Eq 12.13: Add Subject Random Salience Slope Variance and Covariance'.
MIXED logrt BY SubjectID ItemID WITH rel3 sal3 older yrs65
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3 older yrs65
     /RANDOM   = INTERCEPT sal3 | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Add Subject Random Relevance Slope Variance and Covariances'.
MIXED logrt BY SubjectID ItemID WITH rel3 sal3 older yrs65
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3 older yrs65
     /RANDOM   = INTERCEPT sal3 rel3 | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Eq 12.14: Add All Possible Fixed Effect Interactions'.
MIXED logrt BY SubjectID ItemID WITH rel3 sal3 older yrs65
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3 older yrs65
                 rel3*older sal3*older rel3*sal3*older
                 rel3*yrs65 sal3*yrs65 rel3*sal3*yrs65
     /RANDOM   = INTERCEPT sal3 | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Eq 12.15: Keep Significant Fixed Effect Interactions'.
MIXED logrt BY SubjectID ItemID WITH rel3 sal3 older yrs65
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3 older yrs65
                 rel3*older sal3*older rel3*sal3*older
     /RANDOM   = INTERCEPT sal3 | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Remove Subject Random Slope Variance and Covariance'.
MIXED logrt BY SubjectID ItemID WITH rel3 sal3 older yrs65
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3 older yrs65
                 rel3*older sal3*older rel3*sal3*older
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
.

DATASET ACTIVATE Chapter12 WINDOW=FRONT.
ECHO 'Ch 12: Add Separate Residual Variances by Age Group'.
MIXED logrt BY SubjectID ItemID agegroup WITH rel3 sal3 older yrs65
     /METHOD   = REML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = rel3 sal3 rel3*sal3 older yrs65
                 rel3*older sal3*older rel3*sal3*older
     /RANDOM   = INTERCEPT sal3 | COVTYPE(UN) SUBJECT(SubjectID)
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(ItemID)
     /REPEATED = agegroup | COVTYPE(DIAG) SUBJECT(SubjectID*ItemID)
.

****** END CHAPTER 12 MODELS ******.

* Close output directory.
OUTPUT EXPORT NAME=SPSS_Chapter12_Output
     /CONTENTS EXPORT=VISIBLE LAYERS=VISIBLE MODELVIEWS=VISIBLE
     /HTML DOCUMENTFILE='C:\Dropbox\PilesOfVariance\Chapter12\SPSS\SPSS_Chapter12_Output.html'
           IMAGEFORMAT=PNG STYLING=YES.