Аппроксимация данных с помощью библиотеки maxLik.Произведено NaNs - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь сделать аппроксимацию данных для 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 голосов
/ 04 апреля 2019

Проблема была в неправильном распределении для 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...