Cette confusion entre les procédures de bootstrap et les procédures de Monte-Carlo continue de se reproduire, donc c'est peut-être un meilleur endroit pour y remédier. (Les exemples de R
code peuvent également aider avec les devoirs.)
Considérez cette implémentation du bootstrap dans R
:
boot <- function(x, t) { # Exact bootstrap of procedure t on data x
n <- length(x) # Must lie between 2 and 7 inclusive.
if (n > 7) {
stop("Sample size exceeds 7; use an approximate method instead.")
}
p <- c(n, 1:(n-1))
a <- rep(x, n^(n-1))
dim(a) <- rep(n, n)
y <- as.vector(a)
while (n > 1) {
n <- n-1
a <- aperm(a, p)
y <- cbind(as.vector(a), y)
}
apply(y, 1, t)
}
Un coup d'œil rapide confirmera qu'il s'agit d'un calcul déterministe : aucune valeur aléatoire n'est générée ou utilisée. (Je laisserai les détails de son fonctionnement interne aux lecteurs intéressés pour qu'ils les découvrent par eux-mêmes.)
Les arguments de boot
sont un lot de données numériques dans le tableau x
et une référence t
à une fonction (qui peut être appliquée à des tableaux exactement comme x
) pour renvoyer une seule valeur numérique; en d'autres termes, t
est une statistique . Il génère tous les échantillons possibles avec remplacement à partir de x
et s'applique t
à chacun d'eux, produisant ainsi un numéro pour chacun de ces échantillons: c'est le bootstrap en bref. La valeur de retour est un tableau représentant la distribution d'amorçage exacte de t
pour l'échantillon x
.
À titre d'exemple minuscule , amorçons la moyenne d'un échantillon x
= c(1,3)
:
> boot(c(1,3), mean)
> [1] 1 2 2 3
Il y a en effet quatre échantillons possibles de taille avec remplacement de ; à savoir, , , et . les génère tous (dans l'ordre qui vient d'être indiqué) et s'applique à chacun d'eux. Dans ce cas, calcule la moyenne et ceux-ci se révèlent être respectivement , , et , comme indiqué dans la sortie.( 1 , 3 )2( 1 , 3 )( 1 , 3 ) ( 3 , 1 ) ( 3 , 3 ) 1 2 2 3( 1 , 1 )( 1 , 3 )( 3 , 1 )( 3 , 3 )boot
t
t
1223
Où vous allez à partir d'ici dépend de la façon dont vous souhaitez utiliser le bootstrap. Les informations complètes sur le bootstrap sont contenues dans ce tableau de sortie, donc c'est généralement une bonne idée de l'afficher. Voici un exemple où l'écart-type est bootstrapé à partir de l'échantillon :( 1 , 3 , 3 , 4 , 7 )
hist(boot(c(1,3,3,4,7), sd))
Nous sommes maintenant prêts à parler de simulation de Monte Carlo. Supposons, par exemple, que nous allions bootstraper une limite de confiance supérieure de 95% sur la SD à partir d'un échantillon de en utilisant le 95e centile supérieur de sa distribution bootstrap. Quelles propriétés cette procédure aurait-elle? Une façon de le savoir est de supposer que l'échantillon a été obtenu de manière aléatoire à partir, disons, d'une distribution uniforme. (L'application indiquera souvent ce qu'est une hypothèse de distribution raisonnable; ici, j'en ai choisi arbitrairement une qui est simple pour le calcul mais pas facile à traiter analytiquement.) Nous pouvons simuler ce qui se passe en prenant un tel échantillon et en calculant l'UCL:5
> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
95%
3.835870
Le résultat pour cet échantillon aléatoire particulier est de 3,83587. C'est certain: si vous appeliez à boot
nouveau avec le même ensemble de données, la réponse serait exactement la même. Mais comment la réponse pourrait-elle changer avec différents échantillons aléatoires? Découvrez-le en répétant ce processus plusieurs fois et en dessinant un histogramme des résultats:
> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)
Si nous faisions un autre ensemble de simulations, les tirages au sort seraient différents, créant un histogramme (légèrement) différent - mais pas très différent de celui-ci. Nous pouvons l'utiliser avec une certaine confiance pour comprendre comment fonctionne l'UCL d'amorçage de la SD. Pour référence, notez que l'écart type d'une distribution uniforme (couvrant la plage de à comme spécifié ici) est égal à . Comme on pourrait l'espérer pour toute UCL digne de ce nom, la majorité (les trois quarts ou 0,75) des valeurs de l'histogramme dépassent cela:10 10 / √0dix10 / 12--√≈ 2,888
> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75
Mais ce n'est pas du tout le 95% nominal que nous avons spécifié (et espérions)! C'est une valeur de la simulation: elle compare nos espoirs à ce qui se passe réellement. (Pourquoi la différence? Je pense que c'est parce que l'amorçage d'une SD ne fonctionne pas bien avec de très petits échantillons.)
La revue
Les statistiques de bootstrap sont conceptuellement les mêmes que toute autre statistique comme une moyenne ou un écart-type; ils ont juste tendance à prendre beaucoup de temps à calculer. (Voir le message d'avertissement dans le boot
code!)
La simulation Monte-Carlo peut être utile pour étudier comment une statistique de bootstrap varie en raison de l'aléatoire dans l'obtention d'échantillons. La variation observée dans une telle simulation est due à la variation des échantillons et non à la variation du bootstrap.
(Non illustré ici) Parce que les statistiques de bootstrap peuvent prendre beaucoup de calculs (apparemment, jusqu'à calculs pour des échantillons de taille ), il est commode d' approximer la distribution de bootstrap. Cela se fait généralement en créant un programme "boîte noire" pour obtenir une valeur au hasard à partir de la vraie distribution d'amorçage et en appelant ce programme à plusieurs reprises. La sortie collective se rapproche de la distribution exacte. L'approximation peut varier en raison du caractère aléatoire dans la boîte noire - mais cette variation est un artefact de la procédure d'approximation. Il n'est pas (conceptuellement) inhérent à la procédure de bootstrap elle-même. nnnn
Le bootstrap est une technique de Monte Carlo, en ce qu'il implique un certain type d'échantillonnage aléatoire. Si vous exécutez le bootstrap deux fois sur le même ensemble de données, vous obtiendrez des réponses différentes. Plus vous utilisez d'échantillons dans votre bootstrap, moins vous obtiendrez de variations.
La couverture fait référence à la variation des résultats sur différents ensembles de données de la même distribution d'échantillonnage hypothétique.
la source
Je ne sais pas non plus ce que l'on entend exactement par " variation de Monte-Carlo " en soi. Il devrait certainement être possible d'examiner la variation entre les itérations dans des choses comme la valeur de la limite supérieure (ou inférieure), par exemple (indice). Peut-être qu'ils veulent seulement que vous fassiez cela pour le Monte Carlo, et non le bootstrap? Ce n'est pas une exigence que j'aurais pour un exercice, cependant. Il vaut peut-être mieux demander ce que signifie cette phrase.
la source
Ma compréhension de ce devoir est qu'il vous demande de faire une simulation de Monte Carlo pour une certaine technique statistique. Autrement dit, vous simulez un ensemble d'ensembles de données aléatoires, appliquez cette technique à ces ensembles de données et stockez les nombres pour les résumer plus tard de manière pratique (moyennes, probabilités simulées, etc.)
Maintenant, la technique en question est le bootstrap, qui implique une simulation Monte Carlo (sauf si, comme cela a été démontré, on vous demande d'effectuer le bootstrap exact, ce qui est très peu probable). Ainsi, en tant que résultats de vos simulations, vous pouvez stocker la moyenne de l'échantillon, l'écart-type de l'échantillon et les limites de l'intervalle de confiance pour la moyenne obtenue par le bootstrap.
la source