Transcript
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]')


Top Related