繁体   English   中英

如何在R中的一张图片中绘制经验CDF和理论CDF?

[英]How to plot empirical CDF and theoretical CDF in one picture in R?

我想使用ggplot2绘制经验 cdf (ecdf) 和理论 cdf。 但是,理论 cdf 在 R 中不可用,所以我必须定义它。

这是我的数据:

data1 <- c(12.20,23.56,23.74,25.87,31.98,37,41.35,47.38,55.46,
           58.36,63.47,68.46,78.26,74.47,81.43,84,92,94,
           110,112,119,127,130,133,140,146,155,
           159,173,179,194,195,209,249,281,319,
           339,432,469,519,633,725,817,1776)

df <- data.frame(data1)

这是我绘制 ecdf 的代码:

base <- ggplot(df, aes(data1)) + stat_ecdf(geom = "step") + theme_light()
plot <- base +
  labs(
    x = "Time",
    y = "Fn(x)",
    title = "Empirical Distribution Function"
  ) +
  ggeasy::easy_center_title()
plot

我还想在与 ecdf(带有图例)的同一张图片中绘制理论 cdf。 这是 CDF

\frac{\alpha^{e^{-\lambda x^{-\beta}}}-1}{\alpha-1}

其中 alpha = 273.811028,lambda = 29.834133,beta = 1.135448

你能帮我提供这样做的代码吗?

您可以使用stat_function()绘制一条线,在该线处针对沿 x 轴的一系列位置评估函数。 您可以使用 rlang 样式的 lambda 表示法将函数作为公式给出,其中.x表示馈送到函数的 x 位置。

library(ggplot2)
data1 <- c(12.20,23.56,23.74,25.87,31.98,37,41.35,47.38,55.46,
           58.36,63.47,68.46,78.26,74.47,81.43,84,92,94,
           110,112,119,127,130,133,140,146,155,
           159,173,179,194,195,209,249,281,319,
           339,432,469,519,633,725,817,1776)

df <- data.frame(data1)
alpha  <- 273.8
lambda <- 29.8
beta   <- 1.135

ggplot(df, aes(data1)) + 
  stat_ecdf(geom = "step", aes(colour = "ECDF")) + 
  stat_function(
    fun = ~ (alpha^exp(-lambda * .x^(-beta)) - 1)/(alpha - 1),
    aes(colour = "TCDF"), xlim = c(0, 1700)
  ) +
  theme_light() +
  labs(
    x = "Time",
    y = "Fn(x)",
    title = "Empirical Distribution Function"
  )

reprex 包(v0.3.0) 于 2021 年 10 月 12 日创建

暂无
暂无

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

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