Appendix a SAS Macro INTERVAR

Total Page:16

File Type:pdf, Size:1020Kb

Appendix a SAS Macro INTERVAR

Appendix A SAS Macro INTERVAR.SAS for estimation interlaboratory variance estimators and Mandel’s plots

/* INTERLABORATORY VARIANCE ESTIMATORS */ /*------*/ /* Name: Intervar.sas */ /* Title: Estimated varinace components */ /* Author: Dirk Seidel, [email protected] */ /* Reference: ISO 5725-2:1994 Accuracy (trueness and precision */ /* of measurement methods and results Part 2: */ /* Basisc method for the determination of */ /* repeatability and reproducibility of standard */ /* measurement method */ /* Release: Version 1.0 */ /*------*/ /* Inputs: */ /* */ /* data = SAS-Dataset */ /* var_ = observation */ /* class_ = Variable for a SAS-Class-Statement, e.g. Center*/ /* by_ = Variable for a SAS by-Statement, e.g. Dose */ /*------*/ /* Outputs */ /* s_2_rep = repeatability variance */ /* s_2_inter = inter-laboratory variance */ /* s_2_reprod = reproduciblity varinace */ /* inter_class = interclass coefficient */ /*------*/

%macro Interlab_variance_estimator(data=_LAST_, var_=, class_=, by_=); %if %length(%quote(&by_))=0 %then %let tby_=level; %else %let tby_=&by_; data testdat; set &data; level=1; run; proc sort data=testdat out=sortdat1; by &tby_ &class_; run; proc means data=sortdat1 mean N var noprint; by &tby_ &class_; var &var_; output out=out1 sum=X_i n=n_i var=v_i; run; data out1; set out1; if n_i=0 then delete; if n_i=. then delete; index=1; output; proc means data=out1 sum noprint; by &tby_; var n_i index X_i; output out=out2 sum=N_g L_g X_g; run; data out3; merge out1 out2; by &tby_; x_i_m=X_i/n_i; x_g_m=X_g/N_g; temp2=n_i-n_i*n_i/n_g; temp3=(n_i-1)*v_i; temp7=(x_i_m-X_g_m); temp8=temp7**2; temp1=n_i*temp8; run; proc means data=out3 sum noprint; by &tby_; var temp1 temp2 temp3 ; output out=out4 sum=temp4 temp5 temp6; run; data out5; merge out4 out2; by &tby_; s_2_rep = temp6/(N_g-L_g); s_2 = temp4/(L_g-1); s_2_inter = max(0,(s_2-s_2_rep)/temp5); s_2_reprod = s_2_inter+s_2_rep; inter_class = s_2_inter/(s_2_inter+s_2_rep); output; run; proc print data=out5; var &by_ s_2_rep s_2_inter s_2_reprod inter_class; run; proc means data=out3 sum noprint; by &tby_; var temp8 v_i; output out=out6 sum=temp9 temp10; run; data out7; merge out3 out6; by &tby_; h_i=temp7*sqrt(L_g-1)/sqrt(temp9); k_i=sqrt(v_i*L_g)/sqrt(temp10); cv_i=sqrt(v_i)/x_i_m*100; output; run; /* Variationscoeffizient in percent */ proc gchart data=out7; vbar &tby_ /frame sumvar=cv_i group=&class_ discrete; title "Coefficient of variation in percent"; run; quit;

/* Mandels between-laboratory consistency statistic h */ proc gchart data=out7; vbar &tby_ /frame sumvar=h_i group=&class_ discrete; title "Mandels between-laboratory consistency statistic h"; run; quit; /* Mandels within-laboratory consistency statistic k */ proc gchart data=out7; vbar &tby_ /frame sumvar=k_i group=&class_ discrete; title "Mandels within-laboratory consistency statistic k"; run; quit; /*proc print data=out7; var &tby_ &class_ n_i x_i_m X_g_m h_i v_i k_i; run; */ title; %mend; data interact; input dose cent weig; cards; 1 1 10.2 1 1 8.8

/* include the complete data from Appendix B */

4 8 9.36 4 8 9.86 4 8 8.75 ;

%Interlab_variance_estimator(data=interact, var_=weig, class_=cent ,by_=dose); run; Appendix B: The SAS program INTERCONT.SAS for all tetrad and many-to-one bootstrap interaction contrasts using the in-vivo liver weight data example.

/* INTERLABORATORY INTERACTION CONTRAST PROGRAM INCL. MACROS */ /*------*/ /* Name: Intercont.sas */ /* Title: Simultaneous Confidence Intervals for tetrad and */ /* many-to-one intercation contrasts for interlab */ /* studies with control vs. doses/treatment designs */ /* Author: Ludwig A. Hothorn, [email protected] */ /* Macros: SimIntervals MakeGLMStats Contrasts by R.Tobias */ /* Reference: Hothorn (2002) Statistics of interlaboratory */ /* in-vitro toxicological studies, ATLA xxx */ /* Release: Version 1.0, August 2001 */ /*------*/

/*------*/ /* The %SimIntervals Macro */ /* This macro computes simultaneous confidence intervals for a */ /* general collection of linear functions of parameters, */ /* using Edwards and Berry (1987) */ /* Name: SimIntervals */ /* Title: Simultaneous Confidence Intervals for General */ /* Linear Functions */ /* Author: Randy Tobias, [email protected], */ /* Reference: Edwards and Berry (1987). The efficiency of */ /* simulation-based multiple comparisons. */ /* Biometrics 43, 913-928. */ /* Release: Version 7.01 */ /*------*/ /* Inputs: */ /* NSAMP = simulation size, with 20000 as default */ /* SEED = random number seed, with 0 (clock time) */ /* as default */ /* CONF = desired confidence level, with 0.95 as default */ /* SIDE = U, L or B, for upper-tailed, lower-tailed */ /* or two-tailed, respectively. SIDE=B is default. */ /* Additionally, %SimIntervals requires two further macros to */ /* be defined that use SAS/IML to construct the estimates and */ /* the contrasts of interest. In particular, make sure the */ /* following two macros are defined before invoking */ /* %SimIntervals: */ /* %Estimate: Uses SAS/IML code to define */ /* EstPar - (column) vector of estimated parameters */ /* Cov - covariance matrix for the for the estimates */ /* df - error degrees of freedom; set to 0 for */ /* asymptotic analysis */ /* %Contrasts: Uses SAS/IML code to define */ /* C - matrix whose columns define the contrasts of */ /* interest between the parameters */ /* CLab - (column) character vector whose elements */ /* label the respective contrasts in C */ /* */ /* You can either define these macros directly, or use the */ /* %MakeGLMStats macro to define them. */ /*------*/ /* Output: */ /* The output is a dataset with one observation for each */ /* contrast and the following variables: */ /* Contrast - contrast label */ /* Estimate - contrast estimated value */ /* StdErr - standard error of estimate */ /* tValue - normalized estimate, Estimate/StdErr */ /* RawP - non-multiplicity-adjusted p-value */ /* OneP - one-step multiplicity-adjusted p-value */ /* LowerCL - multiplicity-adjusted lower confidence limit */ /* UpperCL - multiplicity-adjusted upper confidence limit */ /*------*/

%macro SimIntervals(nsamp = 20000, seed = 0, conf = 0.90, side = B, options = ); %global ANORM quant; options nonotes; proc iml; %Estimates; if (df <= 0) then call symput('ANORM','1'); else call symput('ANORM','0'); %Contrasts;

Cov = C`*Cov*C; D = diag(1/sqrt(vecdiag(Cov))); R = D*Cov*D;

evec = eigvec(R); eval = eigval(R) <> 0; U = (diag(sqrt(eval))*evec`)`; dimU = sum(eval > 1e-8);

U = U[,1:dimU];

ests = C`*EstPar; ses = sqrt(vecdiag(Cov)); tvals = ests/ses; %if (&side = B) %then %do; if df>0 then rawp = 2*(1-probt(abs(tvals),df)); else rawp = 2*(1-probnorm(abs(tvals))); %end; %else %if (&side = L) %then %do; if df>0 then rawp = probt( tvals ,df) ; else rawp = probnorm( tvals); %end; %else %do; if df>0 then rawp = 1-probt( tvals ,df) ; else rawp = 1-probnorm(tvals); %end;

adjp = j(ncol(C),1,0); maxt=j(&nsamp,1,0); do isim = 1 to &nsamp; Z = U*rannor(j(dimU,1,&seed)); if df>0 then do; V = cinv(ranuni(&seed),df); tvalstar = Z / sqrt(V/df); end; else do; tvalstar = Z; end; %if (&side = B) %then %do; mx = max(abs(tvalstar)); %end; %else %do; mx = max( tvalstar ); %end; maxt[isim] = mx; %if (&side = B) %then %do; adjp = adjp + (mx>abs(tvals)); %end; %else %if (&side = L) %then %do; adjp = adjp + (mx> -tvals ); %end; %else %do; adjp = adjp + (mx> tvals ); %end; end; adjp = adjp/&nsamp;

confindx = round(&nsamp*&conf,1); sorttemp = maxt; maxt[rank(maxt),] = sorttemp; c_alpha = maxt[confindx];

start tlc(n,d); return(trim(left(char(n,d)))); finish;

%if (&side = B) %then %do; LowerCL = ests - c_alpha*ses; UpperCL = ests + c_alpha*ses; %end; %else %if (&side = L) %then %do; LowerCL = j(ncol(C),1,.M); UpperCL = ests + c_alpha*ses; %end; %else %do; LowerCL = ests - c_alpha*ses; UpperCL = j(ncol(C),1,.I); %end;

create SimIntOut var {"Estimate" "StdErr" "tValue" "RawP" "OneP" "LowerCL" "UpperCL"}; data = ests || ses || tvals || rawp || adjp || LowerCL || UpperCL; append from data; call symput('confpct',tlc(100*&conf,4)); call symput('quant' ,tlc(c_alpha ,8));

create labels from clab; append from clab; data SimIntOut; merge labels(rename=(COL1=Contrast)) SimIntOut; run;

%if (^%index(%upcase(&options),NOPRINT)) %then %do; proc template; delete MCBook.SimIntervals; define table MCBook.SimIntervals; column Contrast Estimate StdErr tValue RawP OneP LowerCL UpperCL;

define header h1; text "Estimated &confpct% Quantile = &quant"; spill_margin; %if (^&ANORM) %then %do; space=1; %end; end;

%if (&ANORM) %then %do; define header h2; text "Asymptotic Normal Approximations"; space=1; end; %end;

define column Contrast; header="Contrast"; end; define column Estimate; header="Estimate" format=D8. space=1; translate _val_ = ._ into ''; end; define column StdErr; header="Standard Error" format=D8. space=1; translate _val_ = ._ into ''; end; define column tValue; header="#t Value" format=7.2; translate _val_ = .I into ' Infty', _val_ = .M into ' -Infty', _val_ = ._ into ''; end;

%if (&side = B) %then %do; define header ProbtHead; text " Pr > |t| "; start=RawP end=OneP just=c expand='-'; end; %end; %else %if (&side = L) %then %do; define header ProbtHead; text " Pr < t "; start=RawP end=OneP just=c expand='-'; end; %end; %else %do; define header ProbtHead; text " Pr > t "; start=RawP end=OneP just=c expand='-'; end; %end;

define column RawP; space=1 glue=10 parent=Common.PValue header="Raw"; translate _val_ = ._ into ''; end; define column OneP; parent=Common.PValue header="Adjusted"; translate _val_ = ._ into ''; end;

define header CLHead; text "&confpct% Confidence Interval"; start=LowerCL end=UpperCL just=c; end; define LowerCL; translate _val_ = .M into ' -Infty'; space=1 glue=10 format=D8. print_headers=off; end; define UpperCL; format=D8. print_headers=off; translate _val_ = .I into ' Infty'; end;

end; run; data _null_; set SimIntOut; file print ods=(template='MCBook.SimIntervals'); put _ods_; run;

%end; options notes;

%mend; /*------*/ /* The %MakeGLMStats Macro */ /* This macro creates the %Estimates and %Contrasts */ /* macros that are needed for %SimIntervals and %SimTests */ /* Name: MakeGLMStats */ /* Title: Macro to create %Estimates and %Contrasts macros */ /* needed for %SimIntervals and %SimTests */ /* Author: Randy Tobias, [email protected] */ /* Release: Version 7.01 */ /*------*/ /* Inputs: */ /* DATASET = Data set to be analyzed (required) */ /* CLASSVAR = Listing of classification variables. If absent, */ /* no classification variables are assumed */ /* YVAR = response variable (required) */ /* MODEL = GLM model specification (required) */ /* CONTRASTS = CONTROL(effect), ALL(effect), or USER. This */ /* creates the %Contrasts macro unless you specify */ /* USER (the default), in which case you create */ /* the %Contrasts macro yourself */ /*------*/ /* Output: This macro creates the %Estimates macro needed for */ /* the %SimIntervals and %SimTests macros. Additionally, if */ /* you specify CONTRASTS = ALL or CONTROL, it also creates the */ /* %Contrasts macro. There is no other output. */ /*------*/

%macro MakeGLMStats(dataset= , classvar= , yvar= , model= , contrasts=USER); %global nx yvar1 nlev icntl;

options nonotes;

%let yvar1 = &yvar; proc glmmod data=&dataset noprint outparm=parm outdesign=design; %if (%length(&classvar)) %then %do; class &classvar; %end; model &yvar = &model; data _null_; set parm; call symput('nx',_n_); run;

%macro Estimates; use design; read all var ("col1":"col&nx") into X; read all var ("&yvar1") into Y; XpXi = ginv(X`*X); rankX = trace(XpXi*(X`*X)); n = nrow(X); df = n-rankX; EstPar = XpXi*X`*Y; mse = ssq(Y-X*EstPar)/df; Cov = mse*XpXi; %mend;

%let ctype = %upcase(%scan(&contrasts,1)); %if (&ctype ^= USER) %then %do; %let effect = %scan(&contrasts,2); %if (&ctype = CONTROL) %then %do; %let icntl = %scan(&contrasts,3); %end; %end;

%if (&ctype ^= USER) %then %do; ods listing close; ods output LSMeanCoef=LSMeanCoef; proc glm data=&dataset; %if (%length(&classvar)) %then %do; class &classvar; %end; model &yvar = &model; lsmeans &effect / e; quit; ods listing; proc transpose data=LSMeanCoef out=temp; var Row:; data _null_; set temp; call symput('nlev',_n_); run; %end;

%if (&ctype = ALL) %then %do; %macro Contrasts; %global nlev; use LSMeanCoef; read all var ("Row1":"Row&nlev") into L; free C clab; do i = 1 to ncol(L)-1; do j = i+1 to ncol(L); C = C // L[,i]` - L[,j]`; clab = clab // ( trim(left(char(i,5))) +'-'+trim(left(char(j,5)))); end; end; C = C`; %mend; %end; %if (&ctype = CONTROL) %then %do; %macro Contrasts; %global icntl; use LSMeanCoef; read all var ("Row1":"Row&nlev") into L; free C clab; j = &icntl; do i = 1 to ncol(L); if (i ^= j) then do; C = C // L[,i]` - L[,j]`; clab = clab // ( trim(left(char(i,5))) +'-'+trim(left(char(j,5)))); end; end; C = C`; %mend; %end; options notes; %mend;

/* Data example of an in-vivo interlab study */ /* liver weight data with control and 3 doses and 8 centers */ data interact; input dose cent weig; cards; 1 1 10.2 1 1 8.8 1 1 10.4 1 1 9 1 1 8.9 1 1 8.4 1 1 10.7 1 1 9.3 1 1 9.1 1 1 8.7 2 1 11.6 2 1 9.9 2 1 9.92 2 1 9.5 2 1 9.9 2 1 9.9 2 1 9.7 2 1 10 2 1 10.6 2 1 8.2 3 1 12.6 3 1 11.4 3 1 11.9 3 1 12.1 3 1 10.5 3 1 12.8 3 1 11.8 3 1 10.3 3 1 12.4 3 1 12.6 4 1 10.6 4 1 13.1 4 1 15.6 4 1 12.6 4 1 13.1 4 1 13 4 1 12.9 4 1 14.9 4 1 14.4 4 1 12.5 1 2 6.23 1 2 5.99 1 2 6.3 1 2 5.49 1 2 5.15 1 2 6.03 1 2 6.72 1 2 5.8 1 2 6.12 1 2 5.82 2 2 7.19 2 2 5.83 2 2 6.75 2 2 5.98 2 2 6.38 2 2 6.36 2 2 6.55 2 2 6.82 2 2 5.56 2 2 7.13 3 2 9.45 3 2 7.53 3 2 8.81 3 2 8.06 3 2 9.83 3 2 8.98 3 2 7.653 3 2 8.99 3 2 8.82 3 2 8.79 4 2 10.27 4 2 10.67 4 2 10.73 4 2 9.46 4 2 8.94 4 2 10.9 4 2 10.95 4 2 10.93 4 2 10.36 4 2 9.96 1 3 7.93 1 3 9.14 1 3 7.58 1 3 9.14 1 3 7.33 1 3 8.05 1 3 7.25 1 3 7.11 1 3 6.86 1 3 7.09 2 3 7.31 2 3 8.09 2 3 7.65 2 3 7.27 2 3 7.14 2 3 7.37 2 3 8.8 2 3 7.87 2 3 8.25 2 3 7.22 3 3 8.89 3 3 8.46 3 3 8.43 3 3 9.37 3 3 9.68 3 3 10.27 3 3 9.06 3 3 9.74 3 3 8.37 3 3 9.18 4 3 12.48 4 3 12.16 4 3 11.39 4 3 10.66 4 3 11.98 4 3 13.66 4 3 11.23 4 3 12.98 4 3 10.72 4 3 11.23 1 4 7.16 1 4 5.9 1 4 5.62 1 4 7.02 1 4 6.84 1 4 6.12 1 4 6.42 1 4 6.03 1 4 6.29 2 4 7.36 2 4 6.99 2 4 6.45 2 4 7.73 2 4 6.33 2 4 7.15 2 4 6.91 2 4 6.09 2 4 7.35 2 4 6.92 3 4 10.02 3 4 9.09 3 4 9.15 3 4 7.82 3 4 8.94 3 4 8.45 3 4 6.84 3 4 10.21 3 4 11.62 3 4 8.51 4 4 11.14 4 4 11.77 4 4 10.11 4 4 10.2 4 4 11.25 4 4 9.92 4 4 10.54 4 4 10.68 4 4 11.464 4 4 10.39 1 5 6.7 1 5 5.9 1 5 5.7 1 5 6.3 1 5 6.9 1 5 5.4 1 5 5.7 1 5 6.5 1 5 5.9 1 5 5.8 2 5 6.5 2 5 6.5 2 5 6.6 2 5 5.7 2 5 5.6 2 5 5.8 2 5 7.2 2 5 6.8 2 5 6.8 2 5 6.2 3 5 9 3 5 8.7 3 5 7.7 3 5 8.3 3 5 8.6 3 5 8 3 5 7.8 3 5 9.3 3 5 8 3 5 8.4 4 5 10.7 4 5 11.6 4 5 8.5 4 5 9.7 4 5 11 4 5 11.8 4 5 11.9 4 5 11 4 5 10.5 4 5 11.3 1 6 7.09 1 6 7.99 1 6 8.02 1 6 6.75 1 6 7.2 1 6 6.88 1 6 7.16 1 6 8.05 1 6 7.77 1 6 7.51 2 6 8.11 2 6 7.64 2 6 6.59 2 6 6.87 2 6 8.02 2 6 6.08 2 6 7.3 2 6 8.79 2 6 8.1 2 6 7.86 3 6 9.99 3 6 9.4 3 6 8.88 3 6 8.22 3 6 9.54 3 6 9.01 3 6 9.69 3 6 8.55 3 6 8.77 3 6 7.77 4 6 12.55 4 6 12.43 4 6 9.67 4 6 10.66 4 6 10.94 4 6 12.83 4 6 11.33 1 7 7.1 1 7 10.12 1 7 9.34 1 7 9.52 1 7 8.75 1 7 8.88 1 7 9.15 1 7 10.43 1 7 9.63 1 7 7.81 2 7 8.69 2 7 9.08 2 7 11.23 2 7 8.19 2 7 9.11 2 7 8.07 2 7 8.65 2 7 8.08 2 7 9.51 2 7 8.59 3 7 11.16 3 7 12.82 3 7 11.69 3 7 10.4 3 7 11.29 3 7 12.36 3 7 11.91 3 7 12.46 3 7 11.21 3 7 10.22 4 7 16.56 4 7 11.87 4 7 11.56 4 7 13.17 4 7 11.56 4 7 14.06 4 7 12.22 4 7 11.36 4 7 12.2 4 7 13.2 1 8 6.65 1 8 5.68 1 8 6.8 1 8 6.61 1 8 5.34 1 8 6.11 1 8 5.87 1 8 6.66 1 8 6.25 1 8 6.4 2 8 6.67 2 8 6.06 2 8 6.71 2 8 6.83 2 8 5.98 2 8 5.61 2 8 6.12 2 8 6.96 2 8 6.68 2 8 7.43 3 8 8.67 3 8 8.01 3 8 7.71 3 8 7.94 3 8 7.38 3 8 8.28 3 8 8.68 3 8 8.15 3 8 6.82 3 8 6.65 4 8 8.33 4 8 7.6 4 8 9.08 4 8 9.74 4 8 7.66 4 8 8.51 4 8 8.41 4 8 9.36 4 8 9.86 4 8 8.75 ; /* ANOVA F-tests with all-pairs interaction global F-test */ proc glm; class cent dose; model weig=cent dose cent*dose; run;

/* All tetrad contrasts according to Westfall et al. 1999 */ %MakeGLMStats(dataset = interact , classvar = cent dose , yvar = weig , model = cent*dose);

%let a=8; /* Levels of first CLASS variable cent */ %let b=4; /* Levels or second CLASS variable dose */

%macro Contrasts; /* all-pairs tetraic contrasts */ start tlc(n); return(trim(left(char(n,20)))); finish;

idi=(1:&a); idj=(1:&b); free C clab; do i1=1 to &a-1; do i2=i1+1 to &a; do j1=1 to &b-1; do j2=j1+1 to &b; C = C // (0 || ( ((idi=i1) - (idi=i2)) @((idj=j1) - (idj=j2)))); clab = clab // "("+tlc(i1)+tlc(j1)+"-"+tlc(i1)+tlc(j2)+")" +"-("+tlc(i2)+tlc(j1)+"-"+tlc(i2)+tlc(j2)+")"; end; end; end; end; C=C`; %mend;

%SimIntervals(nsamp=10000,seed=12345); /* end macro calls for all tetrad contrasts */ /*------*/

/* Many-to-one interaction contrasts according to Hothorn, 2002 */ %MakeGLMStats(dataset = interact , classvar = cent dose , yvar = weig , model = cent*dose);

%let a=8; /* Levels of first CLASS variable cent */ %let b=4; /* Levels or second CLASS variable dose */

%macro Contrasts; /* Many-to-one interaction contrasts */ start tlc(n); return(trim(left(char(n,20)))); finish; idi=(1:&a); idj=(1:&b); free C clab; do i1=1 to &a-1; do i2=i1+1 to &a; do j1=2 to &b; do j2=1 to 1; C = C // (0 || ( ((idi=i1) - (idi=i2)) @((idj=j1) - (idj=j2)))); clab = clab // "("+tlc(i1)+tlc(j1)+"-"+tlc(i1)+tlc(j2)+")" +"-("+tlc(i2)+tlc(j1)+"-"+tlc(i2)+tlc(j2)+")"; end; end; end; end; C=C`; %mend;

%SimIntervals(nsamp=10000,seed=12745); /* end macro calls for many-to-one interaction contrasts */ /*------*/

The results will be in SAS' output window or the last actual result can be transferred as an EXCEL file using: file/export data/library=work;member=simintout/....

The program can be simply modified for other data by: i) replacing the old data in data interact; step ii) defining the number of centers (xx) and number of doses (yy) in the %MakeGLMStats call %let a=xx; /* Levels of first CLASS variable cent */ %let b=yy; /* Levels or second CLASS variable dose */ e.g. 5 centers and a control and 2 doses %let a=5; /* Levels of first CLASS variable cent */ %let b=3; /* Levels or second CLASS variable dose */ All other parameters can be unchanged. On a high speed PC calculation is done within a minute using SAS version 8.1. This program listing can be download via www.bioinf.uni- hannover.de/xxxxxxxxxxxxxxxxx. Appendix C: The SAS program PARALINT.SAS for center-wise comparison of linear curves for the model endpoint=a+b*log(dose)

/* PARALLEL LINE ASSAY FOR INTERLABORATORY STUDIES */ /*------*/ /* Name: Paralint.sas */ /* Title: 1. Estimate and compare linear regression */ /* coefficient of two groups */ /* 2. Estimation of relativ effectiveness and a lower*/ /* and upper confidence level */ /* Author: Dirk Seidel, [email protected] */ /* Reference: Guiard, V. (1989): Probleme der angewandten */ /* Statistik Heft 30, Mathematische Methoden der */ /* biologischen Wirkstoffprüfung mit Hilfe quantita- */ /* tiver Wirkungen unter besonderer Berücksichtigung */ /* der Versuchsplanung. */ /* Release: Version 1.0 */ /*------*/ /* Inputs: */ /* data = SAS-Dataset */ /* var_ = observation */ /* class_ = e. g. charge or Center */ /* dose_ = dose or x-Variable */ /* alpha_ci = significance level for the confidence */ /* intervall of the relativ effectiveness */ /* parallel lines */ /* */ /*------*/ /* Outputs */ /* p_par = p-value for the test of paarallel lines */ /* R_1 = lower confidence level for R */ /* R = relativ effectiveness */ /* R_2 = upper confidence level for R */ /* error = 0 if no error */ /* = 1 Estimation of CI not possible */ /*------*/

%macro Parallelline_assay(data=_LAST_, var_=, class_=, dose_=, alpha_ci=0.05, title_=); title "&title_"; proc sort data=&data out=sortdat1; by &class_ &dose_; run; goptions reset=global ; title &title_; proc gplot data=&data; symbol1 color=green interpol=RLCLM95 value=star; symbol2 color=blue interpol=RLCLM95 value=circle; plot &var_*&dose_=&class_; run; quit; data sortdat1; set sortdat1; x_ijk_square=&dose_*&dose_; y_ijk_square=&var_*&var_; run; proc means data=sortdat1 sum N noprint; by &class_ &dose_; var &var_ &dose_ x_ijk_square y_ijk_square; output out=out1 sum=Y_ij X_ij temp1 temp2 n=n_ij; run; data out1; set out1; index=1; x_y_ij=X_ij*Y_ij/n_ij; temp3=Y_ij*Y_ij/n_ij; output; proc means data=out1 sum noprint; by &class_; var n_ij X_ij Y_ij x_y_ij temp1 temp2 temp3 index ; output out=out2 sum=N_i X_i Y_i s_ixy3 s_ix3 s_iy3 s_iy2 l_i; run; data out2; set out2; s_ix1=X_i*X_i/N_i; s_iY1=Y_I*Y_I/N_i; s_iXY1=X_i*Y_i/N_i; sq_ix=s_ix3-s_ix1; sp_ixy=s_ixy3-s_ixy1; sq_iy_d=s_iy2-s_iy1; sq_iy_r=s_iy3-s_iy2; N_iml_i=N_i-l_i; b_i=sp_ixy/sq_ix; temp4=sp_ixy*sp_ixy/sq_ix; n_i_inv=1/N_i; if _N_ ^= 1 then do; y_i_quer=-y_i/n_i; x_i_quer=-x_i/n_i; end ; else do; y_i_quer=y_i/n_i; x_i_quer=x_i/n_i; end ; output; run; proc means data=out2 sum noprint; var sq_ix sp_ixy sq_iy_d sq_iy_r N_iml_i temp4 y_i_quer x_i_quer n_i_inv; output out=out3 sum=sq_x sp_xy sq_y_d sq_y_r fg_r temp5 temp6 temp7 temp8; run; data out3; set out3; s_2=sq_y_r/fg_r; t_par=sqrt((temp5-sp_xy*sp_xy/sq_x)/s_2); p_par=(1-probt(t_par,fg_r))/2; b=sp_xy/sq_x; F=temp6-b*temp7; M=F/b; R=10**M; g=s_2*tinv(1-&alpha_ci/2,fg_r)**2/(b*b*sq_x); if g<1 then do; m_stern=(M+g*temp7)/(1-g); L=1/(1-g)*sqrt(g*(temp8*sq_x*(1-g)+(M+temp7)**2)); M_1=m_stern-L; M_2=m_stern+L; R_1=10**M_1; R_2=10**M_2; error=0; end; else do; error=1; R_1=-1; R_2=-1; end; output; run; data out4 (keep=p_par R_1 R R_2 error); set out3; run; proc print; run; %mend; data interact; input dose cent weig; cards; 1 1 10.2 1 1 8.8

/* include the complete data from Appendix B */

4 8 9.86 4 8 8.75 ; %macro pairwise_paralleline_assay1(data=_last_, pairvariable=); %do i=1 %to 7; %do j=%eval(&i+1) %to 8; data firma1_2; set &data; if &pairvariable=&i | &pairvariable=&j then ; else delete; if dose=1 then logdose=log10(1+0); if dose=2 then logdose=log10(1+5); if dose=3 then logdose=log10(1+30); if dose=4 then logdose=log10(1+100); output; run; %Parallelline_assay(data=firma1_2, var_=weig, class_=cent, dose_=logdose, alpha_ci=0.05, title_="center &i vs. center &j"); title; %end; %end;

%mend; %pairwise_paralleline_assay1(data=interact, pairvariable=cent); Appendix D: The SAS program INTERPARA.SAS for global and all pairwise tests on parallelity of linear models endpoint=a+b*log(dose)

/* GLOBAL AND ALL PAIRWISE TESTS ON PARALLELITY IN */ /* INTERLABORATORY STUDIES*/ /*------*/ /* Name: Interpara.sas */ /* Title: Global and all pairwise local tests on */ /* parallelity for linear models */ /* endpoint=a+b*log(dose)in interlaboratory studies */ /* Author: Ludwig A. Hothorn, [email protected] */ /* Proc‘s: Proc reg */ /* Reference: Hothorn (2002) Statistics of interlaboratory */ /* in-vitro toxicological studies, ATLA xxx */ /* Release: Version 1.0, August 2001 */ /*------*/

/* Parallel line assay for interlaboratory dose-response studies */ data interact; input dose cent1 cent2 cent3 cent4 cent5 cent6 cent7 cent8; cards; 0 10.2 6.23 7.93 7.16 6.7 7.09 7.1 6.65 0 8.8 5.99 9.14 5.9 5.9 7.99 10.12 5.68 0 10.4 6.3 7.58 5.62 5.7 8.02 9.34 6.8 0 9 5.49 9.14 7.02 6.3 6.75 9.52 6.61 0 8.9 5.15 7.33 6.84 6.9 7.2 8.75 5.34 0 8.4 6.03 8.05 6.12 5.4 6.88 8.88 6.11 0 10.7 6.72 7.25 6.42 5.7 7.16 9.15 5.87 0 9.3 5.8 7.11 6.03 6.5 8.05 10.43 6.66 0 9.1 6.12 6.86 6.29 5.9 7.77 9.63 6.25 0 8.7 5.82 7.09 . 5.8 7.51 7.81 6.4 5 11.6 7.19 7.31 7.36 6.5 8.11 8.69 6.67 5 9.9 5.83 8.09 6.99 6.5 7.64 9.08 6.06 5 9.92 6.75 7.65 6.45 6.6 6.59 11.23 6.71 5 9.5 5.98 7.27 7.73 5.7 6.87 8.19 6.83 5 9.9 6.38 7.14 6.33 5.6 8.02 9.11 5.98 5 9.9 6.36 7.37 7.15 5.8 6.08 8.07 5.61 5 9.7 6.55 8.8 6.91 7.2 7.3 8.65 6.12 5 10 6.82 7.87 6.09 6.8 8.79 8.08 6.96 5 10.6 5.56 8.25 7.35 6.8 8.1 9.51 6.68 5 8.2 7.13 7.22 6.92 6.2 7.86 8.59 7.43 30 12.6 9.45 8.89 10.02 9 9.99 11.16 8.67 30 11.4 7.53 8.46 9.09 8.7 9.4 12.82 8.01 30 11.9 8.81 8.43 9.15 7.7 8.88 11.69 7.71 30 12.1 8.06 9.37 7.82 8.3 8.22 10.4 7.94 30 10.5 9.83 9.68 8.94 8.6 9.54 11.29 7.38 30 12.8 8.98 10.27 8.45 8 9.01 12.36 8.28 30 11.8 7.653 9.06 6.84 7.8 9.69 11.91 8.68 30 10.3 8.99 9.74 10.21 9.3 8.55 12.46 8.15 30 12.4 8.82 8.37 11.62 8 8.77 11.21 6.82 30 12.6 8.79 9.18 8.51 8.4 7.77 10.22 6.65 100 10.6 10.27 12.48 11.14 10.7 12.55 16.56 8.33 100 13.1 10.67 12.16 11.77 11.6 12.43 11.87 7.6 100 15.6 10.73 11.39 10.11 8.5 9.67 11.56 9.08 100 12.6 9.46 10.66 10.2 9.7 10.66 13.17 9.74 100 13.1 8.94 11.98 11.25 11 10.94 11.56 7.66 100 13 10.9 13.66 9.92 11.8 12.83 14.06 8.51 100 12.9 10.95 11.23 10.54 11.9 11.33 12.22 8.41 100 14.9 10.93 12.98 10.68 11 . 11.36 9.36 100 14.4 10.36 10.72 11.464 10.5 . 12.2 9.86 100 12.5 9.96 11.23 10.39 11.3 . 13.2 8.75 ;

/* Log dose model */ data log; set interact; dose=log(dose+1); /* Global test on parallelity for log dose model */ proc reg data= log; model cent1 cent2 cent3 cent4 cent5 cent6 cent7 cent8=dose; mtest cent1-cent2, cent2-cent3, cent3-cent4, cent4-cent5, cent5-cent6, cent6-cent7, cent7-cent8, dose; Title 'Global parallelity test for log dose model'; run; /* Local tests on parallelity for log dose model */ Title 'Local parallelity tests for log dose model'; proc reg data= log; model cent1 cent2 =dose; mtest cent1-cent2, dose; proc reg data= log; model cent1 cent3 =dose; mtest cent1-cent3,dose; proc reg data= log; model cent1 cent4 =dose; mtest cent1-cent4,dose; proc reg data= log; model cent1 cent5=dose; mtest cent1-cent5,dose; proc reg data= log; model cent1 cent6 =dose; mtest cent1-cent6,dose; proc reg data= log; model cent1 cent7=dose; mtest cent1-cent7,dose; proc reg data= log; model cent1 cent8=dose; mtest cent1-cent8, dose; proc reg data= log; model cent2 cent3 =dose; mtest cent2-cent3, dose; proc reg data= log; model cent2 cent4 =dose; mtest cent2-cent4, dose; proc reg data= log; model cent2 cent5 =dose; mtest cent2-cent5,dose; proc reg data= log; model cent2 cent6 =dose; mtest cent2-cent6, dose; proc reg data= log; model cent2 cent7=dose; mtest cent2-cent7,dose; proc reg data= log; model cent2 cent8=dose; mtest cent2-cent8, dose; proc reg data= log; model cent3 cent4 =dose; mtest cent3-cent4,dose; proc reg data= log; model cent3 cent5 =dose; mtest cent3-cent5, dose; proc reg data= log; model cent3 cent6 =dose; mtest cent3-cent6, dose; proc reg data= log; model cent3 cent7 =dose; mtest cent3-cent7,dose; proc reg data= log; model cent3 cent8=dose; mtest cent3-cent8,dose; proc reg data= log; model cent4 cent5 =dose; mtest cent4-cent5,dose; proc reg data= log; model cent4 cent6 =dose; mtest cent4-cent6, dose; proc reg data= log; model cent4 cent7 =dose; mtest cent4-cent7,dose; proc reg data= log; model cent4 cent8=dose; mtest cent4-cent8,dose; proc reg data= log; model cent5 cent6 =dose; mtest cent5-cent6, dose; proc reg data= log; model cent5 cent7=dose; mtest cent5-cent7, dose; proc reg data= log; model cent5 cent8=dose; mtest cent5-cent8,dose; proc reg data= log; model cent6 cent7=dose; mtest cent6-cent7,dose; proc reg data= log; model cent6 cent8=dose; mtest cent6-cent8, dose; proc reg data= log; model cent7 cent8=dose; mtest cent7-cent8, dose; /* Model without center 8 */ proc reg data= interact; model cent1 cent2 cent3 cent4 cent5 cent6 cent7=dose; mtest cent1-cent2, cent2-cent3, cent3-cent4, cent4-cent5, cent5-cent6, cent6-cent7, dose; Title 'Global parallelity test for linear model centers 1-7 only'; proc reg data= log; model cent1 cent2 cent3 cent4 cent5 cent6 cent7=dose; mtest cent1-cent2, cent2-cent3, cent3-cent4, cent4-cent5, cent5-cent6, cent6-cent7, dose; Title 'Global parallelity test for log dose model centers 1-7 only'; run; Appendix E: The SAS program INTERISO.SAS for linear, pieceiwse linear and isotonic bootstrap interaction contrasts using the in-vivo liver weight data example.

/* INTERLABORATORY INTERACTION ORDER RESTICTED CONTRAST */ /* PROGRAM INCL. MACROS */ /*------*/ /* Name: Interiso.sas */ /* Title: Simultaneous Confidence Intervals for global */ /* linear, piecewise linear and order resticted */ /* isotonic intercation contrasts for interlab */ /* studies with control vs. doses/treatment designs */ /* Author: Ludwig A. Hothorn, [email protected] */ /* Macros: SimIntervals MakeGLMStats Contrasts by R.Tobias */ /* Reference: Hothorn (2002) Statistics of interlaboratory */ /* in-vitro toxicological studies, ATLA xxx */ /* Release: Version 1.0, August 2001 */ /*------*/

/*------*/ /* The %SimIntervals Macro */ /* Include the source code from Appendix B */

/* The %MakeGLMStats Macro */ /* Include the source code from Appendix B */

/* Data example of an in-vivo interlab study */ /* liver weight data with control and 3 doses and 8 centers */ data interact; input dose cent weig; cards; 1 1 10.2 1 1 8.8 /* include the complete data from Appendix B */ 4 8 9.86 4 8 8.75 ;

/*------*/ /* Linear interaction contrasts */ %MakeGLMStats(dataset = interact , classvar = cent dose , yvar = weig , model = cent*dose);

%let a=8; /* Levels of first CLASS variable cent */ %let b=4; /* Levels or second CLASS variable dose */

%macro Contrasts; /* equ-linear contrast for 4 groups, i.e. a control and 3 doses and 8 centres */ C={ 0 -3 -3 1 5 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -3 -3 1 5 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -3 -3 1 5 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 , 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 , 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 , 0 0 0 0 0 -3 -3 1 5 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -3 -3 1 5 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 , 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 , 0 0 0 0 0 0 0 0 0 -3 -3 1 5 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 3 3 -1 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 3 3 -1 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 3 3 -1 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 0 0 0 0 3 3 -1 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 3 3 -1 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 3 3 -1 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 0 0 0 0 3 3 -1 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 3 3 -1 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 0 0 0 0 3 3 -1 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -3 1 5 3 3 -1 -5 }; C=C`; Clab={ "1a-2b" , "1a-3b" , "1a-4b" , "1a-5b" , "1a-6b" , "1a-7b" , "1a-8b" , "2a-3b" , "2a-4b" , "2a-5b" , "2a-6b" , "2a-7b" , "2a-8b" , "3a-4b" , "3a-5b" , "3a-6b" , "3a-8b" , "3a-7b" , "4a-5b" , "4a-6b" , "4a-7b" , "4a-8b" , "5a-6b" , "5a-7b" , "5a-8b" , "6a-7b" , "7a-8b" , "6a-8b" }; %mend;

%SimIntervals(nsamp=10000,seed=12345); /* end macro calls for linear interaction contrasts */

/* piecewise linear interaction contrasts */ data new; set interact; weight=weig; if cent=1 then lab="a"; if cent=2 then lab="b"; if cent=3 then lab="c"; if cent=4 then lab="d"; if cent=5 then lab="e"; if cent=6 then lab="f"; if cent=7 then lab="g"; if cent=8 then lab="h"; run;

%macro Contrasts; /* all-incremental contrasts=piecewise linear contrasts */ start tlc(n); return(trim(left(char(n,20)))); finish;

idi=(1:&a); idj=(1:&b); free C clab; do i1=1 to &a-1; do i2=i1+1 to &a; do j1=1 to &b-1; j2=j1+1; C = C // (0 || ( ((idi=i1) - (idi=i2)) @((idj=j1) - (idj=j2)))); clab = clab // "("+tlc(i1)+tlc(j1)+"-"+tlc(i1)+tlc(j2)+")" +"-("+tlc(i2)+tlc(j1)+"-"+tlc(i2)+tlc(j2)+")"; end; end; end; C=C`; %mend;

%SimIntervals(nsamp=1000,seed=12345); /* end macro calls for piecewise linear contrasts */ /*------*/

%macro Contrasts; /* isotonic-lab contrast for4 groups, i.e. 7 contrasts and 8 centres */ C={ 0 -5 -5 1.339746 8.660254 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -5 -5 1.339746 8.660254 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 , 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 , 0 0 0 0 0 -5 -5 1.339746 8.660254 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 5 5 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 5 5 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 0 0 0 0 5 5 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 5 5 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 0 0 0 0 5 5 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 1.339746 8.660254 5 5 -1.339746 -8.660254 , 0 -2.886751 -2.886751 -2.886751 8.660254 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 , 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 , 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 , 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 , 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 , 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 -8.660254 -8.660254 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 -8.660254 -8.660254 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 -8.660254 -8.660254 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 2.886751 2.886751 2.886751 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 0 0 0 0 2.886751 2.886751 2.886751 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.886751 -2.886751 -2.886751 8.660254 2.886751 2.886751 2.886751 -8.660254 , 0 -5 -5 5 5 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -5 -5 5 5 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -5 -5 5 5 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 , 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 , 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 , 0 0 0 0 0 -5 -5 5 5 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -5 -5 5 5 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 , 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 , 0 0 0 0 0 0 0 0 0 -5 -5 5 5 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 5 5 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 5 5 -5 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 5 5 -5 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 5 5 -5 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 5 5 -5 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 5 5 -5 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 0 0 0 0 5 5 -5 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 5 5 -5 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 0 0 0 0 5 5 -5 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -5 5 5 5 5 -5 -5 , 0 -8.660254 2.8867513 2.8867513 2.8867513 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 , 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 , 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 , 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 , 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 , 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 8.660254 -2.8867513 -2.8867513 -2.8867513 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 0 0 0 0 8.660254 -2.8867513 -2.8867513 -2.8867513 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 2.8867513 2.8867513 2.8867513 8.660254 -2.8867513 -2.8867513 -2.8867513 , 0 -8.660254 0 0 8.660254 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 0 0 8.660254 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 , 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 , 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 , 0 0 0 0 0 -8.660254 0 0 8.660254 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 , 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 , 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 8.660254 0 0 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 8.660254 0 0 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 0 0 0 0 8.660254 0 0 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 8.660254 0 0 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 0 0 0 0 8.660254 0 0 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 0 0 8.660254 8.660254 0 0 -8.660254 , 0 -8.660254 -1.339746 5 5 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 5 5 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 , 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 , 0 0 0 0 0 -8.660254 -1.339746 5 5 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 8.660254 1.339746 -5 -5 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 8.660254 1.339746 -5 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 0 0 0 0 8.660254 1.339746 -5 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 8.660254 1.339746 -5 -5 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 0 0 0 0 8.660254 1.339746 -5 -5 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 5 5 8.660254 1.339746 -5 -5 , 0 -8.660254 -1.339746 1.339746 8.660254 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 , 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 , 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 8.660254 1.339746 -1.339746 -8.660254 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 0 0 0 0 8.660254 1.339746 -1.339746 -8.660254 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8.660254 -1.339746 1.339746 8.660254 8.660254 1.339746 -1.339746 -8.660254 }; C=C`; Clab={ "1a-2a" , "1a-3a" , "1a-4a" , "1a-5a" , "1a-6a" , "1a-7a" , "1a-8a" , "2a-3a" , "2a-4a" , "2a-5a" , "2a-6a" , "2a-7a" , "2a-8a" , "3a-4a" , "3a-5a" , "3a-6a" , "3a-7a" , "3a-8a" , "4a-5a" , "4a-6a" , "4a-7a" , "4a-8a" , "5a-6a" , "5a-7a" , "5a-8a" , "6a-7a" , "6a-8a" , "7a-8a" , "1b-2b" , "1b-3b" , "1b-4b" , "1b-5b" , "1b-6b" , "1b-7b" , "1b-8b" , "2b-3b" , "2b-4b" , "2b-5b" , "2b-6b" , "2b-7b" , "2b-8b" , "3b-4b" , "3b-5b" , "3b-6b" , "3b-7b" , "3b-8b" , "4b-5b" , "4b-6b" , "4b-7b" , "4b-8b" , "5b-6b" , "5b-7b" , "5b-8b" , "6b-7b" , "6b-8b" , "7b-8b" , "1c-2c" , "1c-3c" , "1c-4c" , "1c-5c" , "1c-6c" , "1c-7c" , "1c-8c" , "2c-3c" , "2c-4c" , "2c-5c" , "2c-6c" , "2c-7c" , "2c-8c" , "3c-4c" , "3c-5c" , "3c-6c" , "3c-7c" , "3c-8c" , "4c-5c" , "4c-6c" , "4c-7c" , "4c-8c" , "5c-6c" , "5c-7c" , "5c-8c" , "6c-7c" , "6c-8c" , "7c-8c" , "1d-2d" , "1d-3d" , "1d-4d" , "1d-5d" , "1d-6d" , "1d-7d" , "1d-8d" , "2d-3d" , "2d-4d" , "2d-5d" , "2d-6d" , "2d-7d" , "2d-8d" , "3d-4d" , "3d-5d" , "3d-6d" , "3d-7d" , "3d-8d" , "4d-5d" , "4d-6d" , "4d-7d" , "4d-8d" , "5d-6d" , "5d-7d" , "5d-8d" , "6d-7d" , "6d-8d" , "7d-8d" , "1e-2e" , "1e-3e" , "1e-4e" , "1e-5e" , "1e-6e" , "1e-7e" , "1e-8e" , "2e-3e" , "2e-4e" , "2e-5e" , "2e-6e" , "2e-7e" , "2e-8e" , "3e-4e" , "3e-5e" , "3e-6e" , "3e-7e" , "3e-8e" , "4e-5e" , "4e-6e" , "4e-7e" , "4e-8e" , "5e-6e" , "5e-7e" , "5e-8e" , "6e-7e" , "6e-8e" , "7e-8e" , "1f-2f" , "1f-3f" , "1f-4f" , "1f-5f" , "1f-6f" , "1f-7f" , "1f-8f" , "2f-3f" , "2f-4f" , "2f-5f" , "2f-6f" , "2f-7f" , "2f-8f" , "3f-4f" , "3f-5f" , "3f-6f" , "3f-7f" , "3f-8f" , "4f-5f" , "4f-6f" , "4f-7f" , "4f-8f" , "5f-6f" , "5f-7f" , "5f-8f" , "6f-7f" , "6f-8f" , "7f-8f" , "1h-2h" , "1h-3h" , "1h-4h" , "1h-5h" , "1h-6h" , "1h-7h" , "1h-8h" , "2h-3h" , "2h-4h" , "2h-5h" , "2h-6h" , "2h-7h" , "2h-8h" , "3h-4h" , "3h-5h" , "3h-6h" , "3h-7h" , "3h-8h" , "4h-5h" , "4h-6h" , "4h-7h" , "4h-8h" , "5h-6h" , "5h-7h" , "5h-8h" , "6h-7h" , "6h-8h" , "7h-8h" }; %mend;

%SimIntervals(nsamp=10000,seed=12345); /* end macro calls for isotonic interaction contrasts */

The results will be in SAS' output window or the last actual result can be transferred as an EXCEL file using: file/export data/library=work;member=simintout/....

The program can be modified for other data based on detailed knowledge of order restricetd contrasts. On a high speed PC calculation is done within a minute using SAS version 8.1. This program listing can be download via www.bioinf.uni-hannover.de/xxxxxxxxxxxxxxxxx. Appendix F: The SAS program METAINT.SAS for two-sided 95% confidence intervals for Meta-analysis according to Hedges and Olkin (1985)

/* META ANALYSIS HETEROGENEITY CONFIDENCE INTERVALS */ /*------*/ /* Project: INVITROSTAT */ /* Name: metaint.sas */ /* Title: Confidence interval for meta analysis */ /* Author: Ludwig A. Hothorn, [email protected] */ /* Reference: Hedges and Olkin (1985) */ /* Hothorn, L.A. xxxxxxxx */ /* Release: Version 1.0 , 08/2001 */ /*------*/ /* Inputs: */ /* data = SAS-Dataset */ /* with dose center and endpoint */ /*------*/ /* Output */ /* Lower and upper confidence intervals for a Meta */ /* analysis per dose group (separate) and centers */ /* (to be compared) */ /*------*/ data interact; input dose cent weig; cards; 1 1 10.2 1 1 8.8 1 1 10.4 /* include the complete data from Appendix B */ 4 8 9.86 4 8 8.75 ; proc sort data=interact out=new; by cent dose; proc means data=new noprint; var weig; by cent dose; output out=cc n=n; data sam (keep=cent dose nq nsu npr); array nn(10); array no(10); array ns(10); array np(10); set cc; if dose=1 then nn(1)=n; if dose=2 then nn(2)=n; if dose=3 then nn(3)=n; if dose=4 then nn(4)=n; if dose=5 then nn(5)=n; if dose=6 then nn(6)=n; if dose=7 then nn(7)=n; if dose=8 then nn(8)=n; do i=2 to 9; no(i)=sqrt(1/nn(i-1)+1/nn(i)); ns(i)=nn(i-1)+nn(i); np(i)=nn(i-1)*nn(i); end; retain; if dose=2 then do; nsu=ns(2); npr=np(2); nq=no(2);end; if dose=3 then do; nsu=ns(3); npr=np(3); nq=no(3);end; if dose=4 then do; nsu=ns(4); npr=np(4);nq=no(4); end; if dose=5 then do; nsu=ns(5); npr=np(5);nq=no(5);end; if dose=6 then do; nsu=ns(6); npr=np(6);nq=no(6);end; if dose=7 then do; nsu=ns(7); npr=np(7);nq=no(7);end; if dose=8 then do; nsu=ns(8); npr=np(8);nq=no(8);end; if dose=1 then delete; by cent; run; proc mixed data=new noclprint noitprint ninfo; class dose; model weig=dose; lsmeans dose/pdiff=control cl; ods output diffs=dif; by cent; run; data um (keep=cent dose g ciu cio); merge dif sam; by cent dose; retain; g=estimate/(Stderr/sqrt(nq)); d=g*(1-3/((4*nsu)-9)); sd=d*d/(2*nsu)+nsu/npr; ciu=d-1.966*sd; cio=d+1.966*sd; proc sort data=um out=som; by dose; proc print data=som; title 'Dose- and center-wise Meta analysis confidence intervals '; run;

The results will be in SAS' output window or the last actual result can be transferred as an EXCEL file using: file/export data/library=work;member=som/....

Recommended publications