Построение функции нескольких переменных в 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
дать тот же график.