代码之家  ›  专栏  ›  技术社区  ›  user5211911

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

  •  1
  • user5211911  · 技术社区  · 7 年前

    2 回复  |  直到 7 年前
        1
  •  2
  •   Rui Barradas    7 年前

    以下函数为任何分布生成(伪)随机数,只要“d”和“p”函数都可用。在里面 R 这意味着你必须 dnorm pnorm 是的,他们是基地的一部分 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)
    
        2
  •  1
  •   user5211911    7 年前

    首先,您必须创建一个由分布绘制的点数组成的向量,该向量将等距分布。例如,如果你想从分布中等距绘制十个点,你的向量(“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)
    

    如果您有任何问题,请发表评论