#==========================================================================================
# Aula 17 da disciplina ce223 (17/05/2011)
# Estatística básica, uso das funções apply, sapply, lapply e do.call e write.table
#                                                               Professor Walmes M. Zeviani
#                                                                     www.leg.ufpr.br/ce223
#==========================================================================================

#------------------------------------------------------------------------------------------
# dados de motores de automóveis

data(mtcars)
str(mtcars)
help(mtcars, help_type="html")

#------------------------------------------------------------------------------------------
# dados de medidas de flores

data(iris)
str(iris)

#------------------------------------------------------------------------------------------
# gerar uma tabela com estimativas, erros padrões, tamanho da amostra e ic95%

stat <-
  apply(mtcars, 2,
        function(x){
          m <- mean(x)
          n <- length(x)
          v <- var(x)
          e <- sqrt(v/n)
          qt <- qt(0.975, df=n-1)
          ici <- m-qt*e
          ics <- m+qt*e
          return(c(n=n, media=m, erropad=e, ici=ici, ics=ics))
          #return(list(n=n, media=m, erropad=e, ici=ici, ics=ics))
        })

str(stat)
t(stat)

do.call(rbind, stat)
do.call(cbind, stat)

#------------------------------------------------------------------------------------------
# exportando o resultado no formato txt e xls

apropos("write")
help(write.table, help_type="html")

write.table(stat, file="stat.txt", sep="\t", dec=".", row.names=TRUE, quote=FALSE) # em txt
write.table(stat, file="stat.xls", sep="\t", dec=".", row.names=TRUE, quote=FALSE) # em xls

#------------------------------------------------------------------------------------------
# fazendo estatísticas para os dados iris

str(iris)

#------------------------------------------------------------------------------------------

stat2 <-
  apply(iris[,1:4], 2,
        function(x){
          tapply(x, iris$Species,
                 function(xx){
                   x <- xx
                   m <- mean(x)
                   n <- length(x)
                   v <- var(x)
                   e <- sqrt(v/n)
                   qt <- qt(0.975, df=n-1)
                   ici <- m-qt*e
                   ics <- m+qt*e
                   return(c(n=n, media=m, erropad=e, ici=ici, ics=ics))
                 })
        })

str(stat2)

#------------------------------------------------------------------------------------------
# ajeitando o resultado

stat3 <-
  lapply(stat2,
         function(x){
           do.call(cbind, x)
         })

str(stat3)

stat4 <- do.call(rbind, stat3)
str(stat4)
stat4
stat4 <- as.data.frame(stat4)

rownames(stat4) <- paste(rep(names(stat3), each=nrow(stat3[[1]])),
                         rownames(stat4))
stat4

stat4$Species <- rep(names(stat3), each=nrow(stat3[[1]]))
rownames(stat4) <- rep(rownames(stat3[[1]]), times=length(stat3))
str(stat4)
stat4

#------------------------------------------------------------------------------------------
# exportando o resultado no formato xls

write.table(stat4, file="stat4.xls", quote=FALSE)

#------------------------------------------------------------------------------------------
