我正在尝试对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
数据进行近似计算?
答案 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)