簡體   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