======================= T DE STUDENT ========================= 'st-test.bas 'Traduit par www.FreeNRG.info d'un programme PASCAL (ttest: Student's t-test) 'de chez: 'http://www.lecb.ncifcrf.gov/~toms/delila/delilaprograms.html DECLARE FUNCTION zip! (q AS SINGLE, i AS SINGLE, j AS SINGLE, b AS SINGLE) DECLARE FUNCTION buzz! (t AS SINGLE, n AS SINGLE) DECLARE FUNCTION ttestproba! (t AS SINGLE, ddl AS SINGLE) DECLARE SUB try (t AS SINGLE, ddl AS SINGLE) CONST ecran = 5, imprimante = 6 DIM sortie AS INTEGER DIM SHARED e AS SINGLE DIM SHARED pi AS SINGLE DIM SHARED pj2 AS SINGLE DIM SHARED pj4 AS SINGLE DIM SHARED pi2 AS SINGLE DIM SHARED dgr AS SINGLE e = EXP(1!) pi = 4! * ATN(1!) pj2 = pi / 2! pj4 = pi / 4! pi2 = pi * 2! dgr = 180! / pi CLS OPEN "scrn:" FOR RANDOM AS #ecran OPEN "lpt1:" FOR OUTPUT AS #imprimante sortie = ecran '''sortie = imprimante PRINT #sortie, "les valeurs devraient approcher 0.90:" try 3.078, 1 try 1.886, 2 try 1.638, 3 try 1.345, 14 try 1.3128, 28 try 1.3103, 30 PRINT #sortie, "" IF (sortie = ecran) THEN a$ = INPUT$(1) PRINT #sortie, "les valeurs devraient approcher 0.95:" try 6.314, 1 try 2.92, 2 try 2.353, 3 try 1.761, 14 try 1.701, 28 try 1.697, 30 PRINT #sortie, "" IF (sortie = ecran) THEN a$ = INPUT$(1) PRINT #sortie, "les valeurs devraient approcher 0.975:" try 12.706, 1 try 4.303, 2 try 3.182, 3 try 2.145, 14 try 2.048, 28 try 2.042, 30 PRINT #sortie, "" IF (sortie = ecran) THEN a$ = INPUT$(1) PRINT #sortie, "les valeurs devraient approcher 0.99:" try 31.821, 1 try 6.965, 2 try 4.541, 3 try 2.624, 14 try 2.467, 28 try 2.457, 30 PRINT #sortie, "" IF (sortie = ecran) THEN a$ = INPUT$(1) PRINT #sortie, "les valeurs devraient approcher 0.995:" try 63.7, 1 try 9.93, 2 try 5.84, 3 try 2.98, 14 try 2.76, 28 try 2.75, 30 PRINT #sortie, "" IF (sortie = ecran) THEN a$ = INPUT$(1) PRINT #sortie, "les valeurs devraient approcher 0.9995:" try 636.619, 1 try 31.598, 2 try 12.924, 3 try 4.14, 14 try 3.694, 28 try 3.646, 30 PRINT #sortie, "" END ' ' ' ' ' ' FUNCTION buzz! (t AS SINGLE, n AS SINGLE) 'var DIM rt AS SINGLE, fk AS SINGLE, ek AS SINGLE, dk AS SINGLE t = ABS(t) rt = t / SQR(n) fk = ATN(rt) IF (n = 1) THEN buzz! = 1 - fk / pj2 ELSE ek = SIN(fk) dk = COS(fk) ''IF ((round(n) MOD 2) = 1) THEN IF ((INT(n) MOD 2) = 1) THEN buzz! = 1 - (fk + ek * dk * zip!(dk * dk, 2, n - 3, -1)) / pj2 ELSE buzz! = 1 - ek * zip!(dk * dk, 1, n - 3, -1) END IF END IF END FUNCTION ' ' ' ' ' ' SUB try (t AS SINGLE, ddl AS SINGLE) DIM prob AS SINGLE SHARED sortie AS INTEGER prob = ttestproba!(t, ddl) PRINT #sortie, USING " t = ###.### "; t; PRINT #sortie, USING " ddl = ### "; ddl; PRINT #sortie, USING " P = #.#### (#.####) "; prob; 1! - prob END SUB ' ' ' ' ' ' FUNCTION ttestproba! (t AS SINGLE, ddl AS SINGLE) ttestproba! = 1! - (buzz(t, ddl) / 2!) END FUNCTION ' ' ' ' ' ' FUNCTION zip! (q AS SINGLE, i AS SINGLE, j AS SINGLE, b AS SINGLE) DIM k AS SINGLE, zz AS SINGLE, z AS SINGLE zz = 1 z = zz k = i WHILE (k <= j)'do zz = zz * q * k / (k - b) z = z + zz k = k + 2 WEND zip! = z END FUNCTION ======================= SORTIES DU PROGRAMME ========================= les valeurs devraient approcher 0.90: t = 3.078 ddl = 1 P = 0.9000 (0.1000) t = 1.886 ddl = 2 P = 0.9000 (0.1000) t = 1.638 ddl = 3 P = 0.9000 (0.1000) t = 1.345 ddl = 14 P = 0.9000 (0.1000) t = 1.313 ddl = 28 P = 0.9000 (0.1000) t = 1.310 ddl = 30 P = 0.9000 (0.1000) les valeurs devraient approcher 0.95: t = 6.314 ddl = 1 P = 0.9500 (0.0500) t = 2.920 ddl = 2 P = 0.9500 (0.0500) t = 2.353 ddl = 3 P = 0.9500 (0.0500) t = 1.761 ddl = 14 P = 0.9500 (0.0500) t = 1.701 ddl = 28 P = 0.9500 (0.0500) t = 1.697 ddl = 30 P = 0.9500 (0.0500) les valeurs devraient approcher 0.975: t = 12.706 ddl = 1 P = 0.9750 (0.0250) t = 4.303 ddl = 2 P = 0.9750 (0.0250) t = 3.182 ddl = 3 P = 0.9750 (0.0250) t = 2.145 ddl = 14 P = 0.9750 (0.0250) t = 2.048 ddl = 28 P = 0.9750 (0.0250) t = 2.042 ddl = 30 P = 0.9750 (0.0250) les valeurs devraient approcher 0.99: t = 31.821 ddl = 1 P = 0.9900 (0.0100) t = 6.965 ddl = 2 P = 0.9900 (0.0100) t = 4.541 ddl = 3 P = 0.9900 (0.0100) t = 2.624 ddl = 14 P = 0.9900 (0.0100) t = 2.467 ddl = 28 P = 0.9900 (0.0100) t = 2.457 ddl = 30 P = 0.9900 (0.0100) les valeurs devraient approcher 0.995: t = 63.700 ddl = 1 P = 0.9950 (0.0050) t = 9.930 ddl = 2 P = 0.9950 (0.0050) t = 5.840 ddl = 3 P = 0.9950 (0.0050) t = 2.980 ddl = 14 P = 0.9950 (0.0050) t = 2.760 ddl = 28 P = 0.9950 (0.0050) t = 2.750 ddl = 30 P = 0.9950 (0.0050) les valeurs devraient approcher 0.9995: t = 636.619 ddl = 1 P = 0.9995 (0.0005) t = 31.598 ddl = 2 P = 0.9995 (0.0005) t = 12.924 ddl = 3 P = 0.9995 (0.0005) t = 4.140 ddl = 14 P = 0.9995 (0.0005) t = 3.694 ddl = 28 P = 0.9995 (0.0005) t = 3.646 ddl = 30 P = 0.9995 (0.0005)