* 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