1. This is dataplot macro DEXCP.DP latest update: 9/25/18 2. Purpose: Generate a DEX contour plot 3. (= step 10 of the DEXPLOT.DP 10-step DEX analysis procedure) 4. Date: May 2005 ==> 1/26/15 ==> 2/23/15 => 9/25/18 5. 9/25/18: insert logic for vertical and horizontal factors for the k >= 10 case 6. 7. Input 8. 1. k (parameter) = Total number of plot factors 9. 2. y (vector) = Response variable 10. 3. x1, x2, x3, . . . (vectors) = Factors 11. 4. ycont (vector) = Desired contour line values (optional) (default = auto) 12. 13. 5. contourh (parameter) = factor id for #1 dominant (=> horizontal axis) (optional) (default = automatic) 14. 6. contourv (parameter) = factor id for #2 dominant (=> vertical axis) (optional) (default = automatic) 15. 7. ncent (parameter) = number of center point values (if existent) (optional) (default = 0) 16. 8. meancent (parameter) = mean of center point values (if existent) (optional) (default = not exist) 17. 9. sdcent (parameter) = sd of center point values (if existent) (optional) (default = not exist) 18. 19. 9. confdone (parameter) = 0,1 switch defining whether effects & confounding have been computed or not (optional) 20. 21. 10. framet (parameter) = top frame line (in %) (optional) (default = 90) 22. 11. frameb (parameter) = bottom frame line (in %) (optional) (default = 20) 23. 12. dpmean (parameter) = number of decimal places for the mean 24. 13. dpcont (parameter) = number of dec. places for the corner means (optional) (def. = 3) 25. 14. qual (string) = a subset/except qualification 26. Output: 27. A contour plot 28. 29. -----start point----- 30. 31feedback save 32feedback off 33printing off 34let bugswcp = 0 35. let pausesw = 1 36. 37if bugswcp = 1; print " "; print "--At beginning of DEX Step 10 (DEXCP.DP)" 38 print "contourh contourv = ^contourh ^contourv" 39 print "meancent ncent = ^meancent ^ncent" 40 print "confdone = ^confdone" 41 print "steft1 steft2 = ^steft1 ^steft2" 42 if pausesw = 1; pause; end if 43 . feedback on 44end if 45. 46. ------------------------------------------- 47. -----Do Analysis Ste p 10: Contour Plot----- 48. ------------------------------------------- 49. 50x3label 51. 52. -----Step 1.1: Check for missing input values----- 53. 54if bugswcp = 1; print "--At (dexcp.dp, step 1.1): check input" 55 if pausesw = 1; pause; end if 56end if 57. 58let string stmacro = dexcp.dp 59if k not exist 60 call determine_k.dp 61end if 62set check name output filliben 63set check length output filliben 64feedback on 65let iflag = check name k y x1 to x^k 66let iflag = check equal length y x1 to x^k 67feedback off 68. 69. -----Step 1.2: Since dexcp.dp will use center points for validation (if they 70. have center points), extract such center points here----- 71. 72if bugswcp = 1; print "--At (dexcp.dp, step 1.2): extract center points" 73 if pausesw = 1; pause; end if 74end if 75. 76. print tagcent tagjunk 77. pause 78call extract_center_points.dp 79. 80. -----Step 1.3: Copy the user's original y and x1 to xk data out to file----- 81. since y and x1 to xk may potentially be modified within this macro----- 82. 83if bugswcp = 1; print "--At (dexcp.dp, step 1.3): save original data" 84 if pausesw = 1; pause; end if 85end if 86. 87set write format 40f15.7 88write dex_original_data.dat y x1 to x^k 89set write format 90. 91. -----Step 1.4: Check/Extract 2 levels, and map into -1 and +1----- 92. For this macro to work, the number of levels must be 1 or 2, 93. and the 2 levels must be -1 and +1. Check for this (and fix, if need be).----- 94. If not 2 levels, then only the min and max will be used herein.----- 95. If not -1 and +1, then min => -1 and max => +1----- 96. 97if bugswcp = 1; print "--At (dexcp.dp, step 1.4): normalize to (-1,+1)" 98 if pausesw = 1; pause; end if 99end if 100. 101let string stcall = dexcp.dp 102call check_and_fix_original_data_for_2_levels_and_m1_p1.dp 103. 104. -----Step 2: Define plot settings----- 105. 106if bugswcp = 1; print "--At (dexcp.dp, step 2): plot settings" 107 if pausesw = 1; pause; end if 108end if 109. 110call dexplotinit.dp 111. 112. -----Step 3: Compute effect estimates (ordered) and confounding----- 113. 114if bugswcp = 1; print "--At (dexcp.dp, step 3): confounding" 115 print "confsw = ^confsw" 116 if pausesw = 1; pause; end if 117end if 118. 119call compute_effect_estimates_and_confounding.dp 120. 121if bugswcp = 1; print "--At end of step 3 of dexcp.dp" 122 print "numeff = ^numeff" 123 loop for jzz = 1 1 numeff 124 print steft^jzz 125 end loop 126 if pausesw = 1; pause; end if 127end if 128. 129. -----Step 4: Extract the ID of the most important factor----- 130. 131if bugswcp = 1; print "--At (dexcp.dp, step 4): id of most imp. factor" 132 if pausesw = 1; pause; end if 133end if 134. 135. let effhor = effid1(1) 136let effhor = ^steft1 137let string ch = ^effhor 138let posint = ^ch 139. call digit.dp ;. replaced by digits command + sdigit macro 1/26/15 140let digitv = digits posint 141let numdigit = number digitv 142call sdigit.dp 143. 144let numdig1 = numdigit 145. 146let d1 = digitv(1) 147if numdig1 >= 2; let d2 = digitv(2); end if 148. 149if bugswcp = 1 150 print effid1 effid2 151 print effhor 152 print digitv 153 print numdig1 154 print posint 155 print d1 156 if pausesw = 1; pause; end if 157end if 158. 159. -----Step 5: Extract the ID of the second most important factor----- 160. 161if bugswcp = 1; print "--At (dexcp.dp, step 5): id of 2nd most imp. factor" 162 if pausesw = 1; pause; end if 163end if 164. 165. let effvert = effid1(2) 166let effvert = ^steft2 167let string ch = ^effvert 168let posint = ^ch 169. call digit.dp ;. replaced by digits command + sdigit macro 1/26/15 170let digitv = digits posint 171let numdigit = number digitv 172call sdigit.dp 173let numdig2 = numdigit 174let d3 = digitv(1) 175if numdig2 >= 2; let d4 = digitv(2); end if 176. 177if bugswcp = 1 178 print effvert 179 print digitv 180 print numdig2 181 print posint 182 print d1 d2 d3 d4 183 if pausesw = 1; pause; end if 184end if 185. 186. -----Step 6: Determine the ID (1 to k) (= hit1) for the vertical axis factor 187. ----- and (= hit2) for the horizontal axis factor.----- 188. ----- Also, form the 2 vert and horiz vectors u1 and u2----- 189. 190if bugswcp = 1; print "--At (dexcp.dp, step 6): factor id for vert. axis" 191 if pausesw = 1; pause; end if 192end if 193. 194if contourh not exist and contourv not exist 195 if bugswcp = 1 196 print "k = ^k" 197 print numdig1 numdig2 198 if d1 exists; print d1; end if 199 if d2 exists; print d2; end if 200 if d3 exists; print d3; end if 201 if d4 exists; print d4; end if 202 end if 203 . 204 let trace = 0 205 . 206 . ---Step 6.1: Treat the k <= 9 (= 1-digit) case----- 207 . 208 if bugswcp = 1; print "--At (dexcp.dp, step 6.1): test for k <= 9 case" 209 if pausesw = 1; pause; end if 210 end if 211 . 212 if k <= 9 213 . 214 if bugswcp = 1 215 print "dexcpd.dp: at beginning of treating the k <= 9 case" 216 print "k = ^k" 217 print numdig1 numdig2 218 print d1 d2 d3 d4 219 if ibatch not exist or ibatch = 0; pause; end if 220 end if 221 . 222 if numdig1 = 1; if numdig2 = 1 223 let hit1 = d1; let hit2 = d3 224 let trace = 9.1 225 end if; end if 226 . 227 if numdig1 = 1; if numdig2 >= 2 228 let hit1 = d1; let hit2 = d3 229 if d1 = d3; let hit1 = d1; let hit2 = d4; end if 230 if d1 = d4; let hit1 = d1; let hit2 = d3; end if 231 let trace = 9.2 232 end if; end if 233 . 234 if numdig1 >= 2; if numdig2 = 1 235 let hit1 = d1; let hit2 = d2 236 if d1 = d3; let hit1 = d1; let hit2 = d2; end if 237 if d2 = d3; let hit1 = d2; let hit2 = d1; end if 238 let trace = 9.3 239 end if; end if 240 . 241 if numdig1 >= 2; if numdig2 >= 2 242 let hit1 = d1; let hit2 = d2 243 if d1 = d3; let hit1 = d1; let hit2 = d2; end if 244 if d1 = d4; let hit1 = d1; let hit2 = d2; end if 245 if d2 = d3; let hit1 = d2; let hit2 = d1; end if 246 if d2 = d4; let hit1 = d2; let hit2 = d1; end if 247 let trace = 9.4 248 end if; end if 249 . 250 let u1 = x^hit1 251 let u2 = x^hit2 252 . 253 if bugswcp = 1 254 print "dexcp.dp: at end of treating the k <= 9 case" 255 print "k = ^k" 256 print prod12 prod34 257 print u1 u2 258 if ibatch not exist or ibatch = 0; pause; end if 259 end if 260 end if 261 . 262 if bugswcp = 1; 263 print "--At end of step 6 of dexcp.dp" 264 print "trace = ^trace" 265 if pausesw = 1; pause; end if 266 end if 267 . 268 . ---Step 6.2: Treat the k >= 10 (= 2-digit) case----- 269 . 270 if bugswcp = 1; print "--At (dexcp.dp, step 6.2): test for k >= 10 case" 271 if pausesw = 1; pause; end if 272 end if 273 . 274 if k >= 10 275 if bugswcp = 1 276 print "dexcpd.dp: at beginning of treating the k >= 10 case" 277 print "k = ^k" 278 print numdig1 numdig2 279 print d1 d2 d3 d4 280 if ibatch not exist or ibatch = 0; pause; end if 281 end if 282 . 283 if numdig1 = 1; if numdig2 = 1 284 let hit1 = d1; let hit2 = d3 285 let trace = 10.1 286 end if; end if 287 . 288 if numdig1 = 1; if numdig2 >= 2 289 let prod34 = 10*d3 + d4 290 if prod34 > k ;. hence word2 = a 2-term interaction 291 let hit1 = d1; let hit2 = d3 292 if d1 = d3; let hit1 = d1; let hit2 = d4; end if 293 if d1 = d4; let hit1 = d1; let hit2 = d3; end if 294 end if 295 if prod34 <= k ;. hence assume word2 = a single 2-digit factor 296 let hit1 = d1; let hit2 = prod34 297 end if 298 let trace = 10.2 299 end if; end if 300 . 301 if numdig1 >= 2; if numdig2 = 1 302 let prod12 = 10*d1 + d2 303 if prod12 > k ;. hence word1 = a 2-term interaction 304 let hit1 = d1; let hit2 = d2 305 if d1 = d3; let hit1 = d1; let hit2 = d2; end if 306 if d2 = d3; let hit1 = d2; let hit2 = d1; end if 307 end if 308 if prod12 <= k ;. hence assume word1 = a single 2-digit factor 309 let hit1 = prod12; let hit2 = d3 310 end if 311 let trace = 10.3 312 end if; end if 313 . 314 if numdig1 >= 2; if numdig2 >= 2 315 let prod12 = 10*d1 + d2 316 let prod34 = 10*d3 + d4 317 if prod12 > k; if prod34 > k ;. thus both words are 2-term interactions 318 let hit1 = d1; let hit2 = d2 319 if d1 = d3; let hit1 = d1; let hit2 = d2; end if 320 if d1 = d4; let hit1 = d1; let hit2 = d2; end if 321 if d2 = d3; let hit1 = d2; let hit2 = d1; end if 322 if d2 = d4; let hit1 = d2; let hit2 = d1; end if 323 let trace = 10.41 324 . print "hit1 hit2 = ^hit1 ^hit2" 325 . pause 326 end if; end if 327 . 328 if prod12 > k; if prod34 <= k ;. thus word 1 = 2TI & word 2 = 2-digit factor 329 let hit1 = d1; let hit2 = d2 330 let trace = 10.42 331 end if; end if 332 . 333 if prod12 <= k; if prod34 > k ;. thus word 1 = 2-digit factor & word2 = 2TI 334 let hit1 = 10*d1 + d2; let hit2 = d3 335 let trace = 10.43 336 end if; end if 337 . 338 if prod12 <= k; if prod34 <= k ;. thus word 1 and word 2 both = 2-digit factors 339 let hit1 = 10*d1 + d2; let hit2 = 10*d3 + d4 340 let trace = 10.44 341 end if; end if 342 end if; end if 343 . 344 let u1 = x^hit1 345 let u2 = x^hit2 346 . 347 if bugswcp = 1 348 print "dexcp.dp: at end of treating the k >= 10 case" 349 print "k = ^k" 350 print prod12 prod34 351 print hit1 hit2 352 print "trace = ^trace" 353 print u1 u2 354 if ibatch not exist or ibatch = 0; pause; end if 355 end if 356 end if 357end if 358. 359if contourh exists and contourv exists 360 let hit1 = contourh 361 let hit2 = contourv 362 let numdig1 = 1 363 let numdig2 = 1 364 let u1 = x^hit1 365 let u2 = x^hit2 366end if 367. 368if bugswcp = 1; print "--At end of step 6 of dexcp.dp" 369 print contourv contourh numdig1 numdig2 hit1 hit2 370 if pausesw = 1; pause; end if 371end if 372. 373. -----Step 7: Print out the subtitle immediately above the plot----- 374. 375if bugswcp = 1; print "--At (dexcp.dp, step 7): subtitle above plot" 376 if pausesw = 1; pause; end if 377end if 378. 379title: Contour Plot of 2 Dominant Factors: X^hit1 & X^hit2 380. 381if cx^hit1 exist and cx^hit2 exist 382 title: Contour Plot of 2 Dominant Factors: X^hit1 (^cx^hit1) & X^hit2 (^cx^hit2) 383end if 384. 385if cx^hit1 not exist and cx^hit2 not exist 386 if stx^hit1 exist and stx^hit2 exist 387 title: Contour Plot of 2 Dominant Factors: X^hit1 (^stx^hit1) & X^hit2 (^stx^hit2) 388 end if 389end if 390. 391. -----Step 8: Determine axis labels for the upcoming contour plot----- 392. 393if bugswcp = 1; print "--At (dexcp.dp, step 8): axis labels" 394 if pausesw = 1; pause; end if 395end if 396. 397. let bugswcp = 1 398. feedback on 399. echo on 400. 401if stx^hit2 exist 402 y1label X^hit2(^stx^hit2) 403 if cx^hit2 exist 404 y1label X^hit2(^cx^hit2) 405 end if 406else 407 y1label X^hit2 408 if cx^hit2 exist 409 y1label X^hit2(^cx^hit2) 410 end if 411end if 412. 413if stx^hit1 exist 414 x1label X^hit1(^stx^hit1) 415 if cx^hit1 exist 416 x1label X^hit1(^cx^hit1) 417 end if 418else 419 x1label X^hit1 420 if cx^hit1 exist 421 x1label X^hit1(^cx^hit1) 422 end if 423end if 424. 425. -----Step 9: Determine contour line values----- 426. 427. call determine_contour_line_values.dp 428. print ycont 429. pause 430. 431. -----Step 10: GENERATE THE PLOT----- 432. 433if bugswcp = 1; print "--At (dexcp.dp, step 10): GENERATE THE PLOT" 434 if pausesw = 1; pause; end if 435end if 436. 437label size labelsiz 438tic label size ticlabsi 439. print "labelsiz = ^labelsiz, ticlabsi = ^ticlabsi" 440. pause 441. 442if dpcp exists; let dpcont = dpcp; end if 443. <======================================== 444call dexcont.dp 445. <======================================== 446. 447. -----Step 11: Write out the contour line values----- 448. 449if bugswcp = 1; print "--At (dexcp.dp, step 11): Write contour line values" 450 if pausesw = 1; pause; end if 451end if 452. 453delete valcl tagcl numcl 454skip 0 455read dpst1f.dat valcl tagcl numcl 456. print tagcl valcl numcl 457. pause 458. 459retain xplot yplot tagplot subset yplot -2 to 2 460print junk1.out xplot yplot tagplot 461retain xplot yplot tagplot subset xplot -2 1.95 462print junk2.out xplot yplot tagplot 463. print xplot yplot tagplot 464. pause 465. 466let nxplot = number xplot 467. print "nxplot = ^nxplot" 468hw 2 1 469loop for jz = 1 1 nxplot 470 let xpj = xplot(jz) 471 let ypj = yplot(jz) 472 let tagpj = tagplot(jz) 473 delete junkv; let junkv = valcl 474 retain junkv subset tagcl tagpj 475 let cvj = junkv(1) 476 . print jz xpj ypj tagpj cvj 477 . pause 478 if xpj = -2; just lece; end if 479 if xpj = 1.95; just rice; end if 480 movedd xpj ypj; text ^cvj 481end loop 482. 483. -----Step 12: For the horizontal axis, write out the real values at -2 -1 0 1 2----- 484. 485if bugswcp = 1; print "--At (dexcp.dp, step 12): horiz. axis: -1 -1 0 1 2" 486 if pausesw = 1; pause; end if 487end if 488. 489if colorall exists; color ^colorall; end if 490. 491if stx1l1 exists 492 delete stjunka stjunkb 493 let string stjunka = stx^hit1&l1 494 let string out1 = ^^stjunka 495 if nlevv exist; let upperz = nlevv(^hit1); end if 496 if nlevv not exist; let upperz = number of words stx^hit1&l; end if 497 let string stjunkb = stx^hit1&l^upperz 498 let string out2 = ^stjunkb 499end if 500. 501if stx1l exists 502 delete stjunka stjunkb 503 let stjunka = string word stx^hit1&l 1 504 let string out1 = ^stjunka 505 if nlevv exist; let upperz = nlevv(^hit1); end if 506 if nlevv not exist; let upperz = number of words stx^hit1&l; end if 507 let stjunkb = string word stx^hit1&l upperz 508 let string out2 = ^stjunkb 509end if 510. 511if stx1l exists 512 let string staxissw = h 513 call dexcp_write_augmented_tic_labels.dp 514end if 515. 516. -----Step 12: For the vertical axis, write out the real values at -2 -1 0 1 2----- 517. 518if bugswcp = 1; print "--At (dexcp.dp, step 12): vert. axis: -2 -1 0 1 2" 519 if pausesw = 1; pause; end if 520end if 521. 522if stx1l1 exists 523 delete stjunka stjunkb 524 let string stjunka = stx^hit2&l1 525 let string out1 = ^^stjunk 526 if nlevv exist; let upperz = nlevv(^hit2); end if 527 if nlevv not exist; let upperz = number of words stx^hit2&l; end if 528 let string stjunkb = stx^hit2&l^upperz 529 let string out2 = ^stjunkb 530end if 531. 532if stx1l exists 533 delete stjunka stjunkb 534 let stjunka = string word stx^hit2&l 1 535 let string out1 = ^stjunka 536 if nlevv exist; let upperz = nlevv(^hit2); end if 537 if nlevv not exist; let upperz = number of words stx^hit2&l; end if 538 let stjunkb = string word stx^hit2&l upperz 539 let string out2 = ^stjunkb 540end if 541. 542if stx1l exists 543 let string staxissw = v 544 call dexcp_write_augmented_tic_labels.dp 545end if 546. 547. -----Step 13: Write out the model-based center-point predicted value in bottom margin of the plot 548. 549if bugswcp = 1; print "--At (dexcp.dp, step 13): write center point pred value" 550 if pausesw = 1; pause; end if 551end if 552. 553let ybar = mean y 554let dpmeanz = 4 555if dpmean exists; let dpmeanz = dpmean; end if 556set write decimals dpmeanz; let ybarr = number to string ybar 557hw texth textw 558move 50 07; just center; text Center-Point Predicted Value (From 2-Factor Edge-based Model) = ^ybarr 559. 560. -----Step 14: If center point data exists, then print out the mean value--- 561. and carry out a t test. if have 2 or more replicates----- 562. Needed: ncent, meancent, sdcent----- 563. 564if bugswcp = 1; print "--At (dexcp.dp, step 14): if cp exists, write comparison" 565 if pausesw = 1; pause; end if 566end if 567. 568if ycent exists 569 let ncent = number ycent 570 let meancent = mean ycent 571 let sdcent = sd ycent 572 let meancenr = number to string meancent 573 let sdcentr = number to string sdcent 574 . 575 if ncent = 1 576 move 50 05; just center; text Center Point Data: # Obs. = ^ncent, Mean = ^meancenr 577 end if 578 . 579 if ncent > 1.5 580 if colorall exists; color ^colorall; end if 581 move 50 05; just center; text Center Point Data: # Obs. = ^ncent, Mean = ^meancenr, SD(data) = ^sdcentr 582 end if 583 . 584 if ncent > 1.5 and sdcent > 0 585 let num = meancent - ybar 586 let num = abs(numer) 587 let denom = (1/(ncent**2)) + (1/(n**2)) 588 let denom = sdcent*sqrt(denom) 589 let tcent = num/denom 590 let tcent = abs(tcent) 591 let tcentr = round(tcent,2) 592 let dfcent = ncent-1 593 let tcutoff = tppf(0.975,dfcent) 594 let tcutoffr = round(tcutoff,2) 595 let string tconclus = Model is Adequate 596 if tcent > tcutoff; let string tconclus = Model Not Adequate; end if 597 move 15 01; just left; text t Test of Model Adequacy at Center Point: 598 move 47 01; just left; text |t stat| = ^tcentr tcutoff = ^tcutoffr Conclusion = ^tconclus 599 end if; end if 600end if 601. 602. -----Step 15: Write out project, (k,n), Step, annotate----- 603. 604if bugswcp = 1; print "--At (dexcp.dp, step 15): proj,(k,n),step,annotate" 605 if pausesw = 1; pause; end if 606end if 607. 608if project exists 609 if projcol exists; color ^projcol; end if 610 call dexwriteproject.dp 611end if 612. 613if step exists 614 let step = step + 1; hw 2 1; just left; move 5 95 615 . text Step ^step 616 . call tagcorn.dp 9/17/18/ 617 if stepprsw not exist 618 call tagcorn.dp 619 end if 620 if stepprsw exists; if stepprsw = 1 621 call tagcorn.dp 622 end if; end if 623end if 624. 625if step exists 626 call tagcorn.dp 627end if 628. 629if annotate exists; if annotate = 1 630 if colorall exists; color ^colorall; end if 631 call annotate.dp 632end if; end if 633. 634. -----Step 16: write out upper left---- 635. 636if bugswcp = 1; print "--At (dexcp.dp, step 16): upper left" 637 if pausesw = 1; pause; end if 638end if 639. 640if stcorn1 exists 641 call upperleft.dp 642end if 643. 644. -----Step 17: Write out right margin factor and setting info----- 645. 646if bugswcp = 1; print "--At (dexcp.dp, step 17): right margin" 647 if pausesw = 1; pause; end if 648end if 649. 650if rightmsw exists and rightmsw = 1 or rightmsw not exist 651 if stx1 exists and stx1l exists 652 call dexrightmargin.dp 653 end if 654end if 655. 656. -----Step 98: Restore the user's original y and x1 to xk data from file----- 657. 658if bugswcp = 1; print " "; print "---At (dexcp.dp, step 98): restore orig. data (pre-restore)" 659 print y x1 to x^k 660 if pausesw = 1; pause; end if 661end if 662. 663delete y x1 to x^k 664set read format 40f15.7 665skip 0; read dex_original_data.dat y x1 to x^k 666set read format 667. 668if bugswcp = 1; print " "; print "---At (dexcp.dp, step 98): (post-restore)" 669 print y x1 to x^k 670 if pausesw = 1; pause; end if 671end if 672. 673. -----Step 31: Form conclusions and write out to file----- 674. 675let step = 10 676call form_and_write_dex_10_step_conclusions.dp 677 678. -----Step 99: Finish up----- 679. 680if bugswcp = 1; print " "; print "---At end of dexcp.dp" 681 if pausesw = 1; pause; end if 682end if 683. 684just center 685title 686y1label 687x1label 688char hw 2 1 all 689char offset 0 0 all 690char justification cece all 691. 692delete digitv junkvar dxz 693. 694feedback restore 695. 696if itime exists and itime = 1 697 cpu time 698 let t10 = cputime 699 set write decimals 4 700 print t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 701 let tdiff1 = t1 - t0 702 loop for jz = 1 1 10 703 let jz2 = jz - 1 704 let tdiff^jz = t^jz - t^jz2 705 end of loop 706 print tdiff1 tdiff2 tdiff3 tdiff4 tdiff5 tdiff6 tdiff7 tdiff8 tdiff9 tdiff10 707end if 708. 709