【问题标题】:Problems plotting log-likelihood-function with ggplot2用 ggplot2 绘制对数似然函数的问题
【发布时间】:2021-01-22 17:27:55
【问题描述】:

我目前正在尝试使用 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)

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

如何解决此错误? 谢谢

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您的函数必须编写为处理长度 > 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))
    

    【讨论】:

      猜你喜欢
      • 2020-09-10
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多