########################################################################################## ## Script 1 - Comandos básicos para manipulação de dados em R ############################ ########################################################################################## ## Operações matemáticas em R ## Soma 1 + 3 ## Multplicação 1 + 3*5 ## Subtração e divisão 1 - 3/5 ## Precedência (* / ) depois ( + -) ## Operações especiais ## Potencia 2^5 ## Raiz quadrada sqrt(25) ## Logaritmo neperiano (natural) log(10) ## Exponencial exp(10) ## Log na base2 log2(10) ## log na base 10 log10(4) ## Seno sin(3.14) ## Coseno cos(3.14) ## Valores faltantes e especiais # NA - Not Available # NaN - Not a Number # Inf e -Inf mais e menos infinito c(-1,0,1)/0 ## Objetos x <- 2 ## Armazena o numero 2 no objeto x x y <- 5 + x ## Armazena o resultado da conta 5 + x =2 y ## Trabalhando com vetores x <- c(1,3,5,7,9) ## Pergunta se dentro do vetor tem algum NA is.na(x) ## Pergunta se dentro do vetor tem algum NaN is.nan(x) ## Pergunta se tem algum valor infinito is.finite(x) ## Negando as afirmações !is.na(x) !is.nan(x) !is.finite(x) ## Operações para todos os elementos do vetor all(is.na(x)) all(!is.na(x)) ## Modificando um elemento do vetor x[3] <- NA ## Ao menos um é NA ? any(is.na(x)) ## Todos são NA ? all(is.na(x)) ## Operações de vetores com constantes # Somando uma constante a todos os elementos do vetor x + 5 # Dividindo todos os elementos por uma constante x/5 ## Multiplicando todos os elementos por uma constante x*5 ## Operações de vetores com vetores x <- c(1,3,5,7,9) y <- c(2,4,6,8,10) ## Tamanho do vetor length(x) length(y) ## Soma de vetores x + y ## Subtração de vetores x - y ## Multiplicação x*y ## Divisão x/y ## Para operar com vetores eles devem ser de tamanhos compatíveis z <- c(1,2) x + z ## Cuidado com a lei da reciclagem x*z ## Lei da reciclagem pode te enganar !!!!!! ########################################################################################## ## Tipos de objetos em R ################################################################# ########################################################################################## # Vetores # Matrizes # Data Frame # Listas # Funções ########################################################################################## ## Vetores ############################################################################### ########################################################################################## ## Gerando sequências # Função seq() x <- seq(0, 10, l=5) x x2 <- seq(0,10, by = 2) x2 # Funçao rep() x <- rep(0:10, 5) x x2 <- rep(0:10, each=5) # Acesso a elmentos x[10] # Elemento 10 x[1:5] # Elementos de 1 a 5 x[c(1,3,5,7)] ## Elementos 1, 3, 5, e 7 ## Maiores e menores que ?? x > 5 x < 5 ## Vetores de mesmo tamanho x <- 1:5 y <- 3:7 ## Maior que outro vetor x > y ## Menor que outro vetor x < y ## Vetor de caracteres nomes <- c("Fulano", "Beltrano", "Ciclano") nomes # Letras letras <- letters[1:5] letras ## Maiúsculas LETRAS <- LETTERS[11:20] LETRAS ## Concatenando objetos paste("fulano", 2, sep="") paste("fulano", 2, sep=" ") paste("fulano", 2, sep=".") ## Criando vetores com diferentes niveis rep(paste("T", 1:3, sep=""), each=5) vetor.caracter <- rep(paste("T", 1:3, sep=""), c(3,4,5)) ## Verificando que tipo de objetos eu tenho is.numeric(vetor.caracter) is.character(vetor.caracter) is.factor(vetor.caracter) ## Criando vetor com fatores vetor.fator <- factor(vetor.caracter) vetor.fator attributes(vetor.fator) ## Outro exemplo est <- c("SC", "PR", "SC", "PR", "RS", "SP", "RS", "SP", "ES", "PR", "RJ", "ES") is.factor(est) est <- factor(est) is.factor(est) attributes(est) table(est) ## Reagrupando niveis regiao <- est levels(regiao) levels(regiao) <- c("Sudeste", "Sul", "Sudeste", "Sul", "Sul", "Sudeste") table(regiao) ## Fatores ordenados grau <- c("medio", "baixo", "medio", "alto", "baixo", "baixo", "alto","medio", "alto", "medio") factor(grau) factor(grau, ord = T) ## Ordem alfabetica ordered(grau) ## Novamente ordem alfabética factor(grau, ord = T, levels = c("baixo", "medio", "alto")) ## Na ordem que eu quero ## Mais operações com vetores vec <- round(rnorm(10, 70,10),0) vec ## Ordena de forma crescente sort(vec) ## Reverte rev(vec) rev(sort(vec)) ## Ordem decrescente ## Rankear rank(vec) ## Função which() descobre onde tem observações de acordo com o que vc quer which(vec > 70) which(vec < 70) # Onde esta o maior e o menor which.max(vec) which.min(vec) # Qual é o maior e menor ? max(vec) min(vec) ## Retirando objetos do vetor vec[-c(3,4,5)] ########################################################################################## ## Matrizes ############################################################################## ########################################################################################## m1 <- matrix(1:12, ncol = 3) m1 ## Dimensao da matriz dim(m1) ## Numero de linhas nrow(m1) ## Numero de colunas ncol(m1) ## Selecionando elementos m1[1,2] m1[2,1] m1[1:2,1:2] m1[c(1,3),c(1,3)] ## Nomes de linhas e colunas dimnames(m1) dimnames(m1) <- list(c("L1", "L2", "L3", "L4"), c("C1", "C2", "C3")) ## Soma de linhas e colunas margin.table(m1, margin = 1) margin.table(m1, margin = 2) ## Operações com matrizes m4 <- matrix(1:6, nc = 3) m5 <- matrix(10 * (1:6), nc = 3) ## Soma elemento a elemento m4 + m5 ## Multiplicação elemento a elemento CUIDADO NAO E MULTIPLICAÇÃO MATRICIAL m4*m5 ## Multiplicação de matrizes só é definida para matrizes com dimensões compatíveis dim(m4) ## O nmero de linhas da primeira deve ser igual ao numero de colunas da segunda dim(m5) m4%*%m5 ## Operação não compatível t(m4)%*%m5 ## Tranposta de uma matriz m4 t(m4) ## Inversa de uma matriz solve(m4) ## Somente é definida para matrizes quadradas m2 <- matrix(c(1,2,2,1),ncol=2,nrow=2) m2 solve(m2) ## Determinante de uma matriz det(m2) ## Resolvendo sistemas lineares com a função solve() # x + 3*y + z = 10 # 5*x - 2*y +z = 15 # 2*x + y - z = 7 mat <- matrix(c(1, 5, 2, 3, -2, 1, -1, 1, -1), nc = 3) mat vec <- c(10, 15, 7) vec ## Resolvendo o sistema linear solve(mat,vec) ########################################################################################## ## Data Frame ############################################################################ ########################################################################################## ## Vamos ler apenas base de dados em formato .txt e .csv ## Onde eu estou no meu computador ? getwd() ## Carregando um arquivo salvo em disco dados <- read.table("OD.csv", header = TRUE, sep=",", dec=",") ## Renomeando as colunas names(dados) <- c("Ensaio", "Repetição", "Tipo", "Tempo", "OD") head(dados) ## Verificando o tipo de dados em cada coluna sapply(dados, class) ## Está certo ?? ## Mudando as classes das colunas dados$Ensaio <- as.factor(dados$Ensaio) dados$Repetição <- as.factor(dados$Repetição) sapply(dados, class) ## Agora sim está correto, cuidado não é porque é um número que a classe deve ser numérica ## Informações sobre o seu obejto str(dados) ## Algumas informações sobre a base de dados # Numero de observações por ensaio table(dados$Ensaio) # Numero de observações por repetição table(dados$Repetição) ## Repetições X Ensaio table(dados$Ensaio,dados$Repetição) ########################################################################################## ## Estatística Descritiva - Numérica ##################################################### ########################################################################################## ## Resumo geral dos dados summary(dados) ## Só para uma variavel summary(dados$OD) mean(dados$OD) ## E se tiver NA ou NaN ? dados$OD[c(40,50,60,70)] <- NA mean(dados$OD) mean(dados$OD, na.rm=TRUE) ## Comparando a OD por ensaio tapply(dados$OD, dados$Ensaio, summary) ## Repetição tapply(dados$OD, dados$Repetição, summary) ## Usando a função aggregate aggregate(dados$OD, list(dados$Repetição), mean) aggregate(cbind(dados$OD,dados$Tempo), list(dados$Repetição), mean) ## Tendência central tapply(dados$OD, dados$Ensaio, mean, na.rm=TRUE) ## Média tapply(dados$OD, dados$Ensaio, median, na.rm=TRUE) ## Mediana ## Medidas de variabilidade tapply(dados$OD, dados$Ensaio, var, na.rm=TRUE) ## Variância tapply(dados$OD, dados$Ensaio, sd, na.rm=TRUE) ## Desvio padrão ## Verificando quantas observações estão acima da média acima.media <- dados[which(dados$OD > mean(dados$OD,na.rm=TRUE)),] dim(acima.media) table(acima.media$Ensaio, acima.media$Repetição) ## Pegando as observações entre 0.25 e 0.5 dados[which(dados$OD > 0.25 & dados$OD < 0.5),] ## Pegando as observações menores que 0.25 ou maiores que 0.5 dados[which(dados$OD < 0.25 | dados$OD > 0.5),] ########################################################################################## ## Analise descritiva - Gráfica ########################################################## ########################################################################################## ## Variáveis qualitativas - Nominal e Ordinal ## Variáveis quantitativas - Discretas e Contínuas ## Variáveis qualitativas # Gráfico de pizza pie(table(dados$Ensaio)) pie(table(dados$Repetição)) # Não temos neste conjunto de dados uma qualitativa ordinal então vamos criar apenas para exemplificar um gráfico de barras summary(dados$Tempo) ## Vou categorizar em Tempo Baixo (2 a 4) Tempo Media (4 a 6) e Tempo Alto (6 a 10) dados$Ordinal <- NA dados[which(dados$Tempo < 4),]$Ordinal <- "Baixo" dados[which(dados$Tempo >= 4 & dados$Tempo <= 6),]$Ordinal <- "Media" dados[which(dados$Tempo > 6 ),]$Ordinal <- "Alta" ## Gráfico de barras class(dados$Ordinal) dados$Ordinal <- factor(dados$Ordinal,ord=T, levels=c("Baixo", "Media","Alta")) tb.ordinal <- table(dados$Ordinal) barplot(tb.ordinal) ## Variável quantitativa continua # Histograma hist(dados$OD) # Melhorando o aspecto do gráfico hist(dados$OD, xlab = "Titulo do eixo X", ylab = "Titulo do eixo Y", main = "Titulo do grafico") lines(density(dados$OD) ## Histograma com densidade estimada hist(dados$OD,prob=TRUE, xlab = "Titulo do eixo X", ylab = "Titulo do eixo Y", main = "Titulo do grafico") ## Boxplot boxplot(dados$OD ~ dados$Ordinal, ylab="Titulo do eixo Y", xlab="Titulo do eixo X") ## Colocando vários gráficos na mesma figura par(mfrow=c(1,4), mar=c(2,2.5,2,2)) hist(dados$OD, xlab="Resposta", ylab="Frequência", main ="") boxplot(dados$OD ~ dados$Ensaio, xlab="Ensaios", ylab="OD") boxplot(dados$OD ~ dados$Repetição, xlab="Repetição", ylab="OD") plot(dados$OD ~ dados$Tempo, xlab="Covariável", ylab="Resposta - OD") ########################################################################################## ## Gráficos usando a biblioteca lattice ################################################## ########################################################################################## require(lattice) # É um pacote extra do R especifico para fazer gráficos dados <- dados[order(dados$Ensaio , dados$Tempo),] ## Ordenando o tempo dentro dos ensaios xyplot(OD ~ Tempo | Tipo + factor(Ensaio), groups = Repetição, type="o", data=dados) ## Todas as informações no mesmo gráfico ## Como temos um Ensaio que foi perdido para um dos tipos vamos retirá-lo dim(dados) dados.3 = dados[which(dados$Ensaio != 3),] xyplot(OD ~ Tempo | Tipo + factor(Ensaio), groups = Repetição, type="o", data=dados.3) ## Todas as informações no mesmo gráfico ## Outras opções para ligar os pontos xyplot(OD ~ Tempo | Tipo + factor(Ensaio), type=c("p","a"), lty=3,lwd = 5, data=dados.3) ## Media dos dados xyplot(OD ~ Tempo | Tipo + factor(Ensaio), type=c("p","smooth"), data=dados.3) ## Suavização dos dados ########################################################################################## ## FIM DO CÓDIGO 1 ####################################################################### ##########################################################################################