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.