如何在 R 中绘制具有已知参数的截断正态分布

How to plot a truncated normal distribution with known paramters, in R

我想在任一 R 中生成具有已知参数的截断正态分布。请注意,我不是在寻找伪随机数生成器。

假设我有一个均值为 5 且标准差为 1 的正态分布。我可以绘制截断正态分布的值,在点 1 和 10 截断吗?

只要您同时使用 'd' 和 'p' 函数,以下函数就会为任何分布生成(伪)随机数。用 R 的说法,这意味着你必须有 dnormpnorm,你这样做,它们是基础 R.

的一部分
#
# random numbers for truncated distribution
#
rtrunc <- function(n, distr, lower = -Inf, upper = Inf, ...){
    makefun <- function(prefix, FUN, ...){
        txt <- paste(prefix, FUN, "(x, ...)", sep = "")
        function(x, ...) eval(parse(text = txt))
    }
    if(length(n) > 1) n <- length(n)
    pfun <- makefun("p", distr, ...)
    qfun <- makefun("q", distr, ...)
    lo <- pfun(lower, ...)
    up <- pfun(upper, ...)
    u <- runif(n, lo, up)
    qfun(u, ...)
}

# Example:
x <- rtrunc(1, "norm", lower = 0, mean = 2, sd = 5)

我找到了解决这个问题的方法。

这可以使用 truncnorm 包中的 dtruncnorm 函数来完成,正如 juan 先前所建议的那样。我将使用均值为 5、标准差为 1 且极限为 1 和 10 的正态分布问题中的示例来证明这一点。

首先,您必须创建一个矢量,其中包含要根据分布绘制的点数,该矢量将等距分布。因此,例如,如果您想从分布中等距绘制十个点,您的向量 ("vec") 将是:

vec=seq(from=1,by=1,length.out = 10)

以上将确保我们绘制 10 个点,从 1 开始,递增 1,直到值 10。

然后我们将这些放在 dtruncnorm() 函数中并将其保存在 "test" 变量中,然后绘制它:

test=dtruncnorm(vec,a=1,b=10,mean=5,sd=1)
plot(test)

如您所见,这绘制了离散点处的密度。您可以通过增加点数轻松地尝试使情节连续:

vec=seq(from=1,by=0.1,length.out = 100)
test=dtruncnorm(vec,a=1,b=10,mean=5,sd=1)
plot(test)

有问题请评论