使用maxLik库进行数据近似。产生的NaN

时间:2019-03-25 20:08:24

标签: r

我正在尝试对quakes数据集stations列进行数据近似。我正在遵循maxLik库文档https://cran.r-project.org/web/packages/maxLik/maxLik.pdf

中的示例
library(maxLik)
set.seed(1)
attach(quakes)

## log likelihood function.
## Note: param is a vector
llf <- function( param ) {
  mu <- param[ 1 ]
  sigma <- param[ 2 ]
  llValue <- dnorm(stations, mean=mu, sd=sigma, log=TRUE)
  return(sum(llValue))
}
## Estimate it.  Take standard normal as start values
ml <- maxLik( llf, start = c(mu=0, sigma=1) )

我收到In dnorm(stations, mean = mu, sd = sigma, log = TRUE) : NaNs produced警告。发生这种情况是因为sum(llValue)返回了负值。结果,近似值非常差。如果我将代码更改为return(abs(sum(llValue))),警告消失,并且近似值越来越近,但仍然很糟糕。

我做错了什么?如何对quakes$stations数据进行近似计算?

1 个答案:

答案 0 :(得分:0)

问题出在llValue的分配错误。我尝试使用正态分布来近似对数正态分布。

地震数据集的台站可以通过以下函数进行估算

library(maxLik)
attach(quakes)

llf_dlnorm <- function(param) {
  mu <- param[ 1 ]
  sigma <- param[ 2 ]
  llValue <- dlnorm(stations, mean=mu, sd=sigma, log=TRUE)
  return(sum(llValue))
}

ml_dlnorm <- maxLik(llf_dlnorm, start = c(mu=mean(stations), sigma=sd(stations)))

x<-seq(0, 150, by=0.01)
hist(stations, prob=T)
lines(x,dlnorm(x, ml_dlnorm$estimate[1], ml_dlnorm$estimate[2]), col="blue",lwd=2)