Intervalle de fluctuation d’une loi binomiale avec R

Présentation

Soit X une variable aléatoire suivant une loi binomiale de paramètres

$(n ; p)$.

On cherche l’intervalle de fluctuation au seuil de 95%.

En début de script, on fixe les paramètres.

En sortie, on obtient :
– le détail pour l’obtention de $a$ et $b$ ;
– l’intervalle \left[ \frac{a}{n} ; \frac{b}{n}\right] ;
– les diagrammes en bâtons associés.

Le script

#------------------------------------ A modifier
n<-20
p<-0.4


#-----------------------------------------------
# Calcul de a

i<-0
sommeProba<-pbinom(q=i,size=n,prob=p)

while (sommeProba<=0.025)
{
  i<-i+1
  sommeProba<-pbinom(q=i,size=n,prob=p)
}
a<-i
 
texte<-paste("p(X <=", bquote( .(a-1)),  ") = ", bquote( .(pbinom(q=a-1,size=n,prob=p))))
print(texte)
texte<-paste("p(X <=", bquote( .(a)),   ") = ", bquote( .(pbinom(q=a,size=n,prob=p))))
print(texte)
texte<-paste("a = ", bquote( .(a)))
print(texte)

#-------------------------------------------------
# Calcul de b

i<-0
sommeProba<-pbinom(q=i,size=n,prob=p)

while (sommeProba<0.975)
{
  i<-i+1
  sommeProba<-pbinom(q=i,size=n,prob=p)
}
b<-i
texte<-paste("p(X <=", bquote( .(b-1)),   ") = ", bquote( .(pbinom(q=b-1,size=n,prob=p))))
print(texte)
texte<-paste("p(X <=", bquote( .(b)),   ") = ", bquote( .(pbinom(q=b,size=n,prob=p))))
print(texte)
texte<-paste("b = ", bquote( .(b)))
print(texte)

#-----------------------------------------------
# Calcul de l'intervalle de fluctuation

print("Intervalle de fluctuation au seuil de 95%")

texte<-paste("a/n = ", bquote( .(a/n)))
print(texte)
texte<-paste("b/n = ", bquote( .(b/n)))
print(texte)


# Création du tableau des densités

x<-0:n

tabDensite<-NULL
for (i in x)  {tabDensite<-c(tabDensite,dbinom(i,n,p))}

# Creation des textes


texteTitre<-paste("Loi binomiale", "\n"
                  , "n = ", bquote( .(n)),"\n"
                  , "p = ", bquote( .(p)),"\n"
                  
                  )


# Création du diagramme en bâtons des densités


bp<-barplot(rbind(tabDensite),beside=TRUE,las=1,names.arg=x,
        col=c(rep("red",a),rep("blue",b-a+1),rep("red",n-b))
        ,ylim=c(0,0.25)
        ,xlab="k",ylab="P(X = k)",main=texteTitre,cex.main=0.8)

texte.a<-paste("a = ", bquote( .(a)))
text(x=bp[a+1],y=0.2,texte.a,pos=2)


texte<-bquote( .(round(sum(dbinom(0:(a-1),n,p)),digits=3)))
text(x=bp[a+1],y=0.23,texte,pos=2,col="red")

texte.b<-paste("b = ", bquote( .(b)))
text(x=bp[b+1],y=0.2,texte.b,pos=4)


texte<-bquote( .(round(sum(dbinom((b+1):n,n,p)),digits=3)))
text(x=bp[b+1],y=0.23,texte,pos=4,col="red")


texte<-bquote( .(round(sum(dbinom(a:b,n,p)),digits=3)))
text(x=bp[round((a+b)/2)],y=0.23,texte,col="blue")

segments(bp[a+1],0,bp[a+1],0.25,lty=2)
segments(bp[b+1],0,bp[b+1],0.25,lty=2)


# Création du tableau des densités cumulés

tabDensitesCumulees<-NULL
for (i in x)  {tabDensitesCumulees<-c(tabDensitesCumulees,pbinom(i,n,p))}

# Création du diagramme en bâtons des densitées cumulées


bp<-barplot(rbind(tabDensitesCumulees),beside=TRUE,las=1,names.arg=x,
            col=c(rep("red",a),rep("blue",b-a+1),rep("red",n-b))
            ,ylim=c(0,1)
            ,xlab="k",ylab="P(X <= k)",main=texteTitre,cex.main=0.8)

#texte.a<-bquote( .(round(sum(dbinom(a:b,n,p)),digits=3)))
#text(bp[round((a+b)/2)],y=0.9,texte.a,col="blue")

segments(bp[a+1],0,bp[a+1],1,lty=2)
segments(bp[b+1],0,bp[b+1],1,lty=2)

segments(bp[1],0.025,bp[n+1],0.025,lty=2)
segments(bp[1],0.975,bp[n+1],0.975,lty=2)

Dans la console, on obtient :


[1] "p(X <= 3 ) = 0.0159611627900082"
[1] "p(X <= 4 ) = 0.0509519531941666"
[1] "a = 4"
[1] "p(X <= 11 ) = 0.943473632965747"
[1] "p(X <= 12 ) = 0.978971072522229"
[1] "b = 12"
[1] "Intervalle de fluctuation au seuil de 95%"
[1] "a/n = 0.2"
[1] "b/n = 0.6"

loi_binomiale_05.png

loi_binomiale_06.png