* Prevent "more" messages from appearing
set more off 
* Control line length
set linesize 150 
 
********************************************************************************
*******            BEGIN DATA MANIPULATION OF CHAPTER 9 EXAMPLE          *******
*******               CHANGE "filesave" to your directory                *******
********************************************************************************
 
* Defining global variable for file location to be replaced in code below
global filesave "C:\Dropbox\PilesOfVariance\Chapter9\STATA" 
 
* Import and stack chapter9 multivariate data
* Also create person mean monitoring and make a copy of monitor12 and monitor18 for later
* List time-varying variables first, i(level2ID) j(newtimeID)
use "$filesave\STATA_Chapter9.dta", clear 
egen pmmonitor = rowmean(monitor*) 
label variable pmmonitor "pmmonitor: Person Mean Monitoring" 
gen copymonitor12 = monitor12 
gen copymonitor18 = monitor18 
reshape long age risky monitor, i(personid) j(occasion) 
label variable occasion "occasion: Occasion of Measurement (12-18)" 
label variable age "age: Exact Age at Occasion" 
label variable risky "risky: Risky Behavior at Occasion" 
label variable monitor "monitor: Monitoring at Occasion" 
 
* Center predictors for analysis in stacked data
gen agec18 = age - 18 
gen agec18sq = agec18 * agec18 
gen att4 = attitude12 - 4 
gen mon3 = monitor - 3 
gen pmmon3 = pmmonitor - 3 
gen wpmon = monitor - pmmonitor 
gen age18mon3 = copymonitor18 - 3 
gen change18mon = monitor - copymonitor18 
label variable agec18 "agec18: Exact Age (0=18)" 
label variable agec18sq "agec18sq: Exact Quadratic Age (0=18)" 
label variable att4 "att4: Age 12 Attitudes (0=4)" 
label variable mon3 "mon3: Monitoring (0=3)" 
label variable pmmon3 "pmmon3: Person Mean Monitoring (0=3)" 
label variable wpmon "wpmon: Within-Person Monitoring (0=PM)" 
label variable age18mon3 "age18mon3: BP Monitoring at Age 18 (0=3)" 
label variable change18mon "change18mon: WP Monitoring from Age 18 (0=Age18)" 
 
* Subset sample to complete cases for all predictors
egen nummiss = rowmiss(agec18 att4 risky pmmonitor age18mon3 monitor) 
drop if nummiss>0 
 
********************************************************************************
*****                        BEGIN CHAPTER 9 MODELS                        *****
*****   NOTE: No multivariate longitudinal models are possible in MIXED    *****
*****   NOTE: Fixed effects slopes-as-outcomes is also not included        *****
********************************************************************************
 
* Save results to separate file
log using $filesave\STATA_Chapter9_Output, replace name(STATA_Chapter9) 
 
display as result "Chapter 9: Descriptive Statistics for Time-Varying Variables" 
preserve  
collapse attitude12 pmmonitor copymonitor12 copymonitor18, by(personid) 
summarize attitude12 pmmonitor copymonitor12 copymonitor18 
corr pmmonitor copymonitor12 copymonitor18 
restore  
 
display as result "Chapter 9: Descriptive Statistics for Time-Varying Variables" 
summarize age risky monitor wpmon change18mon 
corr pmmon3 age18mon3 wpmon change18mon  
 
display as result "Ch 9: Empty Means, Random Intercept Model for Monitoring" 
mixed monitor , ///
                || personid: , variance mle covariance(unstructured), 
      estat ic, n(200), 
      estat icc, 
      estat wcorrelation, covariance, 
      estat wcorrelation, 
 
display as result "Ch 9: Fixed Linear Age, Random Intercept Model for Monitoring" 
mixed monitor c.agec18, ///
                || personid: , variance mle covariance(unstructured), 
      estat ic, n(200), 
      estimates store FitFixLin, 
 
display as result "Ch 9: Random Linear Age Model for Monitoring" 
mixed monitor c.agec18, ///
                || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      estimates store FitRandLin, 
      lrtest FitRandLin FitFixLin,  
 
display as result "Ch 9: Fixed Quadratic, Random Linear Age Model for Monitoring" 
mixed monitor c.agec18 c.agec18#c.agec18, ///
                || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      estimates store FitFixQuad, 
 
display as result "Ch 9: Random Quadratic Age Model for Monitoring" 
mixed monitor c.agec18 c.agec18#c.agec18, ///
                || personid: agec18 agec18sq, variance mle covariance(unstructured), 
      estat ic, n(200), 
      estimates store FitRandQuad, 
      lrtest FitRandQuad FitFixQuad, force 
 
display as result "Ch 9: Fixed Quadratic, Random Linear Age Model for Risky Behavior" 
display as result "Conditional Baseline with Attitudes Predicting Linear Age Slope" 
mixed risky c.agec18 c.agec18#c.agec18 ///
            c.att4 c.agec18#c.att4, ///
              || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      predict PredAttOnly, xb, 
 
display as result "Eq 9.1: Predicting Quadratic Change in Risky Behavior" 
display as result "From Person Mean Monitoring as Between-Person Monitoring" 
mixed risky c.agec18 c.agec18#c.agec18 c.att4 c.agec18#c.att4 ///
            c.pmmon3 c.agec18#c.pmmon3 c.agec18#c.agec18#c.pmmon3, ///
              || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      * Effect of PM Monitoring at Age 12
      lincom pmmon3*1 + c.agec18#c.pmmon3*-6 + c.agec18#c.agec18#c.pmmon3*36 
      * Effect of PM Monitoring at Age 14
      lincom pmmon3*1 + c.agec18#c.pmmon3*-4 + c.agec18#c.agec18#c.pmmon3*16 
      * Effect of PM Monitoring at Age 16
      lincom pmmon3*1 + c.agec18#c.pmmon3*-2 + c.agec18#c.agec18#c.pmmon3*4 
      * Effect of PM Monitoring at Age 18
      lincom pmmon3*1 + c.agec18#c.pmmon3*0  + c.agec18#c.agec18#c.pmmon3*0 
      predict PredPMBP, xb, 
corr risky PredPMBP 
 
display as result "Eq 9.1: Predicting Quadratic Change in Risky Behavior" 
display as result "From Monitoring at Age 18 as Between-Person Monitoring" 
mixed risky c.agec18 c.agec18#c.agec18 c.att4 c.agec18#c.att4 ///
            c.age18mon3 c.agec18#c.age18mon3 c.agec18#c.agec18#c.age18mon3, ///
              || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      * Effect of Age 18 Monitoring at Age 12
      lincom c.age18mon3*1 + c.agec18#c.age18mon3*-6 + c.agec18#c.agec18#c.age18mon3*36 
      * Effect of Age 18 Monitoring at Age 14
      lincom c.age18mon3*1 + c.agec18#c.age18mon3*-4 + c.agec18#c.agec18#c.age18mon3*16 
      * Effect of Age 18 Monitoring at Age 16
      lincom c.age18mon3*1 + c.agec18#c.age18mon3*-2 + c.agec18#c.agec18#c.age18mon3*4 
      * Effect of Age 18 Monitoring at Age 18
      lincom c.age18mon3*1 + c.agec18#c.age18mon3*0  + c.agec18#c.agec18#c.age18mon3*0 
      predict Pred18BP, xb, 
corr risky Pred18BP 
 
display as result "Eq 9.2: Adding Within-Person Monitoring by Quadratic Age" 
display as result "Using Deviation from Person Mean Monitoring as Within-Person Monitoring" 
mixed risky c.agec18 c.agec18#c.agec18 c.att4 c.agec18#c.att4 ///
            c.pmmon3 c.agec18#c.pmmon3 c.agec18#c.agec18#c.pmmon3 ///
            c.wpmon c.agec18#c.wpmon c.agec18#c.agec18#c.wpmon, /// 
              || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      * Effect of PM Monitoring at Age 12
      lincom c.pmmon3*1 + c.agec18#c.pmmon3*-6 + c.agec18#c.agec18#c.pmmon3*36 
      * Effect of PM Monitoring at Age 14
      lincom c.pmmon3*1 + c.agec18#c.pmmon3*-4 + c.agec18#c.agec18#c.pmmon3*16 
      * Effect of PM Monitoring at Age 16
      lincom c.pmmon3*1 + c.agec18#c.pmmon3*-2 + c.agec18#c.agec18#c.pmmon3*4 
      * Effect of PM Monitoring at Age 18
      lincom c.pmmon3*1 + c.agec18#c.pmmon3*0  + c.agec18#c.agec18#c.pmmon3*0 
      * Effect of WP Monitoring at Age 12
      lincom c.wpmon*1 + c.agec18#c.wpmon*-6 + c.agec18#c.agec18#c.wpmon*36 
      * Effect of WP Monitoring at Age 14
      lincom c.wpmon*1 + c.agec18#c.wpmon*-4 + c.agec18#c.agec18#c.wpmon*16 
      * Effect of WP Monitoring at Age 16
      lincom c.wpmon*1 + c.agec18#c.wpmon*-2 + c.agec18#c.agec18#c.wpmon*4 
      * Effect of WP Monitoring at Age 18
      lincom c.wpmon*1 + c.agec18#c.wpmon*0  + c.agec18#c.agec18#c.wpmon*0 
      predict PredPMBPWP, xb, 
corr risky PredPMBPWP 
 
display as result "Eq 9.2: Adding Within-Person Monitoring by Quadratic Age" 
display as result "Using Change from Age 18 Monitoring as Within-Person Monitoring" 
mixed risky c.agec18 c.agec18#c.agec18 c.att4 c.agec18#c.att4 ///
            c.age18mon3 c.agec18#c.age18mon3 c.agec18#c.agec18#c.age18mon3 ///
            c.change18mon c.agec18#c.change18mon c.agec18#c.agec18#c.change18mon, /// 
              || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      * Effect of Age 18 Monitoring at Age 12
      lincom c.age18mon3*1 + c.agec18#c.age18mon3*-6 + c.agec18#c.agec18#c.age18mon3*36 
      * Effect of Age 18 Monitoring at Age 14
      lincom c.age18mon3*1 + c.agec18#c.age18mon3*-4 + c.agec18#c.agec18#c.age18mon3*16 
      * Effect of Age 18 Monitoring at Age 16
      lincom c.age18mon3*1 + c.agec18#c.age18mon3*-2 + c.agec18#c.agec18#c.age18mon3*4 
      * Effect of Age 18 Monitoring at Age 18
      lincom c.age18mon3*1 + c.agec18#c.age18mon3*0  + c.agec18#c.agec18#c.age18mon3*0 
      * Effect of Change in Monitoring at Age 12
      lincom c.change18mon*1 + c.agec18#c.change18mon*-6 + c.agec18#c.agec18#c.change18mon*36 
      * Effect of Change in Monitoring at Age 14
      lincom c.change18mon*1 + c.agec18#c.change18mon*-4 + c.agec18#c.agec18#c.change18mon*16 
      * Effect of Change in Monitoring at Age 16
      lincom c.change18mon*1 + c.agec18#c.change18mon*-2 + c.agec18#c.agec18#c.change18mon*4 
      * Effect of Change in Monitoring at Age 18
      lincom c.change18mon*1 + c.agec18#c.change18mon*0  + c.agec18#c.agec18#c.change18mon*0 
      predict Pred18BPWP, xb, 
corr risky Pred18BPWP 
display as result "Ch 9: Random Linear Age Model for Monitoring" 
display as result "Saving Predicted Random Effects and Residuals as Data" 
mixed monitor c.agec18, ///
              || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      predict monUage monU0, reffects, 
      predict monEres, residuals 
             
* Center random intercept at 3 (have to add fixed effect)
gen monUint = monU0+3.0650-3 
 
display as result "Descriptives for Random Effects and Residuals" 
summarize(monUint monUage monEres) 
 
display as result "Ch 9 Eq 9.6: Predicting Risky Behavior" 
display as result "from Monitoring Random Effects and Residuals" 
mixed risky c.agec18 c.agec18#c.agec18 c.att4 c.agec18#c.att4 ///
            c.monUint c.monUint#c.agec18 c.monUage c.monUage#c.agec18 c.monEres, ///
              || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
      estimates store FitUWPasfixed, 
       
display as result "Ch 9 Eq 9.6: Predicting Risky Behavior" 
display as result "from Monitoring Random Effects and Residuals" 
display as result "Adding Random Effect of WP Monitoring Residual" 
mixed risky c.agec18 c.agec18#c.agec18 c.att4 c.agec18#c.att4 ///
            c.monUint c.monUint#c.agec18 c.monUage c.monUage#c.agec18 c.monEres, ///
              || personid: agec18 monEres, variance mle covariance(unstructured), 
      estat ic, n(200), 
      estimates store FitUWPasrandom, 
      lrtest FitUWPasrandom FitUWPasfixed, force 
 
display as result "Ch 9 Eq 9.6: Predicting Risky Behavior" 
display as result "from Monitoring Random Effects and Residuals" 
display as result "Adding WP Monitoring by Age" 
mixed risky c.agec18 c.agec18#c.agec18 c.att4 c.agec18#c.att4 ///
            c.monUint c.monUint#c.agec18 c.monUage c.monUage#c.agec18 ///
            c.monEres c.agec18#c.monEres, ///
              || personid: agec18, variance mle covariance(unstructured), 
      estat ic, n(200), 
  
****** END CHAPTER 9 MODELS ******
 
* Close log
log close STATA_Chapter9 
* Convert log to html using custom downloaded package
log2html $filesave\STATA_Chapter9_Output, replace