1

我需要以下问题的帮助:

考虑以下 R 函数,命名为negloglike具有两个输入参数: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)

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

我应该使用不同的geom吗?甚至完全不同的包?

非常感激!

4

1 回答 1

2

诀窍是Vectorize函数超过感兴趣的参数。
感谢您提供有关此问题投票最多的答案的提示。它只使用基本图形,所以这里是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))

在此处输入图像描述

两者都nllv给出nllv2相同的图表。

于 2018-08-25T09:08:14.727 回答