11

Rで独自の分布をどのように定義しますか?次のようなディストリビューションがある場合:

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

それを作業可能なディストリビューションに変換するにはどうすればよいですか?

結局、私はこれらを使用して、cdfs、icdfs、およびpmfsに関連することを実行できるようにしたいと考えています。累積分布関数タイプのものを介して1の確率を見つけるように。そして、私は物事をグラフ化する方法を見つける必要もあります。しかし、私は小さなステップで質問し、その間のことを理解しようとしていました。

4

1 に答える 1

14

分布からランダムな変量を生成する必要がある場合は、これで十分です。

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 

もっと凝ったものが必要な場合は、 distrパッケージを試してください。乱数の生成に加えて、分布に関連付けられた密度、分布、および分位関数を取得します。

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
于 2012-10-11T22:00:15.360 に答える