Bootstrap, Monte Carlo

12

Fiz a seguinte pergunta como parte dos trabalhos de casa:

Projete e implemente um estudo de simulação para examinar o desempenho do bootstrap para obter intervalos de confiança de 95% na média de uma amostra univariada de dados. Sua implementação pode estar em R ou SAS.

Os aspectos de desempenho que você pode querer considerar são a cobertura do intervalo de confiança (ou seja, qual a proporção de vezes que o intervalo de confiança contém a média verdadeira) e a variação de Monte Carlo (ou seja, quanto os limites de confiança superior e inferior variam entre as simulações) '

Alguém sabe como abordar o aspecto da variação de Monte Carlo disso? Parece que nem consigo elaborar um algoritmo ou algo assim. Tem a ver com a integração de Monte Carlo? Obrigado!

Sarah
fonte

Respostas:

18

Essa confusão entre os procedimentos de autoinicialização e os procedimentos de Monte Carlo permanece recorrente, portanto, talvez este seja o melhor lugar para resolver isso. (Os exemplos de Rcódigo também podem ajudar na lição de casa.)

Considere esta implementação do bootstrap em 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)
}

Uma rápida olhada confirmará que este é um cálculo determinístico : nenhum valor aleatório é gerado ou usado. (Deixarei os detalhes de seu funcionamento interno para os leitores interessados ​​descobrirem por si mesmos.)

Os argumentos para bootsão um lote de dados numéricos na matriz xe uma referência ta uma função (que pode ser aplicada a matrizes exatamente como x) para retornar um único valor numérico; em outras palavras, té uma estatística . Ele gera todas as amostras possíveis com substituição xe aplica t- se a cada uma delas, produzindo um número para cada amostra: essa é a inicialização em poucas palavras. O valor de retorno é uma matriz que representa a distribuição exata de autoinicialização da tamostra x.

Como um pequeno exemplo , vamos inicializar a média para uma amostra x= c(1,3):

> boot(c(1,3), mean)
> [1] 1 2 2 3

2(1,3)(1,1)(1,3)(3,1)(3,3)boottt1223, respectivamente, conforme mostrado na saída.

(1,3,3,4,7)

hist(boot(c(1,3,3,4,7), sd))

Histograma do SD

5

> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
     95% 
3.835870 

O resultado para esta amostra aleatória específica é 3.83587. Isso é definitivo: se você ligasse bootnovamente com o mesmo conjunto de dados, a resposta seria exatamente a mesma. Mas como a resposta pode mudar com diferentes amostras aleatórias? Descubra repetindo esse processo algumas vezes e desenhando um histograma dos resultados:

> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)

Histograma de simulações

01010/122.887

> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75

Mas isso não chega nem perto dos 95% nominais especificados (e esperávamos)! Esse é um valor da simulação: ele compara nossas esperanças com o que realmente está acontecendo. (Por que a discrepância? Eu acredito que é porque a inicialização de um SD não funciona bem com amostras muito pequenas.)

Reveja

  • As estatísticas de bootstrap são conceitualmente iguais a qualquer outra estatística, como uma média ou desvio padrão; eles tendem a demorar muito tempo para calcular. (Veja a mensagem de aviso no bootcódigo!)

  • A simulação de Monte-Carlo pode ser útil para estudar como uma estatística de bootstrap varia devido à aleatoriedade na obtenção de amostras. A variação observada nessa simulação é devida à variação nas amostras, não à variação no bootstrap.

  • nnn

whuber
fonte
+1 Isso é muito bom. Eu não acho que poderia ter feito melhor! Gostaria de acrescentar que tenho alguns trabalhos sobre o desempenho do bootstrap na estimativa da taxa de erro e para intervalos de confiança ao estimar variações. Estes resultados podem ser encontrados na segunda edição do meu bootstrap livro e meu livro sobre bootstrapping com aplicações em R.
Michael R. Chernick
Ligações Amazon para livros está aqui: amazon.com/... amazon.com/Introduction-Bootstrap-Methods-Applications/dp/...
Michael R. Chernick
Eu diria apenas que a idéia é simular dados de distribuições conhecidas e aplicar o procedimento de bootstrap de interesse (por exemplo, intervalos de confiança para um parâmetro ou estimativa da taxa de erro de um classificador) e você pode avaliar quão bem ele funciona porque sabe a verdade.
Michael R. Chernick
5

O bootstrap é uma técnica de Monte Carlo, na medida em que envolve algum tipo de amostragem aleatória. Se você executar o bootstrap duas vezes no mesmo conjunto de dados, obterá respostas diferentes. Quanto mais amostras você usar no seu bootstrap, menor será a variação.

A cobertura refere-se à variação dos resultados em diferentes conjuntos de dados da mesma distribuição hipotética de amostragem.

Simon Byrne
fonte
obrigado, assumirei que significa apenas criar código para ver se os limites de confiança variam entre as simulações!
21412 Sarah
7
Para ser mais preciso (pedante?), Devemos esclarecer que o bootstrap não é per se uma técnica de Monte Carlo. No entanto, geralmente é aproximado usando a simulação de Monte Carlo, já que geralmente não é possível calcular as quantidades de interesse específicas. Acho a redação do problema muito propensa a erros de interpretação também! É preciso ter cuidado para distinguir o erro de amostragem do erro de aproximação de Monte Carlo . O último é sensatamente estimado repetindo a aproximação de inicialização do MC muitas vezes na mesma amostra, como você aponta. :)
cardeal
1

Também não tenho certeza do que se entende exatamente por " variação de Monte Carlo ". Certamente, deve ser possível observar quanta variação há entre iterações em coisas como o valor do limite superior (ou inferior), por exemplo (dica). Talvez eles só querem que você faça isso no Monte Carlo, e não no bootstrap? Isso não é um requisito que eu teria para um exercício, no entanto. Talvez seja melhor perguntar o que se entende por essa frase.

Repor a Monica
fonte
Obrigado pela ajuda! Talvez eu apenas olhe para a variação entre os limites superior e inferior por enquanto e pergunte sobre Monte Carlo mais tarde. Agora é só trabalhar para fora como eu vou sobre isso ..
Sarah
Existem várias possibilidades aqui. Um é superior-inferior (ou seja, a diferença). Minha interpretação do fraseado na pergunta é variação na parte superior e variação na parte inferior (ou seja, 2 variações diferentes), mas suponho que não tenha certeza. Em uma nota diferente, faz parte da sua pergunta como conduzir simulação de MC em R?
gung - Restabelece Monica
Cheguei à conclusão de que ele estava procurando duas variações diferentes também, então acho que vou tentar isso!
21312 Sarah
1
É justo, o que eu estou pensando agora é: você está pronto para ir neste momento ou precisa de dicas adicionais sobre como abordar o que achamos que a pergunta está pedindo?
gung - Restabelece Monica
1
Então, em cada iteração, você está armazenando os limites superior e inferior (dica)?
gung - Restabelece Monica
1

Meu entendimento desta tarefa de casa é que ele está pedindo para você fazer uma simulação de Monte Carlo para uma determinada técnica estatística. Ou seja, você simula vários conjuntos de dados aleatórios, aplica essa técnica a esses conjuntos de dados e armazena os números para resumir posteriormente de maneira conveniente (médias, probabilidades simuladas etc.)

Agora, a técnica em questão é o bootstrap, que envolve a simulação de Monte Carlo (a menos que, como demonstrado pela whuber, você seja solicitado a executar o bootstrap exato, o que é altamente improvável). Portanto, como resultado de suas simulações, você pode armazenar a média da amostra, o desvio padrão da amostra e os limites do intervalo de confiança para a média obtida pelo bootstrap.

n=10

StasK
fonte
3
Uma coisa que aprendi ao trabalhar com o bootstrap exato é que o IC da teoria normal padrão geralmente funciona muito melhor com amostras pequenas, mesmo quando estão distorcidas. O bootstrap se destaca com grandes amostras: a teoria é assintótica, não exata.
whuber
2
@ Whuber, é uma observação interessante. Normalmente, enfatizo a natureza assintótica do bootstrap (consulte o livro The Bootstrap e Edgeworth Expansions, de Peter Hall, para entender o porquê), mas não consegui fazê-lo dessa vez.
StasK