Bootstrap, Monte Carlo

12

On m'a posé la question suivante dans le cadre des devoirs:

Concevoir et mettre en œuvre une étude de simulation pour examiner les performances du bootstrap pour obtenir des intervalles de confiance à 95% sur la moyenne d'un échantillon univarié de données. Votre implémentation peut être en R ou SAS.

Les aspects des performances que vous voudrez peut-être examiner sont la couverture de l'intervalle de confiance (c'est-à-dire la proportion de fois où l'intervalle de confiance contient la vraie moyenne) et la variation de Monte Carlo (c'est-à-dire, dans quelle mesure les limites de confiance supérieure et inférieure varient-elles entre les simulations) '

Quelqu'un sait-il comment aborder la variation Monte Carlo de cela? Je n'arrive même pas à trouver un algorithme ou quoi que ce soit. Est-ce lié à l'intégration de Monte Carlo? Merci!

Sarah
la source

Réponses:

18

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 Rcode 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 bootsont un lot de données numériques dans le tableau xet 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, test une statistique . Il génère tous les échantillons possibles avec remplacement à partir de xet 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 tpour 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)boottt1223

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))

Histogramme du 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 à bootnouveau 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)

Histogramme des simulations

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 / 01010/122.887

> 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 bootcode!)

  • 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

whuber
la source
+1 C'est très bien. Je ne pense pas que j'aurais pu mieux faire! J'ajouterais simplement que j'ai quelques articles sur les performances du bootstrap dans l'estimation du taux d'erreur et pour les intervalles de confiance lors de l'estimation des variances. Ces résultats peuvent être trouvés dans la deuxième édition de mon livre sur les méthodes de bootstrap et mon livre sur le bootstrap avec des applications pour R.
Michael R. Chernick
Les liens Amazon vers les livres sont ici: amazon.com/… amazon.com/Introduction-Bootstrap-Methods-Applications/dp/…
Michael R. Chernick
Je dirais simplement que l'idée est de simuler des données à partir de distributions connues en appliquant la procédure de bootstrap d'intérêt (par exemple, les intervalles de confiance pour un paramètre ou l'estimation du taux d'erreur d'un classificateur) et vous pouvez évaluer son efficacité parce que vous connaissez la vérité.
Michael R. Chernick
5

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.

Simon Byrne
la source
merci, je suppose que cela signifie simplement trouver du code pour voir si les limites de confiance varient entre les simulations!
Sarah
7
Pour être précis (pédant?), Il faut préciser que le bootstrap n'est pas en soi une technique de Monte Carlo. Cependant, il est généralement approximé en utilisant la simulation de Monte Carlo car il n'est pas souvent traçable de calculer les quantités particulières d'intérêt. Je trouve que la formulation du problème est également sujette à une mauvaise interprétation! Il faut faire attention à distinguer l'erreur d'échantillonnage de l'erreur d' approximation de Monte Carlo . Ce dernier n'est estimé que de manière raisonnable en répétant l'approximation de bootstrap MC plusieurs fois sur le même échantillon, comme vous le faites remarquer. :)
cardinal
1

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.

gung - Réintégrer Monica
la source
Merci de votre aide! Je vais peut-être regarder la variation entre les limites supérieure et inférieure pour l'instant et poser des questions sur Monte Carlo plus tard. Maintenant, juste pour savoir comment je m'y prends ..
Sarah
Il y a plusieurs possibilités ici. L'un est supérieur-inférieur (c'est-à-dire la différence). Mon interprétation de la formulation de la question est la variation en haut et la variation en bas (c'est-à-dire 2 variations différentes), mais je suppose que je ne peux pas être sûr. Sur une note différente, est-ce une partie de votre question comment effectuer une simulation MC dans R?
gung - Rétablir Monica
Je suis arrivé à la conclusion qu'il cherchait également 2 variantes différentes, alors pensez que je vais essayer ça!
Sarah
1
Très bien, ce que je me demande maintenant, c'est que vous êtes prêt à partir à ce stade, ou avez-vous besoin de conseils supplémentaires sur la façon d'aborder ce que nous avons deviné que la question demande?
gung - Rétablir Monica
1
Donc, à chaque itération, stockez-vous les limites supérieure et inférieure (indice)?
gung - Rétablir Monica
1

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.

n=10

StasK
la source
3
Une chose que j'ai apprise en travaillant avec le bootstrap exact est que le CI standard de théorie normale fonctionnera souvent beaucoup mieux avec de petits échantillons même lorsqu'ils sont asymétriques. Le bootstrap prend tout son sens avec de grands échantillons: la théorie est asymptotique, pas exacte.
whuber
2
@whuber, c'est une observation intéressante. Je souligne habituellement la nature asymptotique du bootstrap (voir le livre The Peter Bootstrap and Edgeworth Expansions de Peter Hall pour comprendre pourquoi), mais je n'ai pas réussi à le faire cette fois.
StasK