2012-10-11 5 views
9

Come si definiscono le proprie distribuzioni in R? Se ho una distribuzione che sembra qualcosa di simile:come dichiarare una distribuzione definita dall'utente in R

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

Come posso trasformarla in una distribuzione posso lavorare?

Alla fine, voglio essere in grado di usarli e fare cose che coinvolgono cdf, icdf e pmfs. Come trovare la probabilità di 1 attraverso una cosa di tipo cdf. E ho anche bisogno di scoprire come disegnare le cose. Ma stavo per chiedere a piccoli passi e cercare di capire le cose nel mezzo.

+1

probabilmente si vorrà per chiarire cosa si intende per "lavorare con". Vuoi il pmf? CDF? quantili? Solo estrazioni casuali dalla distribuzione? – Dason

+0

Aggiunto questo alla domanda. –

risposta

13

Se avete solo bisogno di generare variabili casuali dalla distribuzione, questo dovrebbe essere sufficiente:

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 

Per qualcosa di più di fantasia, provare il pacchetto distr. Oltre alla generazione di numeri casuali, otterrà i densità, distribuzione e funzioni quantile associati con la vostra distribuzione:

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

Grazie :) questo mi aiuta, devo fare di più che ottenere numeri casuali, ma questo mi ha aiutato molto. –