1. This is dataplot macro computelabstats.dp (yz,labz) 2. Purpose: For a given radionulcide (radionulcide jrn), compute global and lab stats 3. Note: this macro is usually called within a (jrn) loop 4. Date: 9/26/12 => 8/1/18 5. 6. Input (3): 7. yz (vector) = responses for all labs 8. labz (vector) = lab ID (coded or uncoded, sorted or unsorted--as done before) 9. decplace (parameter) = number of decimal places for rounding (optional) 10. 11. Output (16): 12. nv (vector) = number of observations per lab 13. ybarv (vector) = lab means (= within-lab means) 14. sdv (vector) = lab data standard deviations (= within-lab SDs) 15. sdmv (vector) = lab means standard deviations 16. labv (vector) = coded lab IDs (1, 2, . . .) 17. sdvp (vector) = adjusted lab standard deviations (where if ni = 1, then sdi ==> sdpool) 18. sdmvp (vector) = adjusted lab mean SDs (where if ni = 1, then sdmi ==> sdpool) 19. zv (vector) = standardized lab means (= ybarv - mmean) / sdmean 20. . 21. numlab (parameter) = number of labs 22. n (parameter) = number of observations in y 23. mmean (parameter) = mean of lab means 24. mmeanr (parameter) = rounded mean of lab means 25. medmean (parameter) = median of lab means 26. medmeanr (parameter) = rounded median of lab means 27. sdmean (parameter) = SD of the lab means 28. sdb (parameter) = SD of the lab means (is identical to sdmean) 29. sdpool (parameter) = pooled standard deviation = replication SD from ANOVA 30. 31. -----start point----- 32. 33. -----Step 1: Check input arguments----- 34. 35let string stmacro = computelabstats.dp 36let string stall = yz labz 37call checkinput.dp 38. 39. -----Step 2: Compute within-lab statistics----- 40. 41delete dlabz; let dlabz = distinct labz 42let numlab = number dlabz 43let n = number yz 44. 45delete nv ybarv sdv labv sdmv 46loop for j = 1 1 numlab 47 let jorig = dlabz(j) 48 let string qzz = subset labz jorig 49 let nv(j) = number yz ^qzz 50 let ybarv(j) = mean yz ^qzz 51 let ni = nv(j) 52 let sdv(j) = 0 53 if ni >= 1; let sdv(j) = sd yz ^qzz; end if 54 let labv(j) = j 55end loop 56let sdmv = sdv/sqrt(nv) 57. 58. -----Step 3: Treat the special case for sd(mean) when a lab only has a single observation----- 59. 60. print "---computelabstats.dp: at start of step 3 (pre-anova)---" 61. pause 62. 63printing off 64delete sdvp sdmvp 65if numlab = 1; let sdvp = sdv for i = 1 1 1; end if 66if numlab >= 2 67 anova yz labz 68 let sdpool = ressd 69 . print "sdpool = ^sdpool" 70 . 71 delete sdvp sdmvp 72 let sdvp = sdv 73 let sdmvp = sdmv 74 . print sdvp sdmvp nv 75 . pause 76 . 77 let nvmin = minimum nv 78 if nvmin <= 1 79 let sdvp = sdpool subset nv 1 80 let sdmvp = sdpool subset nv 1 81 end if 82end if 83. 84. -----Step 4: Compute global statistics----- 85. 86 let dpz = 4 87 if decplace exists; let dpz = decplace; end if 88 . 89 let mmean = mean ybarv 90 let mmeanr = round(mmean,dpz) 91 . 92 let medmean = median ybarv 93 let medmeanr = round(medmean,dpz) 94 . 95if numlab >= 2 96 let sdmean = sd ybarv 97 . print ybarv 98 . pause 99 let sdmeanr = round(sdmean,dpz) 100 let sdb = sdmean 101 let sdbr = sdmeanr 102end if 103. 104. -----Step 5: Compute standardized deviates----- 105. 106if numlab >= 2 107 delete zv 108 set write decimals 6 109 let zv = (ybarv-mmean)/sdmean 110 . print nv ybarv zv 111 . pause 112end if 113