```{r} n = 100 Z = sample.int(3, n, replace=T) ``` ```{r} mu1 = -3 mu2 = 0 mu3 = 1 sigma12 = 1 sigma22 = 1 sigma32 = 0.03 X = rnorm(n, mu1, sqrt(sigma12)) X[Z == 2] = rnorm(sum(Z == 2), mu2, sqrt(sigma22)) X[Z == 3] = rnorm(sum(Z == 3), mu3, sqrt(sigma32)) ``` ```{r} plot(density(X, bw = 0.1), ylim = c(0, 0.85), main = 'Estimation de la densité') rug(X) x = seq(-6, 2, length.out = 100) points( x, (dnorm(x, mu1, sqrt(sigma12)) + dnorm(x, mu2, sqrt(sigma22)) + dnorm(x, mu3, sqrt(sigma32))) / 3, type = 'l', col = 'darkgreen' ) legend( 'topleft', c('Vraie densité', 'Estimation'), lty = c(1, 1), col = c('darkgreen', 1)) ``` La valeur 0. semble donner une meilleure estimation. ```{r} plot( density(X, bw = 'SJ'), ylim = c(0, 0.85), main = 'Estimation de la densité' ) lines(density(X, bw = 'ucv'), col = 2) lines(density(X, bw = 'bcv'), col = 4) rug(X) x = seq(-6, 2, length.out = 100) points( x, (dnorm(x, mu1, sqrt(sigma12)) + dnorm(x, mu2, sqrt(sigma22)) + dnorm(x, mu3, sqrt(sigma32))) / 3, type = 'l', col = 'darkgreen' ) legend( 'topleft', c('Vraie densité', 'SJ', 'ucv', 'bcv'), lty = rep(1, 4), col = c('darkgreen', 1, 2, 4)) ``` La validation croisée non biaisée (UCV) semble donner les meilleurs résultats.. ```{r} kmax = 50 H = (1:kmax)^2 / (n * sqrt(2 * pi)) hmin = min(H) p = 5000 fhat = matrix(NA, kmax, p) fhatmin = density(X, bw = hmin, n = p) x = fhatmin$x fhat[1, ] = fhatmin$y for (j in 2:kmax) { fhat[j, ] = density(X, bw = H[j], n = p)$y } # Calcul du critere PCO b = rep(NA, kmax) v = rep(NA, kmax) crit = rep(NA, kmax) for (k in 1:kmax) { b[k] = mean((fhat[k, ] - fhat[1, ])^2) v[k] = 2 * mean(dnorm(x, sd = hmin) * dnorm(x, sd = H[k])) / n crit[k] = b[k] + v[k] } khat = which.min(crit) hhat = H[khat] fhhat = fhat[khat, ] plot( x, fhhat, main = paste("Minimum atteint pour h=", signif(hhat, 2)), xlab = 't', ylab = expression(hat(f)[hat(h)]), type = 'l' ) points( x, (dnorm(x, mu1, sqrt(sigma12)) + dnorm(x, mu2, sqrt(sigma22)) + dnorm(x, mu3, sqrt(sigma32))) / 3, type = 'l', col = 'darkgreen', lwd = 2 ) ``` ```{r} plot(density(precip, bw = 'ucv')) rug(precip) ``` Les données sont bimodales. On décèle deux groupes de villes : un groupe avec des précipitations situées autour de 15 inches avec une grande dispersion et un autre groupe avec des précipitations moyennes situées autours de 40 inches. ```{r} plot(density(faithful[, 1], bw = 'ucv')) rug(faithful[, 1]) ``` On distingue là aussi deux groupes : un groupe de geysers ayant un temps d'éruption autour de 2 mins et un autre 4 mins/4 mins 30. La règle du pouce donne ds estimateurs très différents de la validation croisée et de la méthode de Sheather et Jones.