【问题标题】:How to plot a truncated normal distribution with known paramters, in R如何在 R 中绘制具有已知参数的截断正态分布
【发布时间】:2017-12-26 14:52:59
【问题描述】:

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

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

【问题讨论】:

  • 你说的是truncnorm 包吗? dtruncnorm 函数给出密度
  • 嗨@juan。是的,我说的是 truncnorm 包。我已经尝试过 dtruncnorm 函数,但它似乎没有给出密度。例如,如果我输入代码:vec=seq(from=0,by=0.01,length.out = 100) test=dtruncnorm(vec, a=0,b=1,mean=0.1,sd=0.1) plot(test),那么我会得到一个具有截断正态分布的确切形状的图,并且 x 值是准确的。但是,y 轴的范围是 0 到 5。这意味着它没有显示密度(它们都应该小于 1)
  • 如果 y 轴范围超过 1,它确实 not 意味着它不是密度。它是空间(或 R,实线)上的积分,必须等于 1。
  • @user5211911 为什么您认为密度值必须小于 1?它们不是概率,可以大于 1(甚至无限)。
  • 这是一个很好的example,是关于解释密度值的很好讨论的一部分。

标签: r statistics normal-distribution truncated


【解决方案1】:

只要您同时拥有“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)

【讨论】:

  • 嘿@rui,这会生成伪随机数,但不会给出密度。我不喜欢分布中的随机数,我需要能够在截断范数的样本空间中选择任何值。区然后获取该值的相应密度。
  • 密度见上面juan的评论,以及我对你的回答。
【解决方案2】:

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

这可以使用 juan 之前建议的 truncnorm 包中的 dtruncnorm 函数来完成。我将使用平均值为 5、标准差为 1、极限为 1 和 10 的正态分布问题中的示例来演示这一点。

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

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

以上将确保我们从 1 开始绘制 10 个点,以 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)

有任何问题请留言

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 2013-08-08
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2013-12-13
    相关资源
    最近更新 更多