繁体   English   中英

如何在R中从PDF绘制CDF函数

[英]How to plot a CDF functon from PDF in R

我有以下功能:

fx <- function(x) {
  if(x >= 0 && x < 3) {
    res <-  0.2;
  } else if(x >=3 && x < 5) {
    res <- 0.05;
  } else if(x >= 5 && x < 6) {
    res <-  0.15;
  } else if(x >= 7 && x < 10) {
    res <-  0.05;
  } else {
    res <- 0;
  }

  return(res);
}

如何在间隔[0,10]上绘制CDF函数?

尝试

fx   <- Vectorize(fx)
grid <- 0:10
p    <- fx(grid)
cdf  <- cumsum(p)

plot(grid, cdf, type = 'p', ylim = c(0, 1), col = 'steelblue',
     xlab = 'x', ylab = expression(F(x)), pch = 19, las = 1)
segments(x0 = grid, x1 = grid + 1, y0 = cdf)
segments(x0 = grid + 1, y0 = c(cdf[-1], 1), y1 = cdf, lty = 2)

在此处输入图片说明

为@Martin Schmelzer的答案增加一点准确性。 累积分布函数(CDF)

在x处求值,是X取小于或等于x的值的概率

因此,要从概率密度函数(PDF)获取CDF,您需要在PDF上进行集成:

fx <- Vectorize(fx)
dx <- 0.01
x <- seq(0, 10, by = dx)
plot(x, cumsum(fx(x) * dx), type = "l", ylab = "cummulative probability", main = "My CDF")

在此处输入图片说明

只需将以前的答案加起来并使用ggplot

# cdf
Fx <- function(x, dx) {
  cumsum(fx(x)*dx)
}

fx <- Vectorize(fx)
dx <- 0.01
x <- seq(0, 10, dx)
df <- rbind(data.frame(x, value=fx(x), func='pdf'), 
            data.frame(x, value=Fx(x, dx), func='cdf'))
library(ggplot2)
ggplot(df, aes(x, value, col=func)) + 
  geom_point() + geom_line() + ylim(0, 1) 

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM