2016-04-21 3 views
2

Je souhaite générer des nombres aléatoires de Weibull dans un intervalle donné. Par exemple 20 nombres aléatoires de la distribution de Weibull avec la forme 2 et l'échelle 30 dans l'intervalle (0, 10).Génération de nombres aléatoires dans un intervalle spécifique

rweibull La fonction de R produit des nombres aléatoires à partir d'une distribution de Weibull avec des valeurs de forme et d'échelle données. Quelqu'un peut-il s'il vous plaît suggérer une méthode? Merci d'avance.

+0

Check this out: http://stats.stackexchange.com/questions/88773/getting-rweibull-to-output-n-observations-in-1-52-given-specific-shape-scale – chinsoon12

Répondre

3

Utilisez le package distr. Cela permet de faire ce genre de choses très facilement.

require(distr) 
#we create the distribution 
d<-Truncate(Weibull(shape=2,scale=30),lower=0,upper=10) 
#The d object has four slots: d,r,p,q that correspond to the [drpq] prefix of standard R distributions 
#This extracts 10 random numbers 
[email protected](10) 
#get an histogram 
hist([email protected](10000)) 
+0

nicola merci. Je l'ai eu correctement – Nayomi

1

base en utilisant R, vous pouvez générer des nombres aléatoires, filtre qui tombent dans l'intervalle cible et de générer un peu plus si leur quantité semble être moins que vous avez besoin.

rweibull_interval <- function(n, shape, scale = 1, min = 0, max = 10) { 
    weib_rnd <- rweibull(10*n, shape, scale) 
    weib_rnd <- weib_rnd[weib_rnd > min & weib_rnd < max] 
    if (length(weib_rnd) < n) 
    return(c(weib_rnd, rweibull_interval(n - length(weib_rnd), shape, scale, min, max))) else 
     return(weib_rnd[1:n]) 
} 

set.seed(1) 
rweibull_interval(20, 2, 30, 0, 10) 

[1] 9.308806 9.820195 7.156999 2.704469 7.795618 9.057581 6.013369 2.570710 8.430086 4.658973 
[11] 2.715765 8.164236 3.676312 9.987181 9.969484 9.578524 7.220014 8.241863 5.951382 6.934886