将给定均值和截距的指数函数添加到 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
产生的结果:
考虑以下随机数据:
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
产生的结果: