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

***********************************************************************************.
*******           BEGIN DATA MANIPULATION OF CHAPTER 9 EXAMPLE              *******.
*******               CHANGE "filesave" to your directory                   *******.
***********************************************************************************.

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

* Import chapter 9 multivariate data.
* Also make person mean monitoring.
GET FILE = "filesave/SPSS_Chapter9.sav".
DATASET NAME Chapter9multiv WINDOW=FRONT.
COMPUTE PMmonitor = MEAN(monitor12 TO monitor18).
VARIABLE LABELS PMmonitor "PMmonitor: Person Mean Monitoring".
EXECUTE.

* Open output directory.
OUTPUT NAME SPSS_Chapter9_Output.

ECHO "Chapter 9: Descriptive Statistics for Time-Invariant Variables".
SUMMARIZE
   /TABLES = attitude12 PMmonitor monitor18
   /FORMAT = NOLIST TOTAL 
   /CELLS  = COUNT MEAN STDDEV MIN MAX.
CORRELATIONS VARIABLES= PMmonitor monitor12 monitor18.

* Stack multivariate data.
* Also make a copy of monitor18 for later.
DATASET ACTIVATE Chapter9Multiv.
COMPUTE copymonitor18 = monitor18.
VARSTOCASES
   /MAKE age FROM age12 TO age18
   /MAKE risky FROM risky12 TO risky18
   /MAKE monitor FROM monitor12 TO monitor18
   /INDEX = wave (7)
   /KEEP = ALL.
DATASET NAME Chapter9 WINDOW=FRONT.
COMPUTE occasion = wave + 11.
VARIABLE LABELS
copymonitor18 "copymonitor18: Monitoring at Age 18 (copy)"
wave "wave: Wave of Study (1-7)"
occasion "occasion: Occasion of Measurement (12-18)"
age "age: Exact Age at Occasion"
risky "risky: Risky Behavior at Occasion"
monitor "monitor: Monitoring at Occasion".
EXECUTE.

* Center predictors for analysis in stacked data.
DATASET ACTIVATE Chapter9.
COMPUTE agec18 = age - 18.
COMPUTE att4 = attitude12 - 4.
COMPUTE mon3 = monitor - 3.
COMPUTE PMmon3 = PMmonitor - 3.
COMPUTE WPmon = monitor - PMmonitor.
COMPUTE Age18mon3 = copymonitor18 - 3.
COMPUTE Change18mon = monitor - copymonitor18.
VARIABLE LABELS
agec18 "agec18: Exact Age (0=18)"
att4 "att4: Age 12 Attitudes (0=4)"
mon3 "mon3: Monitoring (0=3)"
PMmon3 "PMmon3: Person Mean Monitoring (0=3)"
WPmon "WPmon: Within-Person Monitoring (0=PM)"
Age18mon3 "Age18mon3: BP Monitoring at Age 18 (0=3)"
Change18mon "Change18mon: WP Monitoring from Age 18 (0=Age18)".
EXECUTE.

* Subset sample to complete cases for all predictors.
SELECT IF NVALID(agec18, att4, risky, PMmonitor, Age18mon3, monitor)=6.
EXECUTE.

DATASET ACTIVATE Chapter9.
ECHO "Chapter 9: Descriptive Statistics for Time-Varying Variables".
SUMMARIZE
   /TABLES = age risky monitor WPmon Change18mon
   /FORMAT = NOLIST TOTAL 
   /CELLS  = COUNT MEAN STDDEV MIN MAX.
CORRELATIONS VARIABLES= PMmon3 Age18mon3 WPmon Change18mon.

***********************************************************************************.
*****                           BEGIN CHAPTER 9 MODELS                         ****.
*****  NOTE: Truly multivariate longitudinal models are not possible in MIXED  ****.
*****  NOTE: SPSS will not do slopes-as-outcomes (no predicted random effects) ****.
*****  NOTE: Fixed effects slopes-as-outcomes is also not included             ****.
***********************************************************************************.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Ch 9: Empty Means, Random Intercept Model for Monitoring'.
MIXED monitor BY PersonID
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    =
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(PersonID)
.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Ch 9: Fixed Linear Age, Random Intercept Model for Monitoring'.
MIXED monitor BY PersonID WITH agec18
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18
     /RANDOM   = INTERCEPT | COVTYPE(UN) SUBJECT(PersonID)
.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Ch 9: Random Linear Age Model for Monitoring'.
MIXED monitor BY PersonID WITH agec18
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18
     /RANDOM   = INTERCEPT agec18 | COVTYPE(UN) SUBJECT(PersonID)
.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Ch 9: Fixed Quadratic, Random Linear Age Model for Monitoring'.
MIXED monitor BY PersonID WITH agec18
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18 agec18*agec18
     /RANDOM   = INTERCEPT agec18 | COVTYPE(UN) SUBJECT(PersonID)
.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Ch 9: Random Quadratic Age Model for Monitoring'.
MIXED monitor BY PersonID WITH agec18
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18 agec18*agec18
     /RANDOM   = INTERCEPT agec18 agec18*agec18 | COVTYPE(UN) SUBJECT(PersonID)
.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Ch 9: Fixed Quadratic, Random Linear Age Model for Risky Behavior;'.
ECHO 'Conditional Baseline with Attitudes Predicting Linear Age Slope'.
MIXED risky BY PersonID WITH agec18 att4
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18 agec18*agec18
                 att4 agec18*att4
     /RANDOM   = INTERCEPT agec18 | COVTYPE(UN) SUBJECT(PersonID)
.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Eq 9.1: Predicting Quadratic Change in Risky Behavior;'.
ECHO 'From Person Mean Monitoring as Between-Person Monitoring'.
MIXED risky BY PersonID WITH agec18 att4 PMmon3
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18 agec18*agec18 att4 agec18*att4
                 PMmon3 agec18*PMmon3 agec18*agec18*PMmon3
     /RANDOM   = INTERCEPT agec18 | COVTYPE(UN) SUBJECT(PersonID)
     /TEST     = 'Effect of PM Monitoring at Age 12'       PMmon3 1 agec18*PMmon3 -6 agec18*agec18*PMmon3 36
     /TEST     = 'Effect of PM Monitoring at Age 14'       PMmon3 1 agec18*PMmon3 -4 agec18*agec18*PMmon3 16
     /TEST     = 'Effect of PM Monitoring at Age 16'       PMmon3 1 agec18*PMmon3 -2 agec18*agec18*PMmon3 4
     /TEST     = 'Effect of PM Monitoring at Age 18'       PMmon3 1 agec18*PMmon3 0  agec18*agec18*PMmon3 0
     /SAVE     = FIXPRED(PredPMBP)
.
CORRELATIONS risky PredPMBP.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Eq 9.1: Predicting Quadratic Change in Risky Behavior;'.
ECHO 'From Monitoring at Age 18 as Between-Person Monitoring'.
MIXED risky BY PersonID WITH agec18 att4 Age18mon3
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18 agec18*agec18 att4 agec18*att4
                 Age18mon3 agec18*Age18mon3 agec18*agec18*Age18mon3
     /RANDOM   = INTERCEPT agec18 | COVTYPE(UN) SUBJECT(PersonID)
     /TEST     = 'Effect of Age 18 Monitoring at Age 12'   Age18mon3 1 agec18*Age18mon3 -6 agec18*agec18*Age18mon3 36
     /TEST     = 'Effect of Age 18 Monitoring at Age 14'   Age18mon3 1 agec18*Age18mon3 -4 agec18*agec18*Age18mon3 16
     /TEST     = 'Effect of Age 18 Monitoring at Age 16'   Age18mon3 1 agec18*Age18mon3 -2 agec18*agec18*Age18mon3 4
     /TEST     = 'Effect of Age 18 Monitoring at Age 18'   Age18mon3 1 agec18*Age18mon3 0  agec18*agec18*Age18mon3 0
     /SAVE     = FIXPRED(Pred18BP)
.
CORRELATIONS risky Pred18BP.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Eq 9.2: Adding Within-Person Monitoring by Quadratic Age;'.
ECHO 'Using Deviation from Person Mean Monitoring as Within-Person Monitoring'.
MIXED risky BY PersonID WITH agec18 att4 PMmon3 WPmon
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18 agec18*agec18 att4 agec18*att4
                 PMmon3 agec18*PMmon3 agec18*agec18*PMmon3
                 WPmon agec18*WPmon agec18*agec18*WPmon
     /RANDOM   = INTERCEPT agec18 | COVTYPE(UN) SUBJECT(PersonID)
     /TEST     = 'Effect of PM Monitoring at Age 12'       PMmon3 1 agec18*PMmon3 -6 agec18*agec18*PMmon3 36
     /TEST     = 'Effect of PM Monitoring at Age 14'       PMmon3 1 agec18*PMmon3 -4 agec18*agec18*PMmon3 16
     /TEST     = 'Effect of PM Monitoring at Age 16'       PMmon3 1 agec18*PMmon3 -2 agec18*agec18*PMmon3 4
     /TEST     = 'Effect of PM Monitoring at Age 18'       PMmon3 1 agec18*PMmon3 0  agec18*agec18*PMmon3 0
     /TEST     = 'Effect of WP Monitoring at Age 12'       WPmon 1 agec18*WPmon -6 agec18*agec18*WPmon 36
     /TEST     = 'Effect of WP Monitoring at Age 14'       WPmon 1 agec18*WPmon -4 agec18*agec18*WPmon 16
     /TEST     = 'Effect of WP Monitoring at Age 16'       WPmon 1 agec18*WPmon -2 agec18*agec18*WPmon 4
     /TEST     = 'Effect of WP Monitoring at Age 18'       WPmon 1 agec18*WPmon 0  agec18*agec18*WPmon 0
     /SAVE     = FIXPRED(PredPMBPWP)
.
CORRELATIONS risky PredPMBPWP.

DATASET ACTIVATE Chapter9 WINDOW=FRONT.
ECHO 'Eq 9.2: Adding Within-Person Monitoring by Quadratic Age;'.
ECHO 'Using Change from Age 18 Monitoring as Within-Person Monitoring'.
MIXED risky BY PersonID WITH agec18 att4 Age18mon3 Change18mon
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV
     /FIXED    = agec18 agec18*agec18 att4 agec18*att4
                 Age18mon3 agec18*Age18mon3 agec18*agec18*Age18mon3
                 Change18mon agec18*Change18mon agec18*agec18*Change18mon
     /RANDOM   = INTERCEPT agec18 | COVTYPE(UN) SUBJECT(PersonID)
     /TEST     = 'Effect of Age 18 Monitoring at Age 12'        Age18mon3 1 agec18*Age18mon3 -6 agec18*agec18*Age18mon3 36
     /TEST     = 'Effect of Age 18 Monitoring at Age 14'        Age18mon3 1 agec18*Age18mon3 -4 agec18*agec18*Age18mon3 16
     /TEST     = 'Effect of Age 18 Monitoring at Age 16'        Age18mon3 1 agec18*Age18mon3 -2 agec18*agec18*Age18mon3 4
     /TEST     = 'Effect of Age 18 Monitoring at Age 18'        Age18mon3 1 agec18*Age18mon3 0  agec18*agec18*Age18mon3 0
     /TEST     = 'Effect of Change in Monitoring at Age 12'     Change18mon 1 agec18*Change18mon -6 agec18*agec18*Change18mon 36
     /TEST     = 'Effect of Change in Monitoring at Age 14'     Change18mon 1 agec18*Change18mon -4 agec18*agec18*Change18mon 16
     /TEST     = 'Effect of Change in Monitoring at Age 16'     Change18mon 1 agec18*Change18mon -2 agec18*agec18*Change18mon 4
     /TEST     = 'Effect of Change in Monitoring at Age 18'     Change18mon 1 agec18*Change18mon 0  agec18*agec18*Change18mon 0
     /SAVE     = FIXPRED(Pred18BPWP)
.
CORRELATIONS risky Pred18BPWP.

* Create double-stacked dataset for multivariate analysis.
DATASET ACTIVATE Chapter9.
DATASET COPY Chapter9doublestacked.
DATASET ACTIVATE Chapter9doublestacked.
VARSTOCASES
   /MAKE outcome FROM risky monitor
   /INDEX = DV (2)
   /KEEP = ALL.
VALUE LABELS DV 1 "1risky" 2 "2monitor".
* Create dummy codes to serve as intercepts.
DOIF (DV=1).
COMPUTE dvR=1.
COMPUTE dvM=0.
END IF.
DOIF (DV=2).
COMPUTE dvR=0.
COMPUTE dvM=1.
END IF.
VARIABLE LABELS
DV "DV: Categorical indicator for which DV the row is for"
dvR "dvR: Intercept 1=risky, 0=monitor"
dvM "dvM: Intercept 0=risky, 1=monitor"
outcome "outcome: Combined outcome variable column".
EXECUTE.

DATASET ACTIVATE Chapter9doublestacked WINDOW=FRONT.
ECHO 'Ch 9 Eq 9.3: Multivariate Model of Risky Behavior and Monitoring;'.
ECHO 'Tricking Univariate Software'.
MIXED outcome BY PersonID occasion DV WITH agec18 att4 dvR dvM
     /METHOD   = ML
     /PRINT    = SOLUTION TESTCOV G R
     /FIXED    = dvR dvM dvR*agec18 dvM*agec18 dvR*agec18*agec18
                 dvR*att4 dvR*agec18*att4 | NOINT
     /RANDOM   = dvR dvM dvR*agec18 dvM*agec18 | COVTYPE(UN) SUBJECT(PersonID)
     /REPEATED = DV | COVTYPE(UN) SUBJECT(PersonID*occasion)
.

****** END CHAPTER 9 MODELS ******.

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