我设置了一个函数来计算分布的可能性。我得到的是负值,我想知道我的功能是否正确?如果可以的话,如何绘制函数曲线?
y <- function(mu, x) {
n <- length(x)
-n*mu + log(mu)*sum(x) - sum(lfactorial(x))
}
x<-c(5,4,0,1,4,7,3,5,4)
mu<-c(3,4,2.5)
y(x,mu)
任何建议都将非常有帮助。
在下面,您可以从Poisson分布中找到对数似然的完整表达。此外,我模拟了Poisson分布中的数据,rpois
用于测试mu等于5,然后使用优化对数似然性从数据中恢复optimize
#set seed
set.seed(777)
#loglikeliood of poisson
log_like_poissson <- function(y) {
n <- length(y)
function(mu) {
log(mu) * sum(y) - n * mu - sum(lfactorial(y))
}
}
# Data simulation: Poisson with lambda = 5
y <- rpois(n=10000, lambda = 5)
# Optimization of the loglikelihood
optimise(log_like_poissson(y),
interval = c(0, 100),
maximum = TRUE)
#$maximum
#[1] 4.994493
#
#$objective
#[1] -22033.2
该代码高度基于Advanced R的第10章,您可以在其中找到有关如何优化上述可能性的广泛讨论。
[编辑]
对于问题的图形部分,您可以使用以下代码查看对数似然在mu的不同值下的行为。从图中可以看出,该函数的最大值为mu等于5的值(符合预期)。
library(ggplot2)
values_for_mu<- seq(from=0.05, to = 10 , by =0.05 )
#new loglikelihood (only depends on mu)
log_like_poissson2 <- function(mu) {
n <- length(y)
(log(mu) * sum(y)) - (n * mu) - sum(lfactorial(y))
}
#Evaluate the loglikelihood at different values of mu
values_log_like <- unlist(lapply(values_for_mu,
FUN = log_like_poissson2))
#generate a dataframe to ggplot2
df <- data.frame(values_for_mu, values_log_like)
# Plot
ggplot(df, aes(x=values_for_mu, y=values_log_like)) +
geom_line() + geom_vline(xintercept = 5, linetype="dotted",
color = "red", size=1.5) +
xlab("mu") + ylab("Value of Log-likelihood")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句