The data set used in this chapter is popular.
Table 2.1 on page 17.
Part 1: Intercept only.
data pop; set popular; run; proc mixed data = pop ; model popular = /solution; random intercept / subject = school type = un; run;
The Mixed Procedure Model Information Data Set WORK.POP Dependent Variable POPULAR Covariance Structure Unstructured Subject Effect SCHOOL Estimation Method REML Residual Variance Method Profile Fixed Effects SE Method Model-Based Degrees of Freedom Method Containment Dimensions Covariance Parameters 2 Columns in X 1 Columns in Z Per Subject 1 Subjects 100 Max Obs Per Subject 26 Observations Used 2000 Observations Not Used 0 Total Observations 2000 Covariance Parameter Estimates Cov Parm Subject Estimate UN(1,1) SCHOOL 0.8798 Residual 0.6387 Fit Statistics -2 Res Log Likelihood 5115.6 AIC (smaller is better) 5119.6 AICC (smaller is better) 5119.6 BIC (smaller is better) 5124.8 Null Model Likelihood Ratio Test DF Chi-Square Pr > ChiSq 1 1379.30 <.0001 Solution for Fixed Effects Standard Effect Estimate Error DF t Value Pr > |t| Intercept 5.3076 0.09550 99 55.58 <.0001
Part 2: The variable sex is included as a random effect and teacher experience (texp) as fixed effect (M1).
proc mixed data = pop; model popular = sex texp /solution; random intercept sex /subject = school type=un ; run;
The Mixed Procedure Covariance Parameter Estimates Cov Parm Subject Estimate UN(1,1) SCHOOL 0.4116 UN(2,1) SCHOOL 0.02089 UN(2,2) SCHOOL 0.2733 Residual 0.3925 Fit Statistics -2 Res Log Likelihood 4275.9 AIC (smaller is better) 4283.9 Fit Statistics AICC (smaller is better) 4283.9 BIC (smaller is better) 4294.3 Null Model Likelihood Ratio Test DF Chi-Square Pr > ChiSq 3 1279.56 <.0001 Solution for Fixed Effects Standard Effect Estimate Error DF t Value Pr > |t| Intercept 3.3400 0.1608 98 20.77 <.0001 SEX 0.8431 0.05969 99 14.13 <.0001 TEXP 0.1084 0.01022 1800 10.61 <.0001 Type 3 Tests of Fixed Effects Num Den Effect DF DF F Value Pr > F SEX 1 99 199.54 <.0001 TEXP 1 1800 112.51 <.0001
Table 2.2. on page 20.
Part 1: M1, as shown above.
Part 2: Cross-level interaction with teacher experience (M2). We first created a variable genxexp an interaction term of sex and terp. The variable genxexp is included as a fixed effect.
data pop1; set pop; genxexp = sex*texp; run; proc mixed data = pop1 ; model popular = sex texp genxexp/solution; random intercept sex /subject = school type=un ; run;
The Mixed Procedure Covariance Parameter Estimates Cov Parm Subject Estimate UN(1,1) SCHOOL 0.4120 UN(2,1) SCHOOL 0.02343 UN(2,2) SCHOOL 0.2264 Residual 0.3924 Fit Statistics -2 Res Log Likelihood 4268.4 AIC (smaller is better) 4276.4 AICC (smaller is better) 4276.5 BIC (smaller is better) 4286.9 Null Model Likelihood Ratio Test DF Chi-Square Pr > ChiSq 3 1274.81 <.0001 Solution for Fixed Effects Standard Effect Estimate Error DF t Value Pr > |t| Intercept 3.3135 0.1610 98 20.58 <.0001 SEX 1.3296 0.1330 98 9.99 <.0001 TEXP 0.1102 0.01023 1800 10.77 <.0001 genxexp -0.03403 0.008457 1800 -4.02 <.0001 Type 3 Tests of Fixed Effects Num Den Effect DF DF F Value Pr > F SEX 1 98 99.86 <.0001 TEXP 1 1800 116.07 <.0001 genxexp 1 1800 16.20 <.0001
Table 2.3 on page 21.
Part 1: M1 from Table 2.2.
Part 2: Standardized variables. We first standardized all the variables
proc stdize data = pop out=pops; var popular sex texp; run; proc mixed data = pops; model popular = sex texp / solution ; random intercept sex /subject = school type=un ; run;
Covariance Parameter Estimates Cov Parm Subject Estimate UN(1,1) SCHOOL 0.3305 UN(2,1) SCHOOL 0.05122 UN(2,2) SCHOOL 0.04545 Residual 0.2612 Fit Statistics -2 Res Log Likelihood 3460.0 AIC (smaller is better) 3468.0 Fit Statistics AICC (smaller is better) 3468.0 BIC (smaller is better) 3478.4 Null Model Likelihood Ratio Test DF Chi-Square Pr > ChiSq 3 1279.56 <.0001 Solution for Fixed Effects Standard Effect Estimate Error DF t Value Pr > |t| Intercept -0.00978 0.05867 98 -0.17 0.8680 SEX 0.3439 0.02434 99 14.13 <.0001 TEXP 0.5791 0.05459 1800 10.61 <.0001 Type 3 Tests of Fixed Effects Num Den Effect DF DF F Value Pr > F SEX 1 99 199.54 <.0001 TEXP 1 1800 112.51 <.0001
Figure 2.1 on page 23. Return back to model M1. The outp option requests the predicted values, residuals and other statistics to be saved in a temporary file called test.
proc mixed data = pop; model popular = sex texp /solution outp=test; random intercept sex / subject = school type = un; run; proc stdize data= test out=fig2; var resid; run; proc univariate data = fig2 noprint; var resid; qqplot /href = 0 vref = 0 ; run;
Figure 2.2 Level 1 standardized residuals plotted against predicted popularity using the fixed part of the model.
data pred; set test; eqpred = 3.3400 + 0.8431* sex + .1084*texp; run; proc stdize data = pred out = pred1; var resid; run; axis1 order = (-3.7, -2.8, -1.9, -.9, 0, .9, 1.9, 2.8, 3.7) label = (a=90 "std(const)"); axis2 order = (3.5 to 7.1 by .9) label = ("pred.val.") minor = none; symbol value = star color = blue; proc gplot data = pred1; plot resid*eqpred /vref=0 vaxs = axis1 haxis = axis2; run; quit;
Figure 2.3 Level 2 residuals plotted against predicted popularity. We need to use the ods output statement to output the level 2 residuals. The output data file pop2 contains both the residuals for the intercept and variable sex. The data step after proc mixed separates them apart. Then we need to get the average prediction at level 2 and this is done using proc sql. Then we are ready to plot them one at a time. The final step is to put these two plots together and this is done using proc greplay.
goptions nodisplay; proc greplay igout=mycat tc=tempcat nofs; delete _all_; run; proc mixed data = pop; model popular = sex texp /solution ; random intercept sex /solution subject = school type = un; ods output SolutionR = pop2; run; data int sex; set pop2; school = subject + 0; keep school estimate stderrpred; if effect = "Intercept" then output int; if effect = "SEX" then output sex; run; data pintall; merge pred int; by school; run; proc sql; create table pall1 as select distinct mean(eqpred) as p, estimate as int from pintall group by school; quit; symbol v = star w = 3 c=blue; axis1 order = (-1.6 to 1.6 by .4) minor =none label=(a=90 "(const)"); axis2 order = (3.8 to 7 by .8) minor = none label=("pred. val." ); proc gplot data = pall1 gout=mycat ; format int p 4.1 ; plot int*p = 1 /vref=0 vaxis=axis1 haxis=axis2; run; quit; data psex; merge pred sex; by school; run; proc sql; create table psex2 as select distinct mean(eqpred) as p, estimate as sex from psex group by school; quit; symbol v = star w = 3 c=blue; axis1 order = (-1.2 to 1.2 by .3) label=(a = 90 "(sex)"); axis2 order = (3.8 to 7 by .8) minor = none label=("pred. val."); proc gplot data = psex2 gout=mycat ; format sex p 4.1 ; plot sex*p = 1 /vref=0 vaxis=axis1 haxis=axis2; run; quit; goptions display; proc greplay nofs igout=mycat tc=sashelp.templt template=v2; treplay 1:gplot 2:gplot1 ; run; quit;
Figure 2.4 Error bar plot of level 2 residuals.
goptions nodisplay; proc greplay igout=mycat2 tc=tempcat nofs; delete _all_; run; proc sort data =int; by estimate; run; data popint1; set int; id = _n_; est= estimate; id = id; output; est = estimate + 1.39*stderrpred; id = id; output; est = estimate - 1.39*stderrpred; id = id; output; run; symbol i=hiloT; axis1 order =(-1.6, -1, -.5, 0, .5, 1, 1.6, 2.1) label=(a=90 "const") minor=none; axis2 order = (1 to 101 by 25) label = ("Rank") minor=none; proc gplot data = popint1 gout=mycat2; format est 4.1; plot ( est )*id /overlay vref=0 vaxis=axis1 haxis=axis2; run; quit; proc sort data = sex; by estimate; run; data popsex1; set sex; id = _n_; est = estimate; id = id; output; est = estimate + 1.39*stderrpred; id = id; output; est = estimate - 1.39*stderrpred; id = id; output; run; symbol i=hiloT; axis1 order =(-1.6, -1, -.5, 0, .5, 1, 1.6, 2.1) label=(a=90 "const") minor=none; axis2 order = (1 to 101 by 25) label = ("Rank") minor=none; proc gplot data = popsex1 gout = mycat2; format est 4.1; plot ( est )*id /overlay vref=0 vaxis=axis1 haxis=axis2; run; quit; goptions display; proc greplay nofs igout=mycat2 tc=sashelp.templt template=v2; treplay 1:gplot 2:gplot1 ; run; quit;
Figure 2.6. The predicted values from outp = test statement is from the random effect model. We can take away the fixed effect of variable texp.
data test1; set test; p = pred - .1084*texp; run; proc sort data = test1; by school; run; axis1 order =(1.8 to 6.6 by 1.2 ) minor=none label=(a=90 "Predicted Popularity"); axis2 order = (0 to 1 by 1) minor = none label =("Pupil Sex"); symbol i = join r=100 c = black; proc gplot data = test1; plot p*sex=school /overlay nolegend haxis=axis2 vaxis=axis1; run; quit;