Métodos de reamostragem / simulação: monte carlo, bootstrapping, jackknifing, validação cruzada, testes de randomização e testes de permutação


74

Estou tentando entender a diferença entre diferentes métodos de reamostragem (simulação de Monte Carlo, inicialização paramétrica, inicialização não paramétrica, jackknifing, validação cruzada, validação cruzada, testes de randomização e testes de permutação) e sua implementação no meu próprio contexto usando R.

Digamos que eu tenha a seguinte situação - desejo executar ANOVA com uma variável Y ( Yvar) e uma variável X ( Xvar). Xvaré categórico. Estou interessado nas seguintes coisas:

(1) Significado dos valores-p - taxa de descoberta falsa

(2) tamanho do efeito dos Xvarníveis

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
Xvar <- c(rep("A", 5),  rep("B", 5),    rep("C", 5))
mydf <- data.frame (Yvar, Xvar)

Você poderia me explicar como explicar as diferenças de amostragem com exemplos trabalhados explícitos, como esses métodos de reamostragem funcionam?

Edições: Aqui estão minhas tentativas:

Bootstrap 10 amostras de bootstrap, número de amostras com substituição, significa que as amostras podem ser repetidas

boot.samples <- list()
for(i in 1:10) {
   t.xvar <- Xvar[ sample(length(Xvar), length(Xvar), replace=TRUE) ]
   t.yvar <- Yvar[ sample(length(Yvar), length(Yvar), replace=TRUE) ]
   b.df <- data.frame (t.xvar, t.yvar) 
   boot.samples[[i]] <- b.df 
}
str(boot.samples)
 boot.samples[1]

Permutação: 10 amostras de permutação, número de amostras sem substituição

 permt.samples <- list()
    for(i in 1:10) {
       t.xvar <- Xvar[ sample(length(Xvar), length(Xvar), replace=FALSE) ]
       t.yvar <- Yvar[ sample(length(Yvar), length(Yvar), replace=FALSE) ]
       b.df <- data.frame (t.xvar, t.yvar) 
       permt.samples[[i]] <- b.df 
    }
    str(permt.samples)
    permt.samples[1]

Simulação Monte Caro

Embora o termo "reamostragem" seja freqüentemente usado para se referir a qualquer simulação repetida de amostragem aleatória ou pseudo-aleatória, quando a "reamostragem" é feita a partir de uma distribuição teórica conhecida, o termo correto é simulação de "Monte Carlo".

Não tenho certeza sobre todos os termos acima e se minhas edições acima estão corretas. Encontrei algumas informações sobre o jacknife, mas não consegui domar a situação.


3
Jackknife é um antecessor mais simples do bootstrap. en.wikipedia.org/wiki/Jackknife_(statistics)
EngrStudent

4
Mais precisamente: canivete é reamostragem leave-one-out [mas não utilizados para a validação cruzada]
cbeleites

Respostas:


122

Podemos encontrar diferentes métodos de reamostragem , ou métodos vagamente chamados de " simulação ", que dependem da reamostragem ou do embaralhamento das amostras. Pode haver diferenças de opinião com relação à terminologia adequada, mas a discussão a seguir tenta generalizar e simplificar o que está disponível na literatura apropriada:

Os métodos de reamostragem são usados ​​em (1) estimar a precisão / exatidão das estatísticas da amostra através do uso de subconjunto de dados (por exemplo, Jackknifing) ou desenhar aleatoriamente com a substituição de um conjunto de pontos de dados (por exemplo, inicialização) (2) Trocar etiquetas nos pontos de dados ao realizar significância testes ( testes de permutação, também chamados testes exatos, testes de randomização ou testes de re-randomização) (3) Validando modelos usando subconjuntos aleatórios (inicialização, validação cruzada) (consulte a Wikipédia: métodos de reamostragem )

BOOTSTRAPING

"O bootstrapping é um método estatístico para estimar a distribuição amostral de um estimador por amostragem com substituição da amostra original". O método atribui medidas de precisão (definidas em termos de viés , variação , intervalos de confiança , erro de previsão ou alguma outra medida) a estimativas amostrais.

A idéia básica do bootstrapping é que a inferência sobre uma população a partir de dados da amostra ( amostra → população ) possa ser modelada através da nova amostragem dos dados da amostra e da realização de inferência ((amostragem → amostra)). Como a população é desconhecida, o erro verdadeiro em uma estatística de amostra em relação ao seu valor populacional é incognoscível. Nas reamostragens de bootstrap, a "população" é de fato a amostra, e isso é conhecido; portanto, a qualidade de inferência a partir de dados resample → amostra 'verdadeira' é mensurável." ver wikipedia

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)

#To generate a single bootstrap sample
sample(Yvar, replace = TRUE) 

 #generate 1000 bootstrap samples
boot <-list()
for (i in 1:1000) 
   boot[[i]] <- sample(Yvar,replace=TRUE)

Em problemas univariados, geralmente é aceitável redefinir as observações individuais com substituição ("reamostragem de caso"). Aqui, reamostramos os dados com substituição, e o tamanho da reamostragem deve ser igual ao tamanho do conjunto de dados original.

Nos problemas de regressão, a reamostragem de caso refere-se ao esquema simples de reamostrar casos individuais - geralmente linhas de um conjunto de dados em problemas de regressão, as variáveis ​​explicativas são geralmente fixas ou, pelo menos, observadas com mais controle do que a variável de resposta. Além disso, o intervalo das variáveis ​​explicativas define as informações disponíveis a partir delas. Portanto, reamostrar casos significa que cada amostra de bootstrap perderá algumas informações (consulte a Wikipedia ). Portanto, será lógico fazer uma amostra justa das linhas dos dados Yvar.

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
Xvar <- c(rep("A", 5),  rep("B", 5),    rep("C", 5))
mydf <- data.frame (Yvar, Xvar)    

boot.samples <- list()
for(i in 1:10) {
   b.samples.cases <- sample(length(Xvar), length(Xvar), replace=TRUE) 
   b.mydf <- mydf[b.samples.cases,] 
   boot.samples[[i]] <- b.mydf
}
str(boot.samples)
 boot.samples[1]

Você pode ver que alguns casos são repetidos enquanto estamos amostrando com substituição.

" Bootstrap paramétrico - um modelo paramétrico é ajustado aos dados, geralmente por probabilidade máxima, e amostras de números aleatórios são retiradas desse modelo ajustado . Geralmente, a amostra retirada tem o mesmo tamanho de amostra que os dados originais. Em seguida, a quantidade ou estimativa , o interesse é calculado a partir desses dados.Este processo de amostragem é repetido muitas vezes como em outros métodos de inicialização.O uso de um modelo paramétrico no estágio de amostragem da metodologia de inicialização leva a procedimentos diferentes dos obtidos pela aplicação da teoria estatística básica inferência para o mesmo modelo. "(consulte Wikipedia ). A seguir, é apresentada uma inicialização paramétrica com suposição de distribuição normal com parâmetros de média e desvio padrão.

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)

# parameters for Yvar 
mean.y <- mean(Yvar)
sd.y <- sd(Yvar)

#To generate a single bootstrap sample with assumed normal distribution (mean, sd)
rnorm(length(Yvar), mean.y, sd.y)

 #generate 1000 bootstrap samples
boot <-list()
for (i in 1:1000) 
   boot[[i]] <- rnorm(length(Yvar), mean.y, sd.y)

Existem outras variantes do bootstrap, consulte a página da wikipedia ou qualquer bom livro estático sobre reamostragem.

JACKNIFE

"O estimador de canivete de um parâmetro é encontrado excluindo sistematicamente cada observação de um conjunto de dados e calculando a estimativa e, em seguida, encontrando a média desses cálculos. Dada uma amostra do tamanho N, a estimativa de canivete é encontrada agregando as estimativas de cada N − 1estimativa na amostra ". veja: wikipedia O seguinte mostra como puxar o canivete Yvar.

jackdf <- list()
jack <- numeric(length(Yvar)-1)

for (i in 1:length (Yvar)){

for (j in 1:length(Yvar)){
     if(j < i){ 
            jack[j] <- Yvar[j]
}  else if(j > i) { 
             jack[j-1] <- Yvar[j]
}
}
jackdf[[i]] <- jack
}
jackdf

"o bootstrap regular e o jackknife, estimam a variabilidade de uma estatística a partir da variabilidade dessa estatística entre subamostras, em vez de suposições paramétricas . Para o jackknife mais geral, o jackknife delete-m observações, o bootstrap pode ser visto como um acaso Ambos produzem resultados numéricos semelhantes, razão pela qual cada um pode ser visto como uma aproximação ao outro. " Veja esta pergunta em Bootstrap vs Jacknife.

ENSAIOS DE RANDOMIZAÇÃO

"Nos testes paramétricos, coletamos amostras aleatoriamente de uma ou mais populações. Fazemos algumas suposições sobre essas populações, mais comumente que elas são normalmente distribuídas com variações iguais. Estabelecemos uma hipótese nula que é enquadrada em termos de parâmetros, geralmente da forma m1 -m2 = 0. Utilizamos nossas estatísticas amostrais como estimativas dos parâmetros populacionais correspondentes e calculamos uma estatística de teste (como no teste) Por exemplo: no teste t de Student - teste de diferenças nas médias quando as variações são desconhecidas, mas são consideradas A hipótese de interesse é essa H0: m1 = m2. Uma hipótese alternativa seria declarada como:HA: m1 < m2. Dadas duas amostras retiradas das populações 1 e 2, assumindo que essas são populações normalmente distribuídas com variâncias iguais, e que as amostras foram coletadas de forma independente e aleatória de cada população, uma estatística cuja distribuição é conhecida pode ser elaborada para testar H0.

Uma maneira de evitar essas suposições distributivas tem sido a abordagem agora chamada de estatísticas não paramétricas, de ordem de classificação, de classificação e de distribuição. Essas estatísticas livres de distribuição são geralmente criticadas por serem menos "eficientes" do que o teste análogo, baseado no pressuposto de que as populações sejam normalmente distribuídas.

Outra abordagem alternativa é a abordagem de randomização - "processo de atribuir classificações aleatoriamente a observações, independentemente do conhecimento de quem amostra é uma observação. Um teste de randomização utiliza esse procedimento, mas o faz operando nas observações e não na articulação. Por esse motivo, a distribuição de uma estatística análoga (a soma das observações em uma amostra) não pode ser facilmente tabulada, embora seja teoricamente possível enumerar essa distribuição "( ver )

Os testes de randomização diferem dos testes paramétricos em quase todos os aspectos. (1) Não há exigência de que tenhamos amostras aleatórias de uma ou mais populações - na verdade, geralmente não temos amostragens aleatórias. (2) Raramente pensamos em termos das populações de onde os dados vieram e não há necessidade de assumir nada sobre normalidade ou homoscedasticidade. (3) Nossa hipótese nula não tem nada a ver com parâmetros, mas é redigida de maneira vaga, pois: por exemplo, a hipótese de que o tratamento não tem efeito sobre o desempenho dos participantes. (4) Como não estamos preocupados com as populações, não estamos preocupados em estimar (ou mesmo testar) as características dessas populações (5). tipo de estatística de teste, no entanto, não comparamos essa estatística com distribuições apresentadas. Em vez de, comparamos com os resultados obtidos quando randomizamos os dados repetidamente nos grupos e calculamos a estatística correspondente para cada randomização. (6) Ainda mais que os testes paramétricos, os testes de randomização enfatizam a importância da atribuição aleatória dos participantes aos tratamentos ".veja .

O tipo de teste de randomização muito popular é o teste de permutação. Se o tamanho da amostra for 12 e 5, a permutação total possível é C(12,5) = 792. Se nossos tamanhos de amostra fossem 10 e 15, mais de 3,2 milhões de arranjos seriam possíveis. Este é o desafio da computação: o que então? Amostra . Quando o universo de arranjos possíveis é muito grande para enumerar, por que não provar arranjos desse universo de forma independente e aleatória? A distribuição da estatística do teste nessas séries de amostras pode ser tabulada, sua média e variância calculadas e a taxa de erro associada a um teste de hipótese estimado.

ENSAIO DE PERMUTAÇÃO

De acordo com a wikipedia "Um teste de permutação (também chamado de teste de randomização , teste de re-randomização ou teste exato ) é um tipo de teste de significância estatística em que a distribuição da estatística do teste sob a hipótese nula é obtida calculando todos os valores possíveis da estatística de teste sob rearranjos dos rótulos nos pontos de dados observados.Existem testes de permutação para qualquer estatística de teste, independentemente de sua distribuição ser ou não conhecida.Portanto, é sempre possível escolher a estatística que melhor discrimina entre hipótese e alternativa e o que minimiza as perdas ".

A diferença entre permutação e autoinicialização é que as autoinicializações são amostradas com substituição e as permutações são exibidas sem substituição . Em qualquer um dos casos, a ordem temporal das observações é perdida e, portanto, o agrupamento por volatilidade é perdido - garantindo assim que as amostras estão sob a hipótese nula de não agrupar volatilidade.

As permutações sempre têm as mesmas observações, portanto, são mais parecidas com os dados originais do que com amostras de autoinicialização. A expectativa é que o teste de permutação seja mais sensível do que um teste de autoinicialização. As permutações destroem o agrupamento de volatilidade, mas não adicionam nenhuma outra variabilidade .

Veja a pergunta sobre permutação versus inicialização - "O teste de permutação é melhor para testar hipóteses e a inicialização é melhor para estimar intervalos de confiança ".

Portanto, para executar a permutação nesse caso, podemos apenas mudar replace = FALSEno exemplo de inicialização acima.

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
     #generate 1000 bootstrap samples
       permutes <-list()
    for (i in 1:1000) 
       permutes[[i]] <- sample(Yvar,replace=FALSE)

No caso de mais de uma variável, apenas escolher as linhas e reorganizar a ordem não fará nenhuma diferença, pois os dados permanecerão os mesmos. Então, reorganizamos a variável y. Algo que você fez, mas acho que não precisamos reorganizar duas vezes xe y variables(como você fez).

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
Xvar <- c(rep("A", 5),  rep("B", 5),    rep("C", 5))
mydf <- data.frame (Yvar, Xvar)

 permt.samples <- list()
    for(i in 1:10) {
       t.yvar <- Yvar[ sample(length(Yvar), length(Yvar), replace=FALSE) ]
       b.df <- data.frame (Xvar, t.yvar) 
       permt.samples[[i]] <- b.df 
    }
    str(permt.samples)
    permt.samples[1]

MÉTODOS MONTE CARLO

"Os métodos de Monte Carlo (ou experimentos de Monte Carlo) são uma ampla classe de algoritmos computacionais que se baseiam em amostragem aleatória repetida para obter resultados numéricos; normalmente, são executadas simulações várias vezes para obter a distribuição de uma entidade probabilística desconhecida. O nome vem da semelhança da técnica ao ato de tocar e gravar os resultados em um cassino real. "ver Wikipedia

"Nas estatísticas aplicadas, os métodos de Monte Carlo são geralmente usados ​​para dois propósitos:

(1) Comparar estatísticas concorrentes para amostras pequenas em condições realistas de dados. Embora as propriedades estatísticas e de erro e potência do tipo I possam ser calculadas para dados extraídos de distribuições teóricas clássicas (por exemplo, curva normal, distribuição de Cauchy) para condições assintóticas (isto é, tamanho infinito da amostra e efeito infinitesimalmente pequeno do tratamento), dados reais geralmente são não tem tais distribuições.

(2) Fornecer implementações de testes de hipóteses que são mais eficientes do que testes exatos, como testes de permutação (que geralmente são impossíveis de calcular) enquanto são mais precisos que os valores críticos para distribuições assintóticas.

Os métodos de Monte Carlo também são um compromisso entre testes aproximados de randomização e permutação . Um teste de aleatorização aproximado é baseado em um subconjunto especificado de todas as permutações (o que implica uma limpeza potencialmente enorme, cujas permutações foram consideradas). A abordagem de Monte Carlo baseia-se em um número especificado de permutações extraídas aleatoriamente ( trocando uma pequena perda de precisão se uma permutação for extraída duas ou mais vezes - pela eficiência de não precisar rastrear quais permutações já foram selecionadas ). "

O teste de MC e de permutação é chamado coletivamente de testes de randomização . A diferença está no MC que amostramos as amostras de permutação, usando todas as combinações possíveis, veja .

VALIDAÇÃO CRUZADA

A idéia além da validação cruzada é que os modelos devem ser testados com dados que não foram usados ​​para se ajustar ao modelo. A validação cruzada é talvez usada com mais frequência no contexto de previsão .

"A validação cruzada é um método estatístico para validar um modelo preditivo. Subconjuntos de dados são mantidos para uso como conjuntos de validação ; um modelo é adequado aos dados restantes (um conjunto de treinamento) e usado para prever o conjunto de validação. a qualidade das previsões nos conjuntos de validação gera uma medida geral da precisão das previsões.

Uma forma de validação cruzada deixa de fora uma única observação de cada vez; isso é semelhante ao canivete. Outro, validação cruzada com dobra K, divide os dados em subconjuntos K; cada um é apresentado por sua vez como o conjunto de validação. "consulte Wikipedia . A validação cruzada geralmente é feita com dados quantitativos. Você pode converter seus dados qualitativos (dados fatoriais) em quantitativos de alguma maneira para ajustar um modelo linear e testar esse modelo. A seguir, é simples estratégia de espera em que 50% dos dados são usados ​​para previsão do modelo, enquanto o restante é usado para teste.Vamos assumir que Xvartambém é uma variável quantitativa.

    Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
    Xvar <- c(rep(1, 5),  rep(2, 5),    rep(3, 5))
    mydf <- data.frame (Yvar, Xvar)
    training.id <- sample(1:nrow(mydf), round(nrow(mydf)/2,0), replace = FALSE)
    test.id <- setdiff(1:nrow(mydf), training.id)
   # training dataset 
    mydf.train <- mydf[training.id]

    #testing dataset 
    mydf.test <- mydf[test.id]

Ao contrário dos testes de inicialização e permutação, o conjunto de dados de validação cruzada para treinamento e teste é diferente. A figura a seguir mostra um resumo da reamostragem em diferentes métodos.

insira a descrição da imagem aqui

Espero que isso ajude um pouco.


23
Isso é impressionante - e especialmente, pois é a sua primeira resposta! Espero que você continue participando aqui e aguardo suas contribuições futuras para o nosso site.
whuber

Esta resposta é tão GRANDE como uma resposta geral. No entanto, alguns dos links parecem abandonados. Alguém tem uma idéia de onde estão os links?
Tintinthong 21/10

7

Aqui está a minha contribuição.

Dados

Yvar <- c(8,9,10,13,12,
          14,18,12,8,9,
          1,3,2,3,4)
Xvar <- rep(LETTERS[1:3], each=5)
mydf <- data.frame(Yvar, Xvar)

Monte Carlo

Vejo Monte Carlo como um método para obter uma distribuição de uma variável aleatória (resultado), que é o resultado de uma função não trivial de outras variáveis ​​aleatórias (entrada). Não vejo imediatamente uma sobreposição com a análise ANOVA atual, provavelmente outros membros do fórum podem dar sua opinião aqui.

Bootstrapping

O objetivo é ter uma idéia da incerteza de uma estatística calculada a partir de uma amostra observada. Por exemplo: podemos calcular que a média da amostra de Yvar é 8,4, mas qual a probabilidade da população de Yvar? O truque é fazer como se a amostra fosse a população e provar várias vezes dessa população falsa.

n <- 1000
bootstrap_means <- numeric(length=n)
for(i in 1:n){
   bootstrap_sample <- sample(x=Yvar, size=length(Yvar), replace=TRUE)
   bootstrap_means[i] <- mean(bootstrap_sample)
}
hist(bootstrap_means)

Acabamos de colher amostras e não assumimos nenhuma distribuição paramétrica. Esta é a auto-inicialização não paramétrica . Se você se sentir confortável em supor, por exemplo, que o Xvar é normalmente distribuído, você também pode obter amostras de uma distribuição normal ( rnorm(...)) usando a média estimada e o desvio padrão, esse seria o auto-ajuste paramétrico .

Outros usuários podem fornecer aplicativos do bootstrap com relação ao tamanho dos efeitos dos Xvarníveis?

Jackknifing

O canivete parece um pouco desatualizado. Apenas para completar, você pode compará-lo mais ou menos ao bootstrap, mas a estratégia está aqui para ver o que acontece se deixarmos de fora uma observação (e repetir isso para cada observação).

Validação cruzada

Na validação cruzada, você divide seu conjunto de dados (geralmente grande) em um conjunto de treinamento e um conjunto de validação, para ver quão bem seu modelo estimado é capaz de prever os valores no conjunto de validação. Pessoalmente, ainda não vi uma aplicação de validação cruzada na ANOVA, então prefiro deixar essa parte para outras pessoas.

Ensaios de randomização / permutação

Esteja avisado, a terminologia não está de acordo. Consulte Diferença entre teste de randomização e teste de permutação .

A hipótese nula seria a de que não há diferença entre as populações dos grupos A, B e C, portanto, não importa se trocamos aleatoriamente os rótulos dos 15 valores de Xvar. Se o valor F originalmente observado (ou outra estatística) não concorda com os obtidos após a troca aleatória de marcadores, então provavelmente importava, e a hipótese nula pode ser rejeitada.

observed_F_value <- anova(lm(Yvar ~ Xvar))$"F value"[1]

n <- 10000
permutation_F_values <- numeric(length=n)

for(i in 1:n){
   # note: the sample function without extra parameters defaults to a permutation
   temp_fit <- anova(lm(Yvar ~ sample(Xvar)))
   permutation_F_values[i] <- temp_fit$"F value"[1]
}

hist(permutation_F_values, xlim=range(c(observed_F_value, permutation_F_values)))
abline(v=observed_F_value, lwd=3, col="red")
cat("P value: ", sum(permutation_F_values >= observed_F_value), "/", n, "\n", sep="")

histograma

Tenha cuidado com a maneira como você reatribui as etiquetas no caso de projetos complexos. Observe também que, no caso de variações desiguais, a hipótese nula de permutabilidade não é verdadeira em primeiro lugar, portanto, esse teste de permutação não seria correto.

Aqui não examinamos explicitamente todas as permutações possíveis dos rótulos; esta é uma estimativa de Monte Carlo do valor-P. Com pequenos conjuntos de dados, você pode passar por todas as permutações possíveis, mas o código R acima é um pouco mais fácil de entender.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.