Je voulais juste réaliser une simulation réelle en complément à la (à juste titre) accepté réponse . Bien que dans R, le code soit si simple qu'il soit pseudo-pseudo-code.
Une petite différence entre le Wolfram MathWorld formula dans la réponse acceptée et d'autres, peut-être plus fréquentes, des équations est le fait que l'exposant de loi de puissance n
(qui est généralement désigné comme alpha) ne porte pas de signe négatif explicite. Donc la valeur alpha choisie doit être négative, et typiquement entre 2 et 3.
x0
et x1
représentent les limites inférieure et supérieure de la distribution.
Alors voici:
x1 = 5 # Maximum value
x0 = 0.1 # It can't be zero; otherwise X^0^(neg) is 1/0.
alpha = -2.5 # It has to be negative.
y = runif(1e5) # Number of samples
x = ((x1^(alpha+1) - x0^(alpha+1))*y + x0^(alpha+1))^(1/(alpha+1))
hist(x, prob = T, breaks=40, ylim=c(0,10), xlim=c(0,1.2), border=F,
col="yellowgreen", main="Power law density")
lines(density(x), col="chocolate", lwd=1)
lines(density(x, adjust=2), lty="dotted", col="darkblue", lwd=2)
ou tracé en échelle logarithmique:
h = hist(x, prob=T, breaks=40, plot=F)
plot(h$count, log="xy", type='l', lwd=1, lend=2,
xlab="", ylab="", main="Density in logarithmic scale")
Voici le résumé des données:
> summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.1000 0.1208 0.1584 0.2590 0.2511 4.9388
Est-ce que cela fonctionne lorsque les limites sont 0 et l'infini? – Peaceful
Petit détail supplémentaire: ** y ** est une variable uniforme dans la gamme [0,1]. –
La réponse de dmckee fournit le contexte manquant nécessaire pour comprendre la dérivation dans l'article de Wolfram. – SigmaX