【问题标题】:How to plot a function that calculates the PDF?如何绘制计算 PDF 的函数?
【发布时间】:2013-04-10 22:48:12
【问题描述】:

所以这是我的函数计算的 PDF:

fx = 0.3 如果 (0


这是我的编码:

    fx = function(x)
    { 
    if ((0<=x) & (x<1)) 0.3
    else if ((1<=x) & (x<2)) 0.1
    else if ((2<=x) & (x<3)) 0.25
    else if ((3<=x) & (x<4)) 0.15
    else if ((4<=x) & (x<5)) 0.2
    else 0
    }


现在我将如何绘制 y=fx?
我试过了:

    x <- runif(n,0,5)
    y <- fx(x)
    plot(x, y, type='1', xlim=c(0,5), ylim=c(0,5))

但我得到一个错误,“x”和“y”的长度不同?

【问题讨论】:

    标签: r function plot probability


    【解决方案1】:

    您的问题归结为您的函数未正确矢量化(它不能很好地处理矢量)。

    如果您使用上一个关于完全相同的问题的问题中的accepted solution,那么您将不会遇到任何问题

    例如

    # a solution that will work and be properly vectorized
    fx <- function(x) c(0, 0.3,0.1,0.25,0.15,0.20, 0)[findInterval(x, c(-Inf, 0:5, Inf))]
    
    
     x <- runif(n,0,5)
    
    plot(x, fx(x))
    

    如果你想绘制一个阶梯函数(这就是这个pdf),你可以使用stepfun

    例如

    fx <- stepfun(x = 0:5, y = c(0,0.3,0.1,0.25,0.15,0.20,0))
    plot(fx, ylim = c(0,0.4),xlim = c(0,5), main = 'f(x)')
    

    如果你不想加分,那么

    plot(fx, ylim = c(0,0.4),xlim = c(0,5), main = 'f(x)', do.points=FALSE)
    

    如果你想向量化一个阶跃函数,那么使用Vectorize

     vfx <- Vectorize(fx)
    

    【讨论】:

    • 我知道必须有一种巧妙的方法来矢量化该函数。
    • @mnel:感谢您使用早期的功能。我喜欢你对 stepfun 的使用。
    【解决方案2】:

    您的 PDF 未矢量化。试试这个:

    fx <- function(x) {
      ifelse((0<=x) & (x<1), 0.3,
      ifelse((1<=x) & (x<2), 0.1,
      ifelse((2<=x) & (x<3), 0.25,
      ifelse((3<=x) & (x<4), 0.15,
      ifelse((4<=x) & (x<5), 0.2,
      0)))))
    }
    
    x <- seq(0, 6, length.out=n)
    plot(x, fx(x))
    

    【讨论】:

    • if 仅使用逻辑向量参数的第一个元素,而 ifelse 使用所有元素。见?ifelse
    猜你喜欢
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2016-07-01
    相关资源
    最近更新 更多