32 votos

¿Existen funciones por defecto para distribuciones uniformes discretas en R?

La mayoría de las distribuciones estándar en R tienen una familia de comandos - pdf/pmf, cdf/cmf, cuantiles, desviaciones aleatorias (por ejemplo- dnorm, pnorm, qnorm, rnorm).

Sé que es bastante fácil hacer uso de algunos comandos estándar para reproducir estas funciones para las distribuciones uniformes discretas, pero ¿existe ya una familia incorporada preferida de funciones para modelar las distribuciones uniformes discretas en R que yo desconozca?

36voto

Como escribió nico, no están implementadas en R. Asumiendo que trabajamos en 1..k, esas funciones deberían verse así:

Para la generación aleatoria:

rdu<-function(n,k) sample(1:k,n,replace=T)

PDF:

ddu<-function(x,k) ifelse(x>=1 & x<=k & round(x)==x,1/k,0) 

CDF:

pdu<-function(x,k) ifelse(x<1,0,ifelse(x<=k,floor(x)/k,1))

17voto

n3rd Puntos 244

Aquí está el código para la distribución uniforme discreta en el rango [min, max], adaptado del post de mbq:

dunifdisc<-function(x, min=0, max=1) ifelse(x>=min & x<=max & round(x)==x, 1/(max-min+1), 0)
punifdisc<-function(q, min=0, max=1) ifelse(q<min, 0, ifelse(q>=max, 1, (floor(q)-min+1)/(max-min+1)))
qunifdisc<-function(p, min=0, max=1) floor(p*(max-min+1))
runifdisc<-function(n, min=0, max=1) sample(min:max, n, replace=T)

15voto

Kevin Ballard Puntos 88866

El Vista de tareas de CRAN: Distribuciones de probabilidad dice la página:

La distribución uniforme discreta se puede obtener fácilmente con las funciones básicas.

Supongo que algo parecido a esto debería servir:

a <- round(runif(1000, min=0, max=100))

EDITAR

Como ha señalado csgillespie, esto no es correcto...

a <- ceiling(runif(1000, min=0, max=100))

funcionará sin embargo (tenga en cuenta que el ejemplo generará valores entre 1 y 100, no 0 y 100)

0voto

Ben Puntos 139

Esta función podría ser lo que está buscando:

https://purrr.tidyverse.org/reference/rdunif.html

rdunif(n, b, a = 1)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X