STMOM3 Subroutine

public subroutine STMOM3(X, N, Iwrite, Xsmom3)

NAME

stmom3(3f) - [M_datapac:STATISTICS] compute the third central moment
(i.e., the skewness) of a vector of observations

SYNOPSIS

   SUBROUTINE STMOM3(X,N,Iwrite,Xsmom3)

DESCRIPTION

stmom3(3f) computes the sample standardized third central moment of
the data in the input vector x.

the sample standardized third central moment = (the sample third
central moment)/((the sample standard deviation)**3).

n (rather than n-1) has been used in the denominator in the calculation
of both the sample third central moment and the sample standard
deviation.

OPTIONS

 X   description of parameter
 Y   description of parameter

EXAMPLES

Sample program:

program demo_stmom3
use M_datapac, only : stmom3
implicit none
! call stmom3(x,y)
end program demo_stmom3

Results:

AUTHOR

The original DATAPAC library was written by James Filliben of the
Statistical Engineering Division, National Institute of Standards
and Technology.

MAINTAINER

John Urban, 2022.05.31

LICENSE

CC0-1.0

REFERENCES

  • Kendall and Stuart, the Advanced Theory of Statistics, Volume 1, Edition 2, 1963, pages 85, 234, 243, 297-298, 305.
  • Snedecor and Cochran, Statistical Methods, Edition 6, 1967, pages 86-90.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), dimension(:) :: X
integer :: N
integer :: Iwrite
real(kind=wp) :: Xsmom3

Source Code

      SUBROUTINE STMOM3(X,N,Iwrite,Xsmom3)
REAL(kind=wp) :: an , hold , sum , sum2 , sum3 , vb , X , xmean , Xsmom3
INTEGER :: i , Iwrite , N
!
!     INPUT ARGUMENTS--X      = THE  VECTOR OF
!                                (UNSORTED OR SORTED) OBSERVATIONS.
!                     --N      = THE INTEGER NUMBER OF OBSERVATIONS
!                                IN THE VECTOR X.
!                     --IWRITE = AN INTEGER FLAG CODE WHICH
!                                (IF SET TO 0) WILL SUPPRESS
!                                THE PRINTING OF THE
!                                SAMPLE STANDARDIZED THIRD CENTRAL
!                                MOMENT AS IT IS COMPUTED;
!                                OR (IF SET TO SOME INTEGER
!                                VALUE NOT EQUAL TO 0),
!                                LIKE, SAY, 1) WILL CAUSE
!                                THE PRINTING OF THE
!                                SAMPLE STANDARDIZED THIRD CENTRAL
!                                MOMENT AT THE TIME IT IS COMPUTED.
!     OUTPUT ARGUMENTS--XSMOM3 = THE  VALUE OF THE
!                                COMPUTED SAMPLE STANDARDIZED THIRD
!                                CENTRAL MOMENT.
!     OUTPUT--THE COMPUTED  VALUE OF THE
!             SAMPLE STANDARDIZED THIRD CENTRAL MOMENT.
!     PRINTING--NONE, UNLESS IWRITE HAS BEEN SET TO A NON-ZERO
!               INTEGER, OR UNLESS AN INPUT ARGUMENT ERROR
!               CONDITION EXISTS.
!     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
!                   OF N FOR THIS SUBROUTINE.
!     MODE OF INTERNAL OPERATIONS--.
!     ORIGINAL VERSION--JUNE      1972.
!     UPDATED         --SEPTEMBER 1975.
!     UPDATED         --NOVEMBER  1975.
!
!---------------------------------------------------------------------
!
      DIMENSION X(:)
!
!     CHECK THE INPUT ARGUMENTS FOR ERRORS
!
      an = N
      IF ( N<1 ) THEN
         WRITE (G_IO,99001)
99001    FORMAT (' ',                                                   &
     &'***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE STMOM3 SUBROU&
     &TINE IS NON-POSITIVE *****')
         WRITE (G_IO,99002) N
99002    FORMAT (' ','***** THE VALUE OF THE ARGUMENT IS ',I0,' *****')
         RETURN
      ELSE
         IF ( N==1 ) THEN
            WRITE (G_IO,99003)
99003       FORMAT (' ',                                                &
     &'***** NON-FATAL DIAGNOSTIC--THE SECOND INPUT ARGUMENT TO THE STMO&
     &M3 SUBROUTINE HAS THE VALUE 1 *****')
            Xsmom3 = 0.0_wp
         ELSE
            hold = X(1)
            DO i = 2 , N
               IF ( X(i)/=hold ) GOTO 50
            ENDDO
            WRITE (G_IO,99004) hold
99004       FORMAT (' ',                                                &
     &'***** NON-FATAL DIAGNOSTIC--THE FIRST  INPUT ARGUMENT (A VECTOR) &
     &TO THE STMOM3 SUBROUTINE HAS ALL ELEMENTS = ',E15.8,' *****')
            Xsmom3 = 0.0_wp
         ENDIF
         GOTO 100
!
!-----START POINT-----------------------------------------------------
!
 50      sum = 0.0_wp
         DO i = 1 , N
            sum = sum + X(i)
         ENDDO
         xmean = sum/an
         sum2 = 0.0_wp
         sum3 = 0.0_wp
         DO i = 1 , N
            sum2 = sum2 + (X(i)-xmean)**2
            sum3 = sum3 + (X(i)-xmean)**3
         ENDDO
         sum3 = sum3/an
         vb = sum2/an
         Xsmom3 = sum3/(vb**1.5_wp)
      ENDIF
!
 100  IF ( Iwrite==0 ) RETURN
      WRITE (G_IO,99005)
99005 FORMAT (' ')
      WRITE (G_IO,99006) N , Xsmom3
99006 FORMAT (' ',                                                      &
     &        'THE SAMPLE STANDARDIZED THIRD  CENTRAL MOMENT FOR THE ', &
     &        I0,' OBSERVATIONS IS ',E15.8)
END SUBROUTINE STMOM3