Построение функции нескольких переменных в R - PullRequest
0 голосов
/ 25 августа 2018

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

Рассмотрим следующую функцию 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)

, но plot всегда возвращаетгоризонтальная линия с некоторым значением y вместо возврата кривой.

Должен ли я использовать другой геом?Или вообще другой пакет?

Очень ценится!

1 Ответ

0 голосов
/ 25 августа 2018

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

enter image description here

И nllv, и nllv2 дают один и тот же график.

...