Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: in search of a formula for calculating confidence intervals

Author: Dann Corbit

Date: 13:10:36 01/17/06

Go up one level in this thread


On January 17, 2006 at 03:52:21, Joseph Ciarrochi wrote:

>Does anybody have the formula for calculating standard error bars for win
>percentages? e.g., given a a sample of N, and an observed win rate of x %, I 'd
>like to construct a 95% confidence interval around x.
>
>It would also be cool if you had the formula for calculating confidence
>intervals for ratings?

This is a good place for simple math questions:
http://mathworld.wolfram.com/letters/

In your case, click on "C"
followed by "Confidence Interval"
to get the basic information.

Does not seem to be much on actual calculation on that link, however (usually
there is enough).  They only cover the continuous example that uses intervals
and you will want the discrete, I imagine.

Also interesting:
http://ewr.cee.vt.edu/environmental/teach/smprimer/intervals/interval.html

Here is some ancient FORTRAN I wrote to calculate (among other things)
confidence and prediction intervals:

$nofloatcalls
$PAGESIZE:50
$DEBUG
$STORAGE:2
      SUBROUTINE GLLIN(NUMSET,NPTS)
C
C FIND LEAST SQUARES LINE FIT
C
      IMPLICIT REAL*8 (A-Z)
      INTEGER COUNT,CNT
      REAL*4 CHISQR,TOL,NEXTX,CONST
      REAL*8 VECTOR(101,2),CHITAB(6)
      INTEGER*2 GGPCT,VPLINE,VSLTYP,VSLCOL,XM,YM,H,LINLEN(6,5),L
      INTEGER*4 ERR,NMIN2
      integer*2 linout(200),IND1,IND2,IND3,IND4,CLR
      INTEGER*2 I,POINTS,NPTS(6),J,NUMSET,ITYPE3,K,VECOUT(200,6,5),X0,Y0
$INCLUDE:'ENVD.BLK'
$INCLUDE:'ENVRS.BLK'
$INCLUDE:'ENVRT.BLK'
$INCLUDE:'LNEEDS.BLK'
      COMMON /XG04/ VECTOR
      COMMON /XG05/ VECOUT
      COMMON /XG63/ I,POINTS,SSX,SSXY,SUMX,SUMXSQ,SUMXY,SUMY,SUMYSQ,
     .              XBAR,YBAR
      X0 = GGPCT(BLX,0) + IXMIN
      Y0 = GGPCT(BLY,1) + IYMIN
      XM = GGPCT(BUX,0) + IXMIN
      YM = GGPCT(BUY,1) + IYMIN
      DO 15 I=1,NUMSET
         DO 20 J=1,NPTS(I)
            VECTOR(1,1)=DBLE(FLOAT(NPTS(I)))
            VECTOR(J+1,1)=DBLE(GGPCT(RHBUFF(J,I),0) + X0)
            VECTOR(J+1,2)=DBLE(GGPCT(RVBUFF(J,I),1) + Y0)
20       CONTINUE
      POINTS=IDNINT(VECTOR(1,1))
      IF (POINTS.EQ.1) GO TO 15
      SUMX=0.0D00
      SUMY=0.0D00
      SUMXY=0.0D00
      SUMXSQ=0.0D00
      SUMYSQ=0.0D00
      DO 10 K=2,POINTS+1
         SUMX=SUMX+VECTOR(K,1)
         SUMY=SUMY+VECTOR(K,2)
         SUMXY=SUMXY+VECTOR(K,1)*VECTOR(K,2)
         SUMXSQ=SUMXSQ+VECTOR(K,1)*VECTOR(K,1)
         SUMYSQ=SUMYSQ+VECTOR(K,2)*VECTOR(K,2)
10    CONTINUE
      FINV = 1./VECTOR(1,1)
      SSX=SUMXSQ-SUMX*SUMX*FINV
      SSXY=SUMXY-SUMX*SUMY*FINV
      SSY=SUMYSQ-SUMY*SUMY*FINV
      YBAR=SUMY*FINV
      XBAR=SUMX*FINV
      IF (SSX.NE.0.0) THEN
         SLOPE=SSXY/SSX
         NTRCPT=YBAR-SLOPE*XBAR
         SSE=SSY-SLOPE*SSXY
         NM2=VECTOR(1,1)-2
         IF (NM2.GE.1)THEN
            SSQ=SSE/NM2
            S=DSQRT(SSQ)
         ENDIF
         IF (SSY.NE.0) THEN
            R=SSXY/SQRT(SSX*SSY)
            RSQ=R*R
         ENDIF
      ELSE
         SLOPE=9.9E25
         NTRCPT=XBAR
      ENDIF
      NMIN2 = NPTS(I) - 2
      IF (NPTS(I).LE.2) R E T U R N
      TOL = .05
      CALL MDSTI(TOL,NMIN2,CHISQR,ERR)
      CHITAB(I) = DBLE(CHISQR)
      CONST = FLOAT(XM-X0)*.0096
      NEXTX = CONST*2.083333333 + FLOAT(X0)
      IND1 = 1
      IND2 = 1
      IND3 = 1
      IND4 = 1
      PART = CHITAB(I)*S
      DO 200 J = 1, 199, 2
C
C INCREMENT X
C
         NEXTX = NEXTX + CONST
C
C MAKE CONFIDENCE +/- LINES
C
         X0SQ = (NEXTX-XBAR)*(NEXTX-XBAR)
         IF (SSX .NE. 0) THEN
            TERM = PART*DSQRT(1./FLOAT(NPTS(I)) + X0SQ/SSX)
         ELSE
            TERM = 0
         ENDIF
         Y = SLOPE*NEXTX + NTRCPT
         IF (.NOT.CONFDN) GO TO 1000
C
C CONFIDENCE UPPER LIMIT
C
         H = NINT(NEXTX)
         KK = Y + TERM
         IF((KK.GT.Y0).AND.(KK.LT.YM))THEN
            K = NINT(Y + TERM)
            VECOUT(IND1,I,1) = H
            VECOUT(IND1+1,I,1) = K
            IND1 = IND1 + 2
         ENDIF
C
C CONFIDENCE LOWER LIMIT
C
         LL = Y - TERM
         IF ((LL.GT.Y0).AND.(LL.LT.YM))THEN
            L = NINT(Y - TERM)
            VECOUT(IND2,I,2) = H
            VECOUT(IND2+1,I,2) = L
            IND2 = IND2 + 2
         ENDIF
1000     CONTINUE
         IF (.NOT.PREDTN) GO TO 2000
C
C MAKE PREDICTION +/- LINES
C
         IF (SSX .NE. 0) THEN
            TERM = PART*DSQRT(1./FLOAT(NPTS(I)) + X0SQ/SSX + 1.)
         ELSE
            TERM = 0
         ENDIF
C
C PREDICTION HIGH GUESS
C
         KK = Y + TERM
         IF((KK.GT.Y0).AND.(KK.LT.YM))THEN
            K = NINT(Y + TERM)
            VECOUT(IND3,I,3) = H
            VECOUT(IND3+1,I,3) = K
            IND3 = IND3 + 2
         ENDIF
C
C PREDICTION LOW GUESS
C
         LL = Y - TERM
         IF ((LL.GT.Y0).AND.(LL.LT.YM))THEN
            L = NINT(Y - TERM)
            VECOUT(IND4,I,4) = H
            VECOUT(IND4+1,I,4) = L
            IND4 = IND4 + 2
         ENDIF
2000     CONTINUE
200   CONTINUE
      LINLEN(I,1) = (IND1 + 1)*.5
      LINLEN(I,2) = (IND2 + 1)*.5
      LINLEN(I,3) = (IND3 + 1)*.5
      LINLEN(I,4) = (IND4 + 1)*.5
15    CONTINUE
      DO 300 I = 1,NUMSET
         DO 400 J = 1,4
            CLR = MOD(I,WORKOT(40))+1
            ERR = VSLCOL(DEVHDL,CLR)
            IF (J.LT.3) THEN
               IF (CONFDN) THEN
                  ERR = VSLTYP(DEVHDL,3)
                  ERR = VPLINE(DEVHDL,LINLEN(I,J)-1,VECOUT(1,I,J))
               ENDIF
            ELSE
               IF (PREDTN) THEN
                  ERR = VSLTYP(DEVHDL,2)
                  ERR = VPLINE(DEVHDL,LINLEN(I,J)-1,VECOUT(1,I,J))
               ENDIF
            ENDIF
400      CONTINUE
300   CONTINUE
      R E T U R N
      END



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.