【问题标题】:plotting log-likelihood function in R在 R 中绘制对数似然函数
【发布时间】:2020-09-10 03:29:02
【问题描述】:

您好,我的代码中出现 x 和 y 长度不同的错误。 datasim 是一个大小为 1000 的模拟样本。请帮助我。

x <- datasim
loglik <- function(theta){
  k<- theta[1]
  lambda<- theta[2]
  out <- sum(dweibull(x,shape = k, scale=lambda, log = TRUE) )
  return(out)
}

theta<- c(0.5,1.5)
plot(theta, loglik(theta), type="l", lwd=3, main="logliklihood_Weibull, n=1000")

【问题讨论】:

  • 为了使您的问题可重现并因此可回答,我们需要最少的自包含代码和数据,以便我们能够在我们的机器上重现您的问题,请遵循以下简单指南:@987654321 @.
  • 在您显示的情况下,您的函数采用长度为 2 的向量并返回长度为 1 的向量,因为求和只为您提供一个值。因此,通过使用plot(theta, loglik(theta), type="l", lwd=3, main="logliklihood_Weibull, n=1000"),您试图绘制长度为 2 (theta) 的 x 与长度为 1 (loglik(theta)) 的 y。
  • theta 是一个长度为 2 的向量,因此最好在 xy 平面上绘制一个曲面的 3-D 图,其中 x 轴是形状参数,y 轴是Weibull 分布的尺度参数。这样,您可以轻松地观察 MLE。
  • @MartinGal 哦,谢谢你的提示。我有一个类似的例子,使用 optim() 来查找带有 loglik 的 2 参数 dsn 的 mles。所以我不知道尺寸差异。

标签: r statistics mle log-likelihood


【解决方案1】:

你可以使用一个包,因为它是你适合的 weibull:

library(fitdistrplus)
x = rweibull(1000,20,10)
fit <- fitdist(x, "weibull")
llplot(fitg, expand=5)

或者使用你的 loglik 函数:

library(lattice)

da = expand.grid(k=seq(8,22,length.out=50),
lambda = seq(9,12,length.out=50))
da$LL = apply(da,1,loglik)

wireframe(LL ~ k * lambda, data = da,
scales = list(arrows = FALSE),drape = TRUE, colorkey = TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多