使用 ggplot2 绘制对数似然函数的问题

时间:2021-01-22 17:27:55

标签: r ggplot2

我目前正在尝试使用 ggplot2 绘制对数似然函数; 函数定义为

y <- rpois(100, lambda = 3)

f_1 <- function(z) -100*z + sum(log(1/factorial(y)*z^y)).

尝试计算 f_1 的值时,一切正常(例如 f_1(1) = -316.1308)

但是当我尝试使用 ggplot2 绘制 f_1 时,会弹出一个错误:

p <- ggplot(data = data.frame(z = 0), mapping = aes(z=z))

p <- p + stat_function(fun = f_1)
<块引用>

错误:“较长的对象长度不是较短对象的倍数 长度”。

我该如何解决这个错误? 谢谢

1 个答案:

答案 0 :(得分:0)

您的函数必须编写为处理长度 > 1 的向量,因为 stat_function 会将值向量传递给您的函数,而不是将函数分别应用于绘图上的每个 x 轴值。如果你尝试例如f_1(0:10) 你得到同样的警告,确认这个函数没有正确处理长度 > 1 的向量。问题在于z^y。如果 zy 都是向量,则行为是将 ^ 应用于具有相同索引的 zy 的每个元素。参见示例 (1:10)^(1:10)。现在,当您尝试 (1:10)^(1:20) 时会发生什么?警告告诉您长度不匹配,因此行为可能是意外的。

您可以仅使用 Vectorize 来矢量化您的函数,这应该会给出您期望的图

p <- ggplot(data = data.frame(z = 0), mapping = aes(z=z))

p <- p + stat_function(fun = Vectorize(f_1))