Subversion Repositories wimsdev

Rev

Rev 4161 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
!if $wims_read_parm!=slib_header
2
!goto proc
3
!endif
4
slib_title=Quantile of hypergeometric law inverse
5
slib_parms=4\
6
,[data]\
7
,N\
8
,K\
9
,n
10
 
11
slib_author=Bernadette PERRIN-RIOU
12
slib_out=quantile at data
13
slib_comment=data can be a list of reals
14
P(X=i)=binomial(K,i)*binomial(N-K,i)/binomial(N,n)
15
slib_example=[0.2,0.4,0.7],10,5,7
16
!exit
17
 
18
:proc
19
 
20
!distribute  item $wims_read_parm into slib_data,slib_N,slib_K,slib_n
21
 
22
slib_out=
23
slib_data=!declosing $slib_data
24
 
25
slib_cnt= !itemcnt $slib_data
26
slib_b= $[binomial($slib_N,$slib_n)^(-1)]
27
slib_min= $[max(0,$slib_n+$slib_K-$slib_N)]
28
slib_max= $[min($slib_n,$slib_K)]
29
!if $slib_max<$slib_min
30
	slib_out=0
31
	!exit
32
!endif
33
slib_out=
34
slib_PP=!values binomial($slib_K,x)*binomial($slib_N-$slib_K,$slib_n-x)*$slib_b for x = $slib_min to $slib_max
35
!for slib_i in $slib_data
36
  !if $slib_i =1 
37
   slib_out=!append item  $[$slib_max -$slib_min+1] to $slib_out
38
  !else
39
	 slib_P=0
40
	 !for slib_k= 1 to $[$slib_max -$slib_min+1]
41
		slib_a=!item $slib_k of $slib_PP
42
		slib_P=$[$slib_P+$slib_a]
43
		!if $slib_P>= $slib_i
44
			slib_out=!append item  $[$slib_k-1] to $slib_out
45
			!break
46
		!endif
47
	!next slib_k
48
 !endif
49
!next slib_i
50
 
51
slib_out=!trim $slib_out