В этом post он был прокомментирован на как производить случайные Числа с отличной вероятностью
Я знаю, что R он поставляет функцию sample, чтобы получать образец с и без восстановления для набора данных.
В этом смысле, было бы простым писать следующее, чтобы перемешивать все данные, содержавшие в dat
с Вашей соответствующей вероятностью prob
dat <- c(5,10,25,50,80)
prob <- c(0.6299994, 0.2998997, 0.0699999, 0.0001000, 0.0000010)
sample(dat, prob=prob) # size=3 obtendríamos 3 de los 5 números
Я искал без успеха находить один package
что позволил gráficar функции вероятности без восстановления, я не знаю, если кто-то узнал какую-то уже осуществленную.
Например, что изобразил вероятность графически накопленные
sample(1:9)
Так же как извлечены числа - без восстановления - остаются нечто похожее
Несмотря на то, что я не было находить что-то уже сделанным, чтобы использовать прямо, я смог делать осуществление на частном лице.
sinReposicion <- function (x=1:10, p, n=F, g=F){
if (missing(p)) { s<- length(x); p <- rep(1/s,s)}
if (!n) {n <- length(x)}
n <- min(n,length(x)) # la muestra no puede ser mayor
# a la cantidad de datos
dat <- c() # contenedor de datos a extraidos
dm <- min(as.integer(round(sqrt(n),0)),3) # dimensiones del grid máximo 3x3
par(mfrow=c(dm,dm)) # combinar graficos dmxdm
for (j in 1:n){
pA <- c(p[1], 0) # longitud 2 como minimo
# pA seria de longitud 1 cuando el tamanio de
# muestra sea igual a los datos por tanto
# para que trabaje el siguiente bucle 'for' se debe
# garantizar que siempre hay un elemento anterior en
# el vector pA que contiene las probabilidades Acum
for ( i in 2:max( length(p), 2 ) ) pA[i] <- p[i]+pA[i-1]
if (g){
if (j==n) pA<-pA[1] # tiene que haber solo una probabilidad
plot( c(0,x), c(0,pA),
col=rgb(243,182,65, max=255),
col.main="azure4", col.lab="azure4",
cex.axis = 1, cex.lab = 1, type="s", xaxt="n",
main=paste0("En Extraccion ",j),
ylab="Probabilidad Acumulada",
xlab="Número de Interés"
)
box(col="white")
axis(side=1, at=c(0,x), col="azure4", col.axis="azure4", col.ticks="azure4")
axis(side=2, col="azure4", col.axis="azure4", col.ticks="azure4")
}
a <- runif(1,0,1) # se genera un número aleatorio entre 0 y 1
id <- min( which( rank(pA)>a & pA>a ) ) # se determina
dat <- c(dat, x[id]) # x[id] es equivalente a x[pA>a][1]
x <- x[-id]; p <- p[-id] # retiramos el dato y
# la probabilidad correspondiente
p <- p/sum(p) # actualizamos las probabilidades
# de los elementos que quedan
# para que todas sumen 1
}
dat
}
Ты можешь тестировать код в replit
Моя консультация как мастер на все руки, - если уже существует пакет, который реализовывал бы этот тип вещей, потому что я прихожу к заключению о том, что эти, они работают звоня в C и быстрее поэтому.
debug / funciones sample sinReposicion
Real time: 0.225 s 0.254 s
User time: 0.147 s 0.176 s
Sys. time: 0.080 s 0.077 s
CPU share: 101.34 % 99.78 %
Стоимость наверху примечательные может меняться, когда ты выполнишь их
sample Онлайн Три Ит - ДЯДЯ
sinReposicion Онлайн Три Ит - ДЯДЯ
Как cГіdigo, если сам он производит их grГЎficos, и ввиду того, что я не имел Г©xito в нахождении пакета, который получал бы попросившее, sГіlo я могу показывать, что cГіdigo напечатанный изначально может быть упрощенным с нею funciГіn cumsum
В этом смысле, возможно заменять эти решения:
pA <- c(p[1], 0)
for ( i in 2:max( length(p), 2 ) ) pA[i] <- p[i]+pA[i-1]
Из-за этой другой:
pA <- cumsum(p)
, Хотя не зарабатывает много результат
debug / funciones sinReposicion / cumsum
Real time: 0.244 s
User time: 0.193 s
Sys. time: 0.050 s
CPU share: 99.65 %
Exit code: 0
стоимость наверху seГ±alados могут меняться, когда ты выполнишь Онлайн Три Ит - ДЯДЯ
, По крайней мере, упрощается cГіdigo, без того, чтобы терялось достигнутое.