2012-10-11 193 views
9

¿Cómo se definen sus propias distribuciones en R? Si tengo una distribución que se parece a esto:cómo declarar una distribución definida por el usuario en R

P(D=0)=2/4, P(D=1)=1/4, P(D=2)=1/4 

¿Cómo puedo convertir eso en una distribución con la que pueda trabajar?

Al final, quiero poder usarlos y hacer cosas que impliquen cdfs, icdfs y pmfs. Como encontrar la probabilidad de 1 a través de una cosa de tipo cdf. Y también necesito descubrir cómo graficar cosas. Pero iba a preguntar en pasos más pequeños y tratar de resolver las cosas en el medio.

+1

Probablemente quiera aclarar a qué se refiere con "trabajar con". ¿Quieres el pmf? CDF? cuantiles? ¿Al azar se basa en la distribución? – Dason

+0

Agregué eso a la pregunta. –

Respuesta

13

Si sólo necesita para generar variables aleatorias al azar de la distribución, esto debería ser suficiente:

rMydist <- function(n) { 
    sample(x = c(0,1,2), size = n, 
      prob = c(.5, .25, .25), replace=T) 
} 

rMydist(20) 
# [1] 1 0 2 0 2 1 1 0 2 2 0 0 2 1 0 0 0 0 0 1 

prop.table(table(rMydist(1e6))) 
#  0  1  2 
# 0.500555 0.250044 0.249401 

Para algo más sofisticado, probar el distr paquete. Además de la generación de números aleatorios, obtendrá las funciones de densidad, distribución y cuantificación asociadas a su distribución:

library(distr) 
## For more info, type: vignette("newDistributions") 

# Define full suite of functions (d*, p*, q*, r*) for your distribution 
D <- DiscreteDistribution (supp = c(0, 1, 2) , prob = c(0.5, .25, .25)) 
dD <- d(D) ## Density function 
pD <- p(D) ## Distribution function 
qD <- q(D) ## Quantile function 
rD <- r(D) ## Random number generation 

# Take them for a spin 
dD(-1:3) 
# [1] 0.00 0.50 0.25 0.25 0.00 
pD(-1:3) 
# [1] 0.00 0.50 0.75 1.00 1.00 
qD(seq(0,1,by=0.1)) 
# [1] 0 0 0 0 0 0 1 1 2 2 2 
rD(20) 
# [1] 0 0 2 2 1 0 0 1 0 1 0 2 0 0 0 0 1 2 1 0 
+0

Gracias :) que ayuda, necesito hacer más que obtener números aleatorios, pero eso me ayudó mucho. –

Cuestiones relacionadas