1

我目前正在尝试用 R's 绘制一些密度分布函数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 分布绘制危险函数,这意味着我想绘制:

https://i.stack.imgur.com/w2nlZ.gif

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

计算失败stat_function():未使用的参数 (x_trans)

我也尝试直接使用

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

而不是上面带有自定义函数构造的“解决方法”。这引发了另一个错误,因为我试图对一个对象进行数值算术:

二元运算符的非数字参数

我得到了那个错误,但我不知道解决方案。

我做了一些研究,但没有成功。我觉得这应该是直截了当的。我也想尽可能地“手动”完成,但如果没有简单的方法来做到这一点,那么打包的解决方案也可以。

在此先感谢您的任何建议!

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

4

1 回答 1

2

三个评论:

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

  2. for的fun参数stat_function将函数作为参数,而不是字符串。如果您需要一些尚不存在的功能,您可以即时定义功能。

  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")

在此处输入图像描述

于 2017-11-26T21:35:58.840 回答