2012-10-11 39 views
9

如何在R中定義自己的發行版?如果我有一個看起來像這樣的分佈:如何在R中聲明用戶定義的發行版

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

如何將其轉換爲我可以使用的分佈?最後,我希望能夠使用這些功能並執行涉及cdfs,icdfs和pmfs的功能。就像通過一個cdf類型的東西找到1的概率一樣。而且我還需要了解如何繪製圖表。但我會問更小的步驟,並試圖弄清楚兩者之間的事情。

+1

你可能想澄清你所說的「有工作」的意思。你想要pmf嗎? CDF?位數?只是隨機抽取分佈? – Dason

+0

添加到問題。 –

回答

13

如果你只是需要生成從分佈的隨機變元,這應該足夠了:

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 

對於一些更看中的,試用包。除了隨機數生成,它會讓你的密度,分佈和分位數與分佈相關的功能:

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

謝謝:)幫助,我需要做的不僅僅是獲得隨機數字,但是幫助了很多。 –