Построение функции нескольких переменных в R

Мне нужна помощь со следующим вопросом:

Рассмотрим следующую функцию R с именем negloglike это имеет два входных аргумента: lam а также x, в этой последовательности. Используйте эту функцию, чтобы получить график функции логарифмического правдоподобия в диапазоне значений λ ∈ (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? Или вообще другой пакет?

Очень признателен!

1 ответ

Хитрость заключается в 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 дать тот же график.

Другие вопросы по тегам