νt
νt
set.seed(1234)
n <- 10
x <- rt(n, df=2.5)
make_loglik <- function(x)
Vectorize( function(nu) sum(dt(x, df=nu, log=TRUE)) )
loglik <- make_loglik(x)
plot(loglik, from=1, to=100, main="loglikelihood function for df parameter", xlab="degrees of freedom")
abline(v=2.5, col="red2")
n
Lassen Sie uns einige Simulationen versuchen:
t_nu_mle <- function(x) {
loglik <- make_loglik(x)
res <- optimize(loglik, interval=c(0.01, 200), maximum=TRUE)$maximum
res
}
nus <- replicate(1000, {x <- rt(10, df=2.5)
t_nu_mle(x) }, simplify=TRUE)
> mean(nus)
[1] 45.20767
> sd(nus)
[1] 78.77813
Das Anzeigen der Schätzung ist sehr instabil (im Histogramm befindet sich ein beträchtlicher Teil der geschätzten Werte an der Obergrenze für die Optimierung von 200).
Wiederholen mit einer größeren Stichprobe:
nus <- replicate(1000, {x <- rt(50, df=2.5)
t_nu_mle(x) }, simplify=TRUE)
> mean(nus)
[1] 4.342724
> sd(nus)
[1] 14.40137
Das ist viel besser, aber der Mittelwert liegt immer noch weit über dem wahren Wert von 2,5.
Denken Sie dann daran, dass dies eine vereinfachte Version des eigentlichen Problems ist, bei dem auch Standort- und Skalenparameter geschätzt werden müssen.
tν