Случайные благоразумные переменные и изображать Вашу функцию вероятности графически накопленная в R

В этом 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)

Так же как извлечены числа - без восстановления - остаются нечто похожее

introducir la descripción de la imagen aquí

Несмотря на то, что я не было находить что-то уже сделанным, чтобы использовать прямо, я смог делать осуществление на частном лице.

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 Онлайн Три Ит - ДЯДЯ

0
задан 31.03.2019, 20:22
1 ответ

Как 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, без того, чтобы терялось достигнутое.

0
ответ дан 02.12.2019, 07:11

Теги

Похожие вопросы