Il semble que ce qui est recherché soit une distribution uniforme sur un disque, que je considérerai comme (l'intérieur du) cercle unitaire. On peut paramétrer par donc on a et . Nous pouvons laisser avoir une distribution uniforme, indépendante de , et devons trouver la distribution de qui donne une distribution uniforme sur le cercle. Puisque la probabilité doit être proportionnelle à l'aire, nous avons pour que
et en prenant , donne(r,θ)0≤r≤10≤θ≤2πθRR0≤a≤b≤1
P(a≤R≤b)∝πb2−πa2
a=0b=1FR(r)=r2. Alors la densité est la dérivée . La densité conjointe de et devient alors
Ceci est facile à simuler à partir de la somme de deux indépendants les uniformes ont une distribution triangulaire (et symétrique), parfois décrite comme une distribution «en tente». Nous voulons seulement la partie gauche de la tente, que nous pouvons obtenir en reflétant la distribution sur une ligne verticale en haut (mode) de la tente. Simuler cela dans R donne:
fR(r)=2rRθf(r,θ)=12π⋅2r=rπ
Le code R de la simulation est:
set.seed(7*11*13)
rleft_tri <- function(n) {
T <- runif(n)+runif(n)
val <- ifelse(T <= 1,T, 2-T)
val
}
rdisk <- function(n) {
val <- cbind( rleft_tri(n), 2*pi*runif(n) )
colnames(val) <- c("R","Theta")
val
}
#
library(plotrix)
par(bg="antiquewhite")
points <- rdisk(10000) plot(c(-1,1),c(-1,1),type="n",axes=FALSE,xlab="",ylab="",xlim=c(-1.1,1.1),ylim=c(-1.1,1.1))
draw.circle(x=c(0,0),y=c(0,0),radius=1,col="aquamarine")
points(with(as.data.frame(points),cbind(R*cos(Theta), R*sin(Theta))),pch=".",col="red",cex=2)
Notez qu'il s'agit d'un cas particulier de l'ancienne réponse de @Greg Snow, car la distribution «tente gauche» est une distribution bêta avec les paramètres . Mais le code ci-dessus pour le simuler est probablement plus rapide que le code général pour simuler à partir d'une version bêta (ou le serait s'il était programmé en C).a=2,b=1