在R

时间:2018-08-25 08:38:04

标签: r ggplot2 multiple-arguments

我需要以下问题的帮助:

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

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

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

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

但是plot总是返回一些y值的水平线,而不是返回曲线。

我应该使用其他几何图形吗?甚至是完全不同的软件包?

非常感谢!

1 个答案:

答案 0 :(得分: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))

enter image description here

nllvnllv2都给出相同的图形。