【问题标题】:Plotting multiple variable function in R在 R 中绘制多个变量函数
【发布时间】:2018-08-25 08:38:04
【问题描述】:

我需要以下问题的帮助:

考虑以下名为 negloglike 的 R 函数,它有两个输入参数:lamx,按顺序排列。 使用此函数可以在 λ ∈ (0, 2) 的值范围内生成对数似然函数图。

negloglike <- function(lam, x) {
  l = -sum(log(dexp(x, lam)))
  return(l)
}

有人可以帮忙吗?可以用ggplot做这样的事情吗?我一直在尝试使用stat_function 设置lam 的值(例如这里的0.2):

ggplot(data = data.frame(x = 0), mapping = aes(x = x)) +
  stat_function(fun = negloglike, args = list(lam = 0.2)) +
  xlim(0,10)

plot 总是在某个 y 值处返回一条水平线,而不是返回一条曲线。

我应该使用不同的几何图形吗?甚至完全不同的包?

非常感谢!

【问题讨论】:

  • 您应该编辑问题并发布您使用的代码。知道你在做什么是了解它有什么问题的第一步。提示:我将首先交换参数的顺序,x 首先。
  • 另外,它是-log(sum(.))
  • 感谢您的建议!我已经在我的代码中添加了这个问题。 negloglike 函数在我使用它来计算值时可以正常工作,但是stat_function 生成的图形却不能正常工作(无论如何我都是这样做的)。将其更改为-log(sum(.)) 似乎没有任何区别,也没有交换xlam 的顺序
  • 请注意,该函数对dexp 的所有值求和,因此它只会返回一个值。
  • 是的,但绘制函数时通常不是这样吗?为每个 x 值绘制一个值?还是我误解了机械师的工作方式?例如negloglike(x = 1, lam = 0.2) = 1.809438negloglike(x = 2, lam = 0.2) = 2.009438 等等?

标签: r ggplot2 multiple-arguments


【解决方案1】:

诀窍是Vectorize 函数覆盖感兴趣的参数。
感谢您的提示,请转到this question 的投票最多的答案。它仅使用基本图形,因此这里有一个 ggplot2 等价物。
首先我将使用函数dexp定义负对数似然

library(ggplot2)

negloglike <- function(lam, x) {negloglike <- function(lam, x) {
    l = -sum(dexp(x, lam, log = TRUE))
    return(l)
}
nllv <- Vectorize(negloglike, "lam")

但最好使用解析式,易于手工建立。

negloglike2 <- function(lam, x) {
    l = lam*sum(x) - length(x)*log(lam)
    return(l)
}

nllv2 <- Vectorize(negloglike2, "lam")

ggplot(data = data.frame(lam = seq(0, 2, by = 0.2)), mapping = aes(x = lam)) +
  stat_function(fun = nllv2, args = list(x = 0:10))

nllvnllv2 都给出了相同的图表。

【讨论】:

  • Rui 太棒了,非常感谢!这帮助了很多。在阅读了几篇文章后,我认为必须以某种形式或形式进行一些矢量化,但我不确定如何在这里应用它。
  • @ethy_32 抱歉,我在对数似然上犯了一个错误。查看新代码和图表。
猜你喜欢
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
相关资源
最近更新 更多