如果您选择构建自己的发行版版本,您可能会对distr。它(以及相关的包distrEx, distrSim, 发行版测试, 分配教学 and distrDoc)的编写是为了提供一个统一的接口,用于从现有的发行版构建新的发行版。 (我在伴随着的精彩小插图的帮助下构建了这个例子distrDoc包,可以通过输入获得vignette("distr")
.)
这实现了分裂正态分布 http://en.wikipedia.org/wiki/Split_normal_distribution,这可能不完全是您所追求的。使用distr不过,调整它以满足您的确切需求应该不会太难。
library(distr)
## Construct the distribution object.
## Here, it's a split normal distribution with mode=0, and lower- and
## upper-half standard deviations of 1 and 2, respectively.
splitNorm <- UnivarMixingDistribution(Truncate(Norm(0,2), upper=0),
Truncate(Norm(0,1), lower=0),
mixCoeff=c(0.5, 0.5))
## Construct its density function ...
dsplitNorm <- d(splitNorm)
## ... and a function for sampling random variates from it
rsplitNorm <- r(splitNorm)
## Compare the density it returns to that from rnorm()
dsplitNorm(-1)
# [1] 0.1760327
dnorm(-1, sd=2)
# [1] 0.1760327
## Sample and plot a million random variates from the distribution
x <- rsplitNorm(1e6)
hist(x, breaks=100, col="grey")
## Plot the distribution's continuous density
plot(splitNorm, to.draw.arg="d")