[英]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.