将给定均值和截距的指数函数添加到 cdf 图

add exponential function given mean and intercept to cdf plot

考虑以下随机数据:

set.seed(123456)
# generate random normal data
x <- rnorm(100, mean = 20, sd = 5)
weights <- 1:100
df1 <- data.frame(x, weights)

#
library(ggplot2)
ggplot(df1, aes(x)) + stat_ecdf()

我们可以创建一般累积分布图。

但是,我想将我的曲线与 20 年前使用的数据进行比较。从论文中只知道数据是"best modeled by a shifted exponential distribution with an x intercept of 1.1 and a mean of 18"

如何将这样的功能添加到我的绘图中?

+ stat_function(fun=dexp, geom = "line", size=2, col="red", args = (mean=18.1))

但我不确定如何处理移位(x 截距)

我不完全确定我是否理解指数函数均值的概念。但是,通常,当您将函数作为参数传递时,在您的情况下为 fun=dexp,您可以传递自己的、修改后的函数,例如:fun = function(x) dexp(x)+1.1。 也许尝试使用此功能会让您找到解决方案。

我认为这种情况最好通过在 ggplot 调用之外先进行 function 来处理。

dexp 不采用参数 mean,而是使用 rate,这与 lambda 相同。这意味着您需要 rate = 1/18.1 基于指数分布的属性。另外,我认为 dexp 在这里没有多大意义,因为它显示了密度,我认为你真正想要的概率是 pexp.

您的代码可能如下所示:

library(ggplot2)
test <- function(x) {pexp(x, rate = 1/18.1)}
ggplot(df1, aes(x)) + stat_ecdf() +
    stat_function(fun=test, size=2, col="red")

你可以改变你的 pexp 分布这样做:

test <- function(x) {pexp(x-10, rate = 1/18.1)}
ggplot(df1, aes(x)) + stat_ecdf() +
    stat_function(fun=test, size=2, col="red") +
    xlim(10,45)

只是为了好玩,这是使用 dexp 产生的结果: