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