'************************************************************ '* This program calculates the statistical moments of a * '* distribution: Mean, Variance, Skewness, etc. * '* -------------------------------------------------------- * '* Ref.: "Numerical Recipes, by W.H. Press, B.P. Flannery, * '* S.A. Teukolsky and T. Vetterling, Cambridge * '* University Press, 1986". * '* * '* Basic Release By J-P Moreau, Paris. * '* -------------------------------------------------------- * '* SAMPLE RUN: * '* * '* Number of data: 5 * '* 1: ? 12 * '* 2: ? 9 * '* 3: ? 7 * '* 4: ? 15 * '* 5: ? 6 * '* * '* Average ..........: 9.800000000000001 * '* Average Deviation: 2.96 * '* Standard Deviation: 3.701351104664349 * '* Variance .........: 13.7 * '* Skewness .........: 0.291548695888740 * '* Kurtosis .........: -1.907799030315947 * '* * '************************************************************ 'Program TMOMENT DEFDBL A-H, O-Z DEFINT I-N ' integer n 'double ave,adev,sdev,var,skew,curt CLS PRINT INPUT " Number of data: ", n DIM data0(n) FOR i = 1 TO n PRINT " "; i; ": "; : INPUT "", data0(i) NEXT i GOSUB 1000 'call Moment(data0,n,ave,adev,sdev,var,skew,curt) ' print results PRINT PRINT " Average ..........: "; ave PRINT " Average Deviation: "; adev PRINT " Standard Deviation: "; sdev PRINT " Variance .........: "; var PRINT " Skewness .........: "; skew PRINT " Kurtosis .........: "; curt PRINT END 'of main program '************************************************************ '* Given an array of data of length n, this routine returns * '* its mean ave, average deviation adev, standard deviation * '* sdev, variance var, skewness skew, and kurtosis curt. * '************************************************************ 1000 'Sube Moment(data0,n,ave,adev,sdev,var,skew,curt) ' integer n ' real*8 data0(n), ave,adev,sdev,var,skew,curt, p,s IF n <= 1 THEN PRINT " N must be at least 2!" RETURN END IF s = 0# FOR j = 1 TO n s = s + data0(j) NEXT j ' calculate mean ave = s / n adev = 0# var = 0# skew = 0# curt = 0# FOR j = 1 TO n s = data0(j) - ave adev = adev + ABS(s) p = s * s var = var + p p = p * s skew = skew + p p = p * s curt = curt + p NEXT j adev = adev / n var = var / (n - 1) sdev = SQR(var) IF var <> 0# THEN skew = skew / (n * sdev ^ 3) curt = curt / (n * var ^ 2) - 3# ELSE PRINT " No skew or kurtosis when zero variance." END IF RETURN 'end of file tmoment.bas