options nocenter nodate; /* SIMPLE-5grps: For Interactions between a continuous IDV & a 5-category Moderator */ /***************** START OF TRIAL-RUN DATA****************** The following commands generate artificial data that can be used for a trial-run of the program. Just run this whole file. */ data testdata1; do cases = 1 to 80; group = 1; idv = 10 * normal (1) ; dv = 10 * normal (1) - 20 ; dv=idv * .55 + dv * sqrt(1 - .55**2); output; end; do cases = 1 to 80; group = 2; idv = 10 * normal (1) ; dv = 10 * normal (1) + 20 ; dv=idv * -.55 + dv * sqrt(1 - -.55**2); output; end; do cases = 1 to 80; group = 3; idv = 10 * normal (1) ; dv = 10 * normal (1) - 5; dv=idv * .10 + dv * sqrt(1 - .10**2); output; end; do cases = 1 to 80; group = 4; idv = 10 * normal (1) ; dv = 10 * normal (1) + 5; dv=idv * -.10 + dv * sqrt(1 - -.10**2); output; end; do cases = 1 to 80; group = 5; idv = 10 * normal (1) ; dv = 10 * normal (1) - 10; dv=idv * -.10 + dv * sqrt(1 - -.10**2); output; end; data testdata2; set testdata1; if group=1 then dum1=0; if group=2 then dum1=1; if group=3 then dum1=0; if group=4 then dum1=0; if group=5 then dum1=0; if group=1 then dum2=0; if group=2 then dum2=0; if group=3 then dum2=1; if group=4 then dum2=0; if group=5 then dum2=0; if group=1 then dum3=0; if group=2 then dum3=0; if group=3 then dum3=0; if group=4 then dum3=1; if group=5 then dum3=0; if group=1 then dum4=0; if group=2 then dum4=0; if group=3 then dum4=0; if group=4 then dum4=0; if group=5 then dum4=1; x1 = idv * dum1; x2 = idv * dum2; x3 = idv * dum3; x4 = idv * dum4; /* moderated regression on the artificial data*/ proc reg data=testdata2; var idv dum1 dum2 dum3 dum4 x1 x2 x3 x4 dv; eq1: model dv = idv dum1 dum2 dum3 dum4; eq2: model dv = idv dum1 dum2 dum3 dum4 x1 x2 x3 x4;run; /***************** END OF TRIAL-RUN DATA ********************/ /* This version of the program reads and processes a raw data file containing the variable scores. (In contrast, the previous version of the program read and processed saved matrix data). For analyses of your own data, it may be easiest to create the following three variables in your data file: idv, group, & dv. e.g., simply set "idv" = name of the independent variable; e.g., simply set "group" = name of the group variable; e.g., simply set "dv" = name of the dependent variable. The values of group variable must be either "1", "2", "3", "4", or "5". No other values are recognized by the program. There must be no missing values. The program automatically computes dummy codes & product terms. The syntax lines below must be run as a group, i.e., run all of the commands between the PROC IML and QUIT commands at once, including the PROC IML and QUIT commands. */ proc iml; /* The next command line reads the data file & creates a data matrix ("datamat"). Enter the name of the dataset on the USE command (e.g., testdata2). Then enter the names of the variables on the READ command inside the curly brackets, after "var". Only three variables names are permitted, and they must appear in the following order: idv, group, dv. If the name of the idv in your dataset is something other than "idv", then enter the correct name in the place of "idv" inside the curly brackets. If the name of the group variable in your dataset is something other than "group", then enter the correct name in the place of "group" inside the curly brackets. The values of group variable must be either "1", "2", "3", "4", or "5". No other values are recognized by the program. If the name of the dv in your dataset is something other than "dv", then enter the correct name in the place of "dv" inside the curly brackets. */ use testdata2; read all var{idv group dv} into datamat; /* The program automatically computes dummy codes and product terms. */ /* The program generates data for plots of simple regression lines; The IDV range was set at 2 SDs below and 2 SDs above the IDV mean; Alternative low and high levels may be specified now -- simply change the value for multiIDV from "2.0" to whatever multiple of the SD you prefer */ multiIDV = 2.0 ; /****************** End of User Specifications ***********************/ show datasets; show contents; /* separating the data for the 5 groups & creating the dummy codes */ datagrp1 = j(1, 2, -9999); datagrp2 = j(1, 2, -9999); datagrp3 = j(1, 2, -9999); datagrp4 = j(1, 2, -9999); datagrp5 = j(1, 2, -9999); dummys = j(nrow(datamat), 4, -9999); do luper = 1 to nrow(datamat); if datamat[luper,2]=1 then do; datagrp1=(datagrp1 // (datamat[luper,1] || datamat[luper,3])); dummys[luper,] = { 0 0 0 0 };end; if datamat[luper,2]=2 then do; datagrp2=(datagrp2 // (datamat[luper,1] || datamat[luper,3])); dummys[luper,] = { 1 0 0 0 };end; if datamat[luper,2]=3 then do; datagrp3=(datagrp3 // (datamat[luper,1] || datamat[luper,3])); dummys[luper,] = { 0 1 0 0 };end; if datamat[luper,2]=4 then do; datagrp4=(datagrp4 // (datamat[luper,1] || datamat[luper,3])); dummys[luper,] = { 0 0 1 0 };end; if datamat[luper,2]=5 then do; datagrp5=(datagrp5 // (datamat[luper,1] || datamat[luper,3])); dummys[luper,] = { 0 0 0 1 };end; end; datagrp1 = datagrp1[2:nrow(datagrp1),]; datagrp2 = datagrp2[2:nrow(datagrp2),]; datagrp3 = datagrp3[2:nrow(datagrp3),]; datagrp4 = datagrp4[2:nrow(datagrp4),]; datagrp5 = datagrp5[2:nrow(datagrp5),]; /* error message for illegal group values */ if min(dummys) = -9999 then print, "There is an illegal value for the group variable."; /* creating the data matrix with dummy codes & product terms */ datam=(datamat[,1] || dummys || (datamat[,1]#dummys) || datamat[,3]); /* n, mean, sd, & correlation matrix (Bernstein, p. 77-79) */ n = nrow(datam); rawsp = t(datam) * datam; rsums = t(datam[+,]); mn = t(rsums) / n; corsp = rawsp - (1/n) * (rsums) * t(rsums); vcv = corsp * (1/(n-1)); sd = t(sqrt(vecdiag(vcv))); d = inv(diag(sd)); r = d * vcv * d; /* n, mean, sscp, & sd for Group 1 */ n1 = nrow(datagrp1); rawsp = t(datagrp1) * datagrp1; rsums = t(datagrp1[+,]); mn1 = rsums[1,1] / n1; sscp1 = rawsp - (1/n1) * (rsums) * t(rsums); vcv = sscp1 * (1/(n1-1)); sd1 = t(sqrt(vecdiag(vcv))); /* n, mean, sscp, & sd for Group 2 */ n2 = nrow(datagrp2); rawsp = t(datagrp2) * datagrp2; rsums = t(datagrp2[+,]); mn2 = rsums[1,1] / n2; sscp2 = rawsp - (1/n2) * (rsums) * t(rsums); vcv = sscp2 * (1/(n2-1)); sd2 = t(sqrt(vecdiag(vcv))); /* n, mean, sscp, & sd for Group 3 */ n3 = nrow(datagrp3); rawsp = t(datagrp3) * datagrp3; rsums = t(datagrp3[+,]); mn3 = rsums[1,1] / n3; sscp3 = rawsp - (1/n3) * (rsums) * t(rsums); vcv = sscp3 * (1/(n3-1)); sd3 = t(sqrt(vecdiag(vcv))); /* n, mean, sscp, & sd for Group 4 */ n4 = nrow(datagrp4); rawsp = t(datagrp4) * datagrp4; rsums = t(datagrp4[+,]); mn4 = rsums[1,1] / n4; sscp4 = rawsp - (1/n4) * (rsums) * t(rsums); vcv = sscp4 * (1/(n4-1)); sd4 = t(sqrt(vecdiag(vcv))); /* n, mean, sscp, & sd for Group 5 */ n5 = nrow(datagrp5); rawsp = t(datagrp5) * datagrp5; rsums = t(datagrp5[+,]); mn5 = rsums[1,1] / n5; sscp5 = rawsp - (1/n5) * (rsums) * t(rsums); vcv = sscp5 * (1/(n5-1)); sd5 = t(sqrt(vecdiag(vcv))); /* Overall regression coeffs */ beta = inv(r[1:9,1:9]) * r[1:9,10] ; b = (sd[1,10] / sd[1,1:9]) # t(beta) ; a = mn[1,10] - ( sum ( mn[1,1:9] # b ) ) ; r2 = t(beta) * r[1:9,10] ; r2main = t(inv(r[1:5,1:5])*r[1:5,10])*r[1:5,10]; r2chXn = r2 - r2main; fsquared = (r2 - r2main) / (1 - r2) ; F = ((r2-r2main)/4) / ((1-r2)/(n-9-1)); dferror = n - 9 - 1; pF = 1 - probf(F, 4, dferror); interact = (r2chXn || F || {4} || dferror || fsquared || pF) ; c = { "Rsq. ch." "F" "df num." "df denom." "fsquared" "Sig. F"}; print, "Coefficients for the Interaction" , interact[colname=c format=12.3]; betas = (t(b) || beta); rr = { "idv" "dum1" "dum2" "dum3" "dum4" "x1" "x2" "x3" "x4"}; c = { "raw b" "std.beta" }; print , "Beta weights for the full equation:" , betas[colname=c rowname=rr format=12.3]; print , "The intercept is:" a[format=12.3]; /* simple slope info */ dum1 = { 0 , 1 , 0 , 0, 0 }; dum2 = { 0 , 0 , 1 , 0, 0 }; dum3 = { 0 , 0 , 0 , 1, 0 }; dum4 = { 0 , 0 , 0 , 0, 1 }; slopes=( b[1,1] // (b[1,1]+b[1,6]) // (b[1,1]+b[1,7]) // (b[1,1]+b[1,8]) // (b[1,1]+b[1,9])); aslopes=( a // (b[1,2]+a) // (b[1,3]+a) // (b[1,4]+a) // (b[1,5]+a)); mse = (n/(n-9))*(sd[1,10]**2)*(1-r2); d=diag( sd[1,1:9] ); Sb = mse * inv((d*r[1:9,1:9]*d)*(n-1)) ; seslopes= ( (sqrt({1 0 0 0 0 0 0 0 0}*Sb*t({1 0 0 0 0 0 0 0 0}))) // (sqrt({1 0 0 0 0 1 0 0 0}*Sb*t({1 0 0 0 0 1 0 0 0}))) // (sqrt({1 0 0 0 0 0 1 0 0}*Sb*t({1 0 0 0 0 0 1 0 0}))) // (sqrt({1 0 0 0 0 0 0 1 0}*Sb*t({1 0 0 0 0 0 0 1 0}))) // (sqrt({1 0 0 0 0 0 0 0 1}*Sb*t({1 0 0 0 0 0 0 0 1}))) ); tslopes = slopes / SEslopes ; df = ( (n-9-1) // (n-9-1) // (n-9-1) // (n-9-1) // (n-9-1) ); zslopes =slopes # (sd1[1,1]/sd1[1,2]//sd2[1,1]/sd2[1,2]// sd3[1,1]/sd3[1,2]//sd4[1,1]/sd4[1,2]// sd5[1,1]/sd5[1,2]); zSE = SEslopes # (sd1[1,1]/sd1[1,2]//sd2[1,1]/sd2[1,2]// sd3[1,1]/sd3[1,2]//sd4[1,1]/sd4[1,2]// sd5[1,1]/sd5[1,2]); dfs = n-9-1 ; pslopes = (1 - probt(abs(tslopes),dfs)) * 2; /* df & t values--from Darlington p 516 & Howell 87 p 586--p=05 two-tailed */ dft={1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 24 26 28 30 32 34 36 38 40 43 46 49 52 56 60 65 70 75 80 85 90 95 100 110 120 130 150 175 200 250 300 400 500 600 700 800 900 1000 1000000000, 12.706 4.303 3.182 2.776 2.571 2.447 2.365 2.306 2.262 2.228 2.201 2.179 2.160 2.145 2.131 2.120 2.110 2.101 2.093 2.086 2.074 2.064 2.056 2.048 2.042 2.037 2.032 2.028 2.024 2.021 2.017 2.013 2.010 2.007 2.003 2.000 1.997 1.994 1.992 1.990 1.988 1.987 1.985 1.984 1.982 1.980 1.978 1.976 1.974 1.972 1.969 1.968 1.966 1.965 1.964 1.963 1.963 1.963 1.962 1.962 }; tabledT = 0; do q = 1 to 59 ; if dfs >= dft[1,q] & dfs < dft[1,q+1] then tabledT = dft[2,q]; end; confidLo = (zslopes - (tabledT # zSE)) ; confidHi = (zslopes + (tabledT # zSE)) ; simple = ( aslopes || slopes || tslopes || df || pslopes) ; rr = { "Group 1" "Group 2" "Group 3" "Group 4" "Group 5"}; c = { "a" "raw b" "t-test" "df" "Sig. T"}; print ,, "Simple Slope Coefficients for the DV on the IDV for Individual Groups:" , simple[colname=c rowname=rr format=12.3]; stand = ( zslopes || zSE || confidLO || confidHI ) ; rr = { "Group 1" "Group 2" "Group 3" "Group 4" "Group 5"}; c = { "std.beta" "SE" "95% Low" "95% Hi"}; print , "Standardized Simple Slopes & 95% Confidence Intervals: " , stand[colname=c rowname=rr format=12.3]; intersct = ((aslopes[1,1]-aslopes[2,1]) / (slopes[2,1] - slopes[1,1])); print,, "The simple regression lines for Group 1 & Group 2 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[1,1]-aslopes[3,1]) / (slopes[3,1] - slopes[1,1])); print "The simple regression lines for Group 1 & Group 3 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[1,1]-aslopes[4,1]) / (slopes[4,1] - slopes[1,1])); print "The simple regression lines for Group 1 & Group 4 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[1,1]-aslopes[5,1]) / (slopes[5,1] - slopes[1,1])); print "The simple regression lines for Group 1 & Group 5 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[2,1]-aslopes[3,1]) / (slopes[3,1] - slopes[2,1])); print "The simple regression lines for Group 2 & Group 3 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[2,1]-aslopes[4,1]) / (slopes[4,1] - slopes[2,1])); print "The simple regression lines for Group 2 & Group 4 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[2,1]-aslopes[5,1]) / (slopes[5,1] - slopes[2,1])); print "The simple regression lines for Group 2 & Group 5 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[3,1]-aslopes[4,1]) / (slopes[4,1] - slopes[3,1])); print "The simple regression lines for Group 3 & Group 4 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[3,1]-aslopes[5,1]) / (slopes[5,1] - slopes[3,1])); print "The simple regression lines for Group 3 & Group 5 intersect at IDV =" intersct[format=12.3]; intersct = ((aslopes[4,1]-aslopes[5,1]) / (slopes[5,1] - slopes[4,1])); print "The simple regression lines for Group 4 & Group 5 intersect at IDV =" intersct[format=12.3]; /* Simultaneous Regions of Significance */ /* ss for ssresids */ ssreg1 = ((sscp1[1,2]**2)/sscp1[1,1]) ; ssreg2 = ((sscp2[1,2]**2)/sscp2[1,1]) ; ssreg3 = ((sscp3[1,2]**2)/sscp3[1,1]) ; ssreg4 = ((sscp4[1,2]**2)/sscp4[1,1]) ; ssreg5 = ((sscp5[1,2]**2)/sscp5[1,1]) ; Xhi = { -9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999 }; Xlo = { -9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999, -9999 }; N = n1 + n2 + n3 + n4 + n5; /* df & Bonferroni F; Huitema, 1980, pp. 293 & 387-388; comparisons = 10 */ df = N - 10; dfF={3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 24 26 28 30 40 60 120 500 1000, 49.80 26.28 18.31 14.54 12.31 11.04 10.11 9.43 8.91 8.51 8.19 7.92 7.70 7.51 7.35 7.21 7.09 6.99 6.81 6.66 6.54 6.44 6.35 6.07 5.80 5.54 5.36 5.33 }; do a = 1 to 27 ; if (df >= dff[1,a] & df < dff[1,a+1]) then tf = dff[2,a] ; end; /* comparing groups 1 & 2 */ ssresd =(sscp1[2,2]-ssreg1) + (sscp2[2,2]-ssreg2) ; aa = aslopes[1,1] - aslopes[2,1]; bb = slopes[1,1] - slopes[2,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg1)+(1/ssreg2)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn1/ssreg1)+(mn2/ssreg2))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n1*n2))+ ((mn1**2)/ssreg1)+((mn2**2)/ssreg2) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[1,1] = hi; if lo < hi then Xlo[1,1] = lo; end; /* comparing groups 1 & 3 */ ssresd =(sscp1[2,2]-ssreg1) + (sscp3[2,2]-ssreg3) ; aa = aslopes[1,1] - aslopes[3,1]; bb = slopes[1,1] - slopes[3,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg1)+(1/ssreg3)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn1/ssreg1)+(mn3/ssreg3))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n1*n3))+ ((mn1**2)/ssreg1)+((mn3**2)/ssreg3) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[2,1] = hi; if lo < hi then Xlo[2,1] = lo; end; /* comparing groups 1 & 4 */ ssresd =(sscp1[2,2]-ssreg1) + (sscp4[2,2]-ssreg4) ; aa = aslopes[1,1] - aslopes[4,1]; bb = slopes[1,1] - slopes[4,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg1)+(1/ssreg4)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn1/ssreg1)+(mn4/ssreg4))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n1*n4))+ ((mn1**2)/ssreg1)+((mn4**2)/ssreg4) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[3,1] = hi; if lo < hi then Xlo[3,1] = lo; end; /* comparing groups 1 & 5 */ ssresd =(sscp1[2,2]-ssreg1) + (sscp5[2,2]-ssreg5) ; aa = aslopes[1,1] - aslopes[5,1]; bb = slopes[1,1] - slopes[5,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg1)+(1/ssreg5)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn1/ssreg1)+(mn5/ssreg5))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n1*n5))+ ((mn1**2)/ssreg1)+((mn5**2)/ssreg5) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[4,1] = hi; if lo < hi then Xlo[4,1] = lo; end; /* comparing groups 2 & 3 */ ssresd =(sscp2[2,2]-ssreg2) + (sscp3[2,2]-ssreg3) ; aa = aslopes[2,1] - aslopes[3,1]; bb = slopes[2,1] - slopes[3,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg2)+(1/ssreg3)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn2/ssreg2)+(mn3/ssreg3))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n2*n3))+ ((mn2**2)/ssreg2)+((mn3**2)/ssreg3) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[5,1] = hi; if lo < hi then Xlo[5,1] = lo; end; /* comparing groups 2 & 4 */ ssresd =(sscp2[2,2]-ssreg2) + (sscp4[2,2]-ssreg4) ; aa = aslopes[2,1] - aslopes[4,1]; bb = slopes[2,1] - slopes[4,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg2)+(1/ssreg4)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn2/ssreg2)+(mn4/ssreg4))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n2*n4))+ ((mn2**2)/ssreg2)+((mn4**2)/ssreg4) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[6,1] = hi; if lo < hi then Xlo[6,1] = lo; end; /* comparing groups 2 & 5 */ ssresd =(sscp2[2,2]-ssreg2) + (sscp5[2,2]-ssreg5) ; aa = aslopes[2,1] - aslopes[5,1]; bb = slopes[2,1] - slopes[5,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg2)+(1/ssreg5)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn2/ssreg2)+(mn5/ssreg5))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n2*n5))+ ((mn2**2)/ssreg2)+((mn5**2)/ssreg5) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[7,1] = hi; if lo < hi then Xlo[7,1] = lo; end; /* comparing groups 3 & 4 */ ssresd =(sscp3[2,2]-ssreg3) + (sscp4[2,2]-ssreg4) ; aa = aslopes[3,1] - aslopes[4,1]; bb = slopes[3,1] - slopes[4,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg3)+(1/ssreg4)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn3/ssreg3)+(mn4/ssreg4))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n3*n4))+ ((mn3**2)/ssreg3)+((mn4**2)/ssreg4) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[8,1] = hi; if lo < hi then Xlo[8,1] = lo; end; /* comparing groups 3 & 5 */ ssresd =(sscp3[2,2]-ssreg3) + (sscp5[2,2]-ssreg5) ; aa = aslopes[3,1] - aslopes[5,1]; bb = slopes[3,1] - slopes[5,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg3)+(1/ssreg5)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn3/ssreg3)+(mn5/ssreg5))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n3*n5))+ ((mn3**2)/ssreg3)+((mn5**2)/ssreg5) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[9,1] = hi; if lo < hi then Xlo[9,1] = lo; end; /* comparing groups 4 & 5 */ ssresd =(sscp4[2,2]-ssreg4) + (sscp5[2,2]-ssreg5) ; aa = aslopes[4,1] - aslopes[5,1]; bb = slopes[4,1] - slopes[5,1]; A=((2*tf*-1)/(N-4)) * ssresd * ((1/ssreg4)+(1/ssreg5)) + (bb**2); B=(2*tf/(N-4))*ssresd*((mn4/ssreg4)+(mn5/ssreg5))+(aa*bb); C=((2*tf*-1)/(N-4)) * ssresd * ( (N/(n4*n5))+ ((mn4**2)/ssreg4)+((mn5**2)/ssreg5) ) + (aa**2); if ((B**2 - A*C) > 0) then do; hi = (-B + (sqrt(B**2 - A*C)) ) / A; lo = (-B - (sqrt(B**2 - A*C)) ) / A; if hi > lo then Xhi[10,1] = hi; if lo < hi then Xlo[10,1] = lo; end; print ,,, "Simultaneous Regions of Significance -- Johnson-Neyman Technique:"; print , "Using Bonferroni F, p = .05, 2-tailed; see Huitema, 1980, p. 293."; print "The regression lines for each group are significantly different at"; jn = (xlo || xhi); c = { "Lo Value" "Hi Value"}; rr = { "Grps 1&2" "Grps 1&3" "Grps 1&4" "Grps 1&5" "Grps 2&3" "Grps 2&4" "Grps 2&5" "Grps 3&4" "Grps 3&5" "Grps 4&5"}; print "IDV scores < Lo Value & > Hi Value:" , jn[colname=c rowname=rr format=12.3]; print "-9999 indicates that meaningful values could not be computed."; /* data for plot */ idvlo1 = mn1[1,1] - (sd1[1,1] * multiIDV); idvhi1 = mn1[1,1] + (sd1[1,1] * multiIDV); idvlo2 = mn2[1,1] - (sd2[1,1] * multiIDV); idvhi2 = mn2[1,1] + (sd2[1,1] * multiIDV); idvlo3 = mn3[1,1] - (sd3[1,1] * multiIDV); idvhi3 = mn3[1,1] + (sd3[1,1] * multiIDV); idvlo4 = mn4[1,1] - (sd4[1,1] * multiIDV); idvhi4 = mn4[1,1] + (sd4[1,1] * multiIDV); idvlo5 = mn5[1,1] - (sd5[1,1] * multiIDV); idvhi5 = mn5[1,1] + (sd5[1,1] * multiIDV); idv = (idvlo1// idvhi1// idvlo2// idvhi2// idvlo3// idvhi3// idvlo4// idvhi4// idvlo5// idvhi5) ; dv=((slopes[1,1]//slopes[1,1]//slopes[2,1]//slopes[2,1]// slopes[3,1]//slopes[3,1]//slopes[4,1]//slopes[4,1]// slopes[5,1]//slopes[5,1])# idv) +(aslopes[1,1]//aslopes[1,1]//aslopes[2,1]//aslopes[2,1]// aslopes[3,1]//aslopes[3,1]//aslopes[4,1]//aslopes[4,1]// aslopes[5,1]//aslopes[5,1]); group = { 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 }; data = ( group || idv || dv ); c = { "Group" "IDV" "DV" }; print ,,, "Data for simple slope plots:" , data[colname=c format=12.3]; create plotdata from data[colname={"Group" "idv" "dv"}] ; append from data; quit; proc plot data=plotdata vpct=100 hpct=100 nolegend; title 'Plot for 5 Groups: 1=group1 2=group2 3=group3 4=group4 5=group5'; plot dv*idv=group;run;