Bootstrap Evaluation in R - Source Code

10

Click here to load reader

description

In statistics, bootstrapping is a method for assigning measures of accuracy to sample estimates. This technique allows estimation of the sampling distribution of almost any statistic using only very simple methods. Generally, it falls in the broader class of resampling methods.

Transcript of Bootstrap Evaluation in R - Source Code

Page 1: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 1 of 10

#------------------------------------------------------------------------------# About : Exemplo de comparação entre algoritmos quadráticos e loglineares# Author : Michel A. dos Santos, Maria Helynne e Ana Carla# Date : 30/05/2011 - Maio - 2011#------------------------------------------------------------------------------#------------------------------------------------------------------------------# Carregamento das bibliotecas necessárias para processamento do script#------------------------------------------------------------------------------# Definindo o nome das bibliotecas que devem ser carregadaspkg = c('lattice')

# Carregando bibliotecasprint('Carregando bibliotecas necessárias para execução do script...')for (idx_pkg in 1:length(pkg)){ myimg.msgerr <- paste('A seguinte biblioteca não pôde ser carregada: ', pkg[idx_pkg])if (!require(pkg[idx_pkg], character.only = TRUE)) stop(myimg.msgerr)

} #------------------------------------------------------------------------------# Configurações iniciais do script e inicialização de variáveis: #------------------------------------------------------------------------------#------------------------------------------------------------------------------# Variável de configuração que verifica se os gráficos devem ser salvos #------------------------------------------------------------------------------my.save.result <- TRUE

#------------------------------------------------------------------------------# Variável de configuração que verifica se o dataframe deve ser salvo #------------------------------------------------------------------------------my.data.frame.save.result <- TRUE

#------------------------------------------------------------------------------# Variável de configuração que verifica se os resultados devem ser vistos # através de uma grade. #------------------------------------------------------------------------------my.view.grid.results <- FALSE

#------------------------------------------------------------------------------# Variáveis de controle do problema (variáveis globais)#------------------------------------------------------------------------------

Page 2: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 2 of 10

valor1 <- 0 # Método por analogia | Primeiro momento amostral valor2 <- 0 # Método por analogia | Segundo momento amostralvalormv <- 0 # Máxima verossimilhança

#------------------------------------------------------------------------------# Definição das funções e estruturas implementadas para o problema.#------------------------------------------------------------------------------# Estimador - Teta 1 - Primeiro momento amostralMyU_T1 <- function(X) { return ( 2*mean(X) ) }

# Estimador - Teta 2 - Segundo momento amostralMyU_T2 <- function(X) { return (sqrt(3*mean(X^2))) }

# Estimador - Máxima VerossimilhançaMyU_TMV <- function(X) { return ( max(X) ) }

# Definição da função que calcula o erro quadrático médio (MSE) MyMeanSquaredError <- function(X) { return( (mean(X)-1)^2 + var(X) ) }

# Bootstrap sem o uso de looping de maneira explícitaNotExplicitlyIterativeBootstrap <- function(X, B, func){ t <- func(X) t_bs <- 2*t - mean(unlist(lapply(1:B, function(i) i<- func(sample(X,replace=TRUE))))) return (t_bs)} # Montecarlo sem o uso explicito de looping NotExplicitlyIterativeMontecarlo <- function(number.of.observations = 10, number.of.bootstrap.iterations = 200, length.of.my.vector = 100){ n <- number.of.observations # Número de observações em runif MyNobi <- number.of.bootstrap.iterations # Número de iterações no bootstrap MyLen <- length.of.my.vector # Tamanho do vetor de estimadores

# Criando vetores numéricos e1 <- e2 <- emv <- e1B <- e2B <- emvB <- vector(mode="numeric",length=MyLen)

lapply(1:MyLen, function(r){ X <-runif(n) e1[r] <<- MyU_T1(X)

Page 3: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 3 of 10

e2[r] <<- MyU_T2(X) emv[r] <<- MyU_TMV(X) e1B[r] <<- NotExplicitlyIterativeBootstrap(X, MyNobi, MyU_T1) e2B[r] <<- NotExplicitlyIterativeBootstrap(X, MyNobi, MyU_T2) emvB[r] <<- NotExplicitlyIterativeBootstrap(X, MyNobi, MyU_TMV) }) valor1 <<- ( 1 - (MyMeanSquaredError(e1B) / MyMeanSquaredError(e1)) )*100 valor2 <<- ( 1 - (MyMeanSquaredError(e2B) / MyMeanSquaredError(e2)) )*100 valormv <<- ( 1 - (MyMeanSquaredError(emvB) / MyMeanSquaredError(emv)))*100} # Bootstrap com uso de looping de maneira explícitaExplicitlyIterativeBootstrap <- function(X, B, func){ t <- func(X) vecB <- vector(mode="numeric",length=B) for (b in 1:B) vecB[b] <- func(sample(X,replace=TRUE)) t_bs <- 2*t - mean(vecB)

return (t_bs)} # Montecarlo com uso explicito de looping ExplicitlyIterativeMontecarlo <- function(number.of.observations = 10, number.of.bootstrap.iterations = 200, length.of.my.vector = 100){ n <- number.of.observations # Número de observações em runif MyNobi <- number.of.bootstrap.iterations # Número de iterações no bootstrap MyLen <- length.of.my.vector # Tamanho do vetor de estimadores

e1 <- e2 <- emv <- e1B <- e2B <- emvB <- vector(mode="numeric",length=MyLen) for (r in 1:MyLen) { X <- runif(n) e1[r] <- MyU_T1(X) e2[r] <- MyU_T2(X) emv[r] <- MyU_TMV(X)

Page 4: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 4 of 10

e1B[r] <- ExplicitlyIterativeBootstrap(X, MyNobi, MyU_T1) e2B[r] <- ExplicitlyIterativeBootstrap(X, MyNobi, MyU_T2) emvB[r] <- ExplicitlyIterativeBootstrap(X, MyNobi, MyU_TMV) }

MyMeanSquaredError(e1) MyMeanSquaredError(e2) MyMeanSquaredError(emv) MyMeanSquaredError(e1B) MyMeanSquaredError(e2B) MyMeanSquaredError(emvB)} #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# MAIN - Começo da execução do código.#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Capturando o tempo de inicio da atividade.MyStartTime = Sys.time()

# Executando método montecarlo para um determinado número Nprint("Executando Montecarlo explicitamente iterativo...")my.number.of.observations <- 100my.number.of.bootstrap.iterations <- 200my.length.of.my.vector <- 100ExplicitlyIterativeMontecarlo(my.number.of.observations, my.number.of.bootstrap.iterations, my.length.of.my.vector)

# Capturando o tempo de término das atividade.MyEndTime = Sys.time()

# Visualizando o tempo para processamento do métodoMyMatrixTime <- matrix(c("MyStartTime",MyStartTime, "MyEndTime", MyEndTime, "Total Time:", MyEndTime - MyStartTime), ncol=2, byrow=TRUE)print(MyMatrixTime)if (my.view.grid.results) View( MyMatrixTime, title="Processing Time for Explicit Iterative Montecarlo" ) # Capturando o tempo de inicio da atividade.MyStartTime = Sys.time()

# Executando método montecarlo para um determinado número Nprint("Executando Montecarlo não explicitamente iterativo...")

Page 5: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 5 of 10

my.number.of.observations <- 100my.number.of.bootstrap.iterations <- 200my.length.of.my.vector <- 100NotExplicitlyIterativeMontecarlo(my.number.of.observations, my.number.of.bootstrap.iterations, my.length.of.my.vector)

# Capturando o tempo de término das atividade.MyEndTime = Sys.time()

# Visualizando o tempo para processamento do métodoMyMatrixTime <- matrix(c("MyStartTime",MyStartTime, "MyEndTime", MyEndTime, "Total Time:", MyEndTime - MyStartTime), ncol=2, byrow=TRUE)print(MyMatrixTime)if (my.view.grid.results) View( MyMatrixTime, title="Processing Time for Not Explicit Iterative Montecarlo" ) #------------------------------------------------------------------------------# Produção de amostras obtidas através do método bootstrap. A partir daqui # iremos armazenar o data.frame referente as amostras obtidas através do método# bootstrap e os gráficos gerados a partir do montante de dados final. #------------------------------------------------------------------------------# Estipulando vetor de comparações utilizado no bootstrapmy.start.of.sequence <- 3 # Valor inicial do número de iteraçõesmy.end.of.sequence <- 100 # Parâmetro final de iterações B do bootstrap my.jump.of.sequence <- 5 # Valor do salto dado dentro da seqüênciaMyB = c(seq(my.start.of.sequence, my.end.of.sequence, my.jump.of.sequence))

# Exibindo informações relativas ao parâmetro Bprint("")print("Exibindo informações relativas ao parâmetro B")print(paste("Início do intervalo de avaliação:", my.start.of.sequence))print(paste("Fim do intervalo de avaliação:", my.end.of.sequence))print(paste("Incremento do intervalo de avaliação:", my.jump.of.sequence))print("")

# Exeutando o método montecarlo pela primeira vezprint("Obtendo os B valores necessários para efetivação do método...")print(paste("Avaliação com B igual a:", my.start.of.sequence))NotExplicitlyIterativeMontecarlo(my.number.of.observations, my.start.of.sequence, my.length.of.my.vector)

# Amostras para os dados processados transformadas em vetorespE1 = c(valor1)

Page 6: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 6 of 10

pE2 = c(valor2)pE3 = c(valormv)

# Executando Montecarlo tomando por base os valores de uma sequência.for (i in seq(my.start.of.sequence + my.jump.of.sequence, my.end.of.sequence, my.jump.of.sequence)){ print(paste("Avaliação com B igual a:", i)) NotExplicitlyIterativeMontecarlo(my.number.of.observations, i, my.length.of.my.vector)

pE1 = c(pE1, valor1) pE2 = c(pE2, valor2) pE3 = c(pE3, valormv)} # Criando um dataframe com os dados adquiridosmy.data.frame <- data.frame(MyB, pE1, pE2, pE3)

# Exibindo valores do dataframeprint(my.data.frame)if (my.view.grid.results) View(my.data.frame, title="Valores Adquiridos - Usando Montecarlo") #------------------------------------------------------------------------------# Inicio da plotagem#------------------------------------------------------------------------------#------------------------------------------------------------------------------# Iniciando dispositivo de saída caso os resultados devam ser salvos em disco #------------------------------------------------------------------------------if (my.save.result){ save.name <- paste('saved.result.01[',my.end.of.sequence,'].pdf', sep='') pdf(file = save.name, onefile = TRUE)} # PLOT CONFIGmy.col <- 'black'my.type <- c("p","r")my.pch <- 20my.scales <- list(x = list( relation = "free", limits = c(1, my.end.of.sequence*1.5)), y = list( relation = "free", limits = c(-50, 50)))my.xlab <- "B"my.ylab <- expression(paste('Estimativa bootstrap do erro quadrático médio para o estimador ', theta[1]))

Page 7: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 7 of 10

# PLOTmyplot01 <- xyplot(pE1~MyB, col = my.col, type = my.type, data = my.data.frame, scales = my.scales, xlab = my.xlab, ylab = my.ylab, pch=my.pch)

if (!my.save.result) x11()print(myplot01)

#------------------------------------------------------------------------------# Encerrando dispositivo de saída caso os resultados devam ser salvos em disco #------------------------------------------------------------------------------if (my.save.result) { dev.off() } #------------------------------------------------------------------------------# Iniciando dispositivo de saída caso os resultados devam ser salvos em disco #------------------------------------------------------------------------------if (my.save.result){ save.name <- paste('saved.result.02[',my.end.of.sequence,'].pdf', sep='') pdf(file = save.name, onefile = TRUE)} # PLOT CONFIGmy.col <- 'red'my.type <- c("p","r")my.pch <- 20my.scales <- list(x = list( relation = "free", limits = c(1, my.end.of.sequence*1.5)), y = list( relation = "free", limits = c(-50, 50)))my.xlab <- "B"my.ylab <- expression(paste('Estimativa bootstrap do erro quadrático médio para o estimador ', theta[2]))# PLOTmyplot02 <- xyplot(pE2~MyB, col = my.col, type = my.type, data = my.data.frame, scales = my.scales, xlab = my.xlab, ylab = my.ylab, pch=my.pch)

if (!my.save.result) x11()print(myplot02)

#------------------------------------------------------------------------------# Encerrando dispositivo de saída caso os resultados devam ser salvos em disco #------------------------------------------------------------------------------if (my.save.result) { dev.off() }

Page 8: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 8 of 10

#------------------------------------------------------------------------------# Iniciando dispositivo de saída caso os resultados devam ser salvos em disco #------------------------------------------------------------------------------if (my.save.result){ save.name <- paste('saved.result.03[',my.end.of.sequence,'].pdf', sep='') pdf(file = save.name, onefile = TRUE)} # PLOT CONFIGmy.col <- 'green'my.type <- c("p","r")my.pch <- 20my.scales <- list(x = list( relation = "free", limits = c(1, my.end.of.sequence*1.5)), y = list( relation = "free", limits = c(-50, 50)))my.xlab <- "B"my.ylab <- expression(paste('Estimativa bootstrap do erro quadrático médio para o estimador ', theta[mv]))# PLOTmyplot03 <- xyplot(pE3~MyB, col = my.col, type = my.type, data = my.data.frame, scales = my.scales, xlab = my.xlab, ylab = my.ylab, pch=my.pch)

if (!my.save.result) x11()print(myplot03)

#------------------------------------------------------------------------------# Encerrando dispositivo de saída caso os resultados devam ser salvos em disco #------------------------------------------------------------------------------if (my.save.result) { dev.off() } #------------------------------------------------------------------------------# Abrindo uma nova janela no X para que não ocorra sobreposição das demais#------------------------------------------------------------------------------if (!my.save.result) x11(title="Confrontando as Estimativas Obtidas") #------------------------------------------------------------------------------# Iniciando dispositivo de saída caso os resultados devam ser salvos em disco #------------------------------------------------------------------------------if (my.save.result){ save.name <- paste('saved.result.04[',my.end.of.sequence,'].pdf', sep='') pdf(file = save.name, onefile = TRUE)

Page 9: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 9 of 10

} # PLOT CONFIGmy.col <- 'black'my.ylab <- expression(paste('Estimativa para ', theta[1]))# PLOTmyplot01 <- xyplot(pE1~MyB, col = my.col, type = my.type, data = my.data.frame, scales = my.scales, xlab = my.xlab, ylab = my.ylab, pch=my.pch)

# PLOT CONFIGmy.col <- 'red'my.ylab <- expression(paste('Estimativa para ', theta[2]))# PLOTmyplot02 <- xyplot(pE2~MyB, col = my.col, type = my.type, data = my.data.frame, scales = my.scales, xlab = my.xlab, ylab = my.ylab, pch=my.pch)

# PLOT CONFIGmy.col <- 'green'my.ylab <- expression(paste('Estimativa para ', theta[mv]))# PLOTmyplot03 <- xyplot(pE3~MyB, col = my.col, type = my.type, data = my.data.frame, scales = my.scales, xlab = my.xlab, ylab = my.ylab, pch=my.pch)

#PLOTprint(myplot01, position=c(0.1,0.1,1,1),split=c(1,1,2,2),more=T)print(myplot02, position=c(0.1,0.1,1,1),split=c(1,2,2,2),more=T)print(myplot03, position=c(0.1,0.1,1,1),split=c(2,1,2,2),more=F)

#------------------------------------------------------------------------------# Encerrando dispositivo de saída caso os resultados devam ser salvos em disco #------------------------------------------------------------------------------if (my.save.result) { dev.off() } #------------------------------------------------------------------------------# Escrevendo os dados obtidos em disco#------------------------------------------------------------------------------if (my.data.frame.save.result){ my.file.name <- paste('Dados.Gerados.Em.',format(Sys.time(), "[Data.%F][Hora.%H.%M.%S]."),'[B.',my.start.of.sequence,'.',my.end.of.sequence,'.',my.jump.of.sequence,']','.txt', sep='') write.table(my.data.frame, file=my.file.name)

Page 10: Bootstrap Evaluation in R -  Source Code

File: /media/SAMSUNG/10-CoursesAndD…011]/00.bootstrap.evaluation.r Page 10 of 10

} #------------------------------------------------------------------------------# Exibindo mensagem de finalização do script#------------------------------------------------------------------------------print('Fim do script ............ [OK]')