Ich muss eine Weibull-Verteilung auf einige Daten parametrisieren. Daher verwende ich die Maximum-Likelihood-Estimation (MLE) aus dem fitdistrplus-Paket in R. Ich wollte jedoch verstehen, was im Paket getan wird, und habe daher neben der Verwendung des Pakets zwei manuelle Lösungen ausprobiert, um die von angegebenen MLE-Schätzungen zu überprüfen Fitdist.
Zusammenfassend sind meine Ansätze:
(i) Verwenden Sie die Funktion fitdist mit der Methode "MLE".
(ii) Lösen Sie die partiellen Ableitungen der Wahrscheinlichkeitsfunktion
(iii) Minimieren Sie die negative Wahrscheinlichkeit mithilfe der Optimierungsfunktion
Simulieren Sie zunächst einige Daten:
n <- 1e4
set.seed(1)
dat <- rweibull(n, shape=0.8, scale=1.2)
Ansatz 1: Wenden Sie das fitdistrplus-Paket an:
library(fitdistrplus)
A1 <- fitdist(dat, "weibull", method="mle")$estimate
A1
shape scale
0.7914886 1.2032989
Ansatz 2:
Als Weibull-Dichte haben
,
Die partiellen Ableitungen sind:
Suchen Sie nach den Wurzeln der oben genannten partiellen Ableitungen:
weib1 <- function(c) { 1/c - sum(dat^c*log(dat))/sum(dat^c) + 1/n*sum(log(dat)) }
shape <- uniroot(weib1, c(0,10), tol=1e-12)$root
scale <- (1/n*sum(dat^shape))^(1/shape)
A2 <- c(shape, scale)
A2
[1] 0.7914318 1.2033179
Ansatz 3: Suchen Sie nach den Parametern, die die negative Log-Wahrscheinlichkeit minimieren:
fobj <- function(params){
-sum(log(dweibull(dat, params[1], params[2])))
}
A3 <- optim(c(0.5, 1), fobj)$par
A3
[1] 0.7913756 1.2032748
Beim Vergleich der Ansätze unterscheiden sich die Parameterschätzungen (A1, A2, A3) in der vierten Dezimalstelle. In Anbetracht der Fitdist-Dokumentation hätte ich erwartet, dass A1 und A3 die gleichen Schätzungen liefern, da beide optim verwenden.
Daher sind meine Fragen:
Welche Zielfunktion wird von fitdist verwendet und wie kann ich Ansatz 3 ändern, um genau die gleichen Schätzungen wie fitdist zu erhalten? Und was wäre im Allgemeinen der bevorzugte Ansatz? Ich gehe davon aus, dass das Lösen der partiellen Ableitungen der sauberste Ansatz ist.
quelle