你如何在 R 中定义自己的分布?如果我有一个看起来像这样的分布:
P(D=0)=2/4, P(D=1)=1/4, P(D=2)=1/4
我如何将它变成我可以使用的发行版?
最后,我希望能够使用这些并做涉及 cdfs、icdfs 和 pmfs 的事情。就像通过 cdf 类型的东西找到 1 的概率一样。而且我还需要找出如何绘制图表。但我打算以更小的步骤询问,并尝试在两者之间找出问题。
你如何在 R 中定义自己的分布?如果我有一个看起来像这样的分布:
P(D=0)=2/4, P(D=1)=1/4, P(D=2)=1/4
我如何将它变成我可以使用的发行版?
最后,我希望能够使用这些并做涉及 cdfs、icdfs 和 pmfs 的事情。就像通过 cdf 类型的东西找到 1 的概率一样。而且我还需要找出如何绘制图表。但我打算以更小的步骤询问,并尝试在两者之间找出问题。
如果您只需要从分布中生成随机变量,这就足够了:
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