2012-10-11 8 views
9

Jak definiujesz własne dystrybucje w R? Jeśli mam dystrybucję, która wygląda mniej więcej tak:jak zadeklarować zdefiniowaną przez użytkownika dystrybucję w R

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

Jak zmienić to w dystrybucję, z którą mogę pracować?

W końcu, chcę móc z nich korzystać i robić rzeczy obejmujące cdfs, icdfs i pmfs. Jak znaleźć prawdopodobieństwo 1 przez rzecz typu cdf. Muszę też dowiedzieć się, jak tworzyć wykresy. Ale zamierzałem poprosić o mniejsze kroki i spróbować wymyślić coś pomiędzy.

+1

Prawdopodobnie będziesz chciał wyjaśnić, co masz na myśli mówiąc "praca z". Czy chcesz pmf? CDF? kwantyle? Po prostu losowe remisy z dystrybucji? – Dason

+0

Dodano to pytanie. –

Odpowiedz

13

Jeśli wystarczy do generowania losowych zmiennymi z dystrybucji, powinno to wystarczyć:

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 

Na coś bardziej ozdobnego, wypróbować distr pakietu. Oprócz generowania liczb losowych dostarczy Ci funkcji gęstości, dystrybucji i kwantyzacji powiązanych z Twoją dystrybucją:

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

Dzięki :) To pomaga, muszę zrobić więcej niż uzyskać losowe numery, ale to bardzo pomogło. –

Powiązane problemy