stat_functions 的基本计算 -- 绘制危险函数

Basic Calculations with stat_functions -- Plotting hazard functions

我目前正在尝试用 R ggplot2 绘制一些密度分布函数。我有以下代码:

f <- stat_function(fun="dweibull",
                   args=list("shape"=1),
                             "x" = c(0,10))
stat_F <- stat_function(fun="pweibull",
                   args=list("shape"=1),
                             "x" = c(0,10))
S <- function() 1 - stat_F

h <- function() f / S
wei_h <- ggplot(data.frame(x=c(0,10))) +
         stat_function(fun=h) +
         ...

基本上我想根据具有不同参数的 Weibull 分布绘制危险函数,这意味着我想绘制:

上面的代码给我这个错误:

Computation failed in stat_function(): unused argument (x_trans)

我也试过直接用

S <- 1 - stat_function(fun="pweibull", ...)

而不是上面 "workaround" 自定义函数构造。这引发了另一个错误,因为我试图对一个对象进行数值运算:

non-numeric argument for binary operator

我收到该错误,但我不知道解决方案。

我做了一些研究,但没有成功。我觉得这应该很简单。我也想尽可能地做到这一点"manually",但是如果没有简单的方法可以做到这一点,那么打包解决方案也可以。

提前感谢您的任何建议!

PS:我基本上想重新创建您可以在链接的 PDF 文件第 10 页的 Kiefer, 1988 中找到的图表。

三条评论:

  1. stat_function 是 ggplot2 的函数统计,您不能将两个 stat_function 表达式彼此相除或以其他方式在数学表达式中使用它们,如 S <- 1 - stat_function(fun="pweibull", ...) .这是对 stat_function 的根本误解。 stat_function 始终需要添加到 ggplot2 图中,如下例所示。

  2. stat_functionfun 参数将函数作为参数,而不是字符串。如果您需要尚不存在的函数,您可以即时定义函数。

  3. 您需要通过aes函数设置美学映射。

此代码有效:

args = list("shape" = 1.2)
ggplot(data.frame(x = seq(0, 10, length.out = 100)), aes(x)) + 
  stat_function(fun = dweibull, args = args, color = "red") +
  stat_function(fun = function(...){1-pweibull(...)}, args = args, color = "green") +
  stat_function(fun = function(...){dweibull(...)/(1-pweibull(...))},
                args = args, color = "blue")