###################################################### ##################################################### # AulaR ############################################# # Monitor: Wander Plassa ########################### # Introdução ######################################## ################################################### ############### INTRO ############################ ################################################## # instalando tutorial do R ("install.packages()" serve para instalar funções # que não estão de inicio no R) install.packages("swirl") # Toda vez que for usar a função se inicia chamando ela pelo comando "library" library("swirl") #A partir desse ponto indica a função swirl() ################################################### ############### Inicio ############################ ################################################## #1) Encontrando e escolhendo o diretório ~> get working directory (getwd) # Se você deseja salvar ou carregar um arquivo, # você precisa saber o que o diretório de trabalho atual. getwd() # Definir o diretório de trabalho poderia ser # feito através da linha de comando: "setwd()" setwd("C:/Users/Wander Plassa/Desktop/Pos_Graduacao/Doutorado/R/Aula") # Ou manualmente em Files/More/Set as Working Directory/Escolhe a pasta #2) Para começar a trabalhar verifica-se se existe objetvos abertos # Gostaríamos de saber se há algum objeto na sessão atual do R. # No rstudio, podemos clicar na guia Ambiente (Environment) para ver esta lista, # ou simplesmente digite: # Se você deseja excluir todos os objetos atualmente disponível, você pode usar ls (): rm(list = ls()) ## Dentro do ls você também pode especificar quais objetos serão deletados #3) Dúvidas de funções: # use a função "help()", entre o () o nome da função que deseja conhecer # ou simplesmente use "?nomedafunção" ################################################### ############### VARIÁVEIS ######################## ################################################## # Pode ser um unico número, um vetor, uma matriz, entre outros. #1) caracterizando uma variável # criando uma variável numérica, chamada "my.number". No R você pode usar = ou <- . my.number = 56 my.number class(my.number) my.numer1 = 50 # O nome de uma variável pode ser formado por letras, números, ponto e underline (_), # Não pode começar com um número. Não use outros caracteres especiais ou # espaço em um nome de variável. # criando uma variável com característica "character" my.word = "hello" my.word class(my.word) #2) caracterizando uma variável com operações matemáticas 4+2 x = 12 x y = 2 #3) usando as variáveis criadas para operações matemáticas x/y x^2 log(x) z = x/y z ################################################## ############### VETORES ######################## ################################################## #1) podemos criar um vector consistindo de vários valores numéricos usando uma função "c()" c(1, 5.5, 100) v1 = c(1, 5.5, 100) v2 = c(0.14, 0, -2) #2) Combinando dois vetores # Esta função também pode ser usado para combinar dois vetores, # tal como V1 e V2, V3 em uma variável: c(v1, v2) v3 = c(v1, v2) #2) Encontrando elementos dos vetores #detalhe, usamos colchetes nesse caso v3[3] v3[c(2,3)] #3) Guardando os elementos em uma variável v3_sub = v3[c(2,3)] #3) Operações matemáticas com os vetores v1 v1 + 2 sin(v1) #4) elementos específicos de um vetor #Duas formas diferentes (focando no elemento 2 dos vetores) sin(v1[2]) sin(v1)[2] v1[2]+2 #3) operações entre vetores (lembrando que devem respeitar a dimensão dos vetores) #Observando as dimensões length(v1) length(v2) length(v3) length(v3_sub) #realizando as operações # PRODUTO INTERNO: uma soma dos produtos dos # elementos correspondentes em dois vetores: v1 v2 v1 * v2 #Forma errada de obter produto interno (multiplica elemento a elemento) v1 %*% v2 #Forma correta de obter produto interno v1 %*% v3_sub #Dará erro, dimensões diferentes #4) operações entre vetores numéricos e não numéricos #Dará certo??? my.word + 10 # Lembrando que para ver a classe: class(my.word) class(v2) ################################################## ############### ESTATISTICAS ################### ################################################## #1) Estatísticas descritivas v3 summary(v3) #Descrição total mean(v3) #Media var(v3) #Variância quantile(v3) #quantils sum(v3) #soma dos elementos median(v3) #mediana sd(v3) #desvio padrão max(v3) #Valor máximo min(v3) #valo mínimo ################################################## ############### MATRIZES ####################### ################################################## # Até agora trabalhamos com apenas uma linha. Agora, no caso de matrizes, # trabalharemos com mais de uma linha #1) Criando uma sequência de numeros # Antes de criar uma matriz, vamos examinar rapidamente como uma sequência de # números é gerada. Podemos criar uma sequência de 1 a 6, por exemplos: 1:6 # Para gerar uma série mais elaborada de números, # podemos usar uma função chamada "seq()". # Por exemplo, para gerar a sequência de números de 1 a 12, incrementado por 4: help(seq) seq(from=1, to=100, by=4) #2) Criando uma matriz # Podemos fazer uma sequência de números para uma matriz, usando uma função para matriz: ?matriz ?matrix matrix(1:6, nrow = 3, ncol = 2) ma = matrix(1:6, nrow = 3, ncol = 2) mb = matrix(7:9, nrow=3, ncol=1) mb #3) Combinando vetores com matrizes # Às vezes nós gostaríamos de combinar diferentes matrizes e vetores. # A funções "cbind" (para combinar coluna) e "rbind" (para combinar linha) # são usadas para esse fim. # Pode ser usado para combinar quaisquer vectores e matrizes, # desde que os seus comprimentos e dimensões sejam comparáveis. ma rbind(ma, c(100,200)) #Combinando matriz e linhas rbind(ma, c(100,200)) mb m = cbind(ma, mb) #Combinando colunas m rbind(ma, mb) #Dará certo??? #4) Elementos das Matrizes m m [1,3] m [,1] #Deixando em branco o elemento correspondente a linha, teremos todos os elementos da coluna 3 m [1,] #Deixando em branco o elemento correspondente a coluna, teremos todos os elementos linha 1 m [,1:2] # Quais serão os elementos obtidos? #5) transformando as matrizes dim(m) #conhecendo a dimentão de uma matriz t(m) # realizando a transposição de uma matriz diag(m) # obtem os elementos da diagonal principal da matriz diag(3) # cria-se uma matriz identidade dimensão 3 #5) Operações matemáticas com matrizes m m +2 m * 2 m2 = matrix(21:32, nrow = 3) m2 m3 = m %*% m2 # multiplicação de matrizes atentando para a dimesão. m3 ################################################## ############### DADOS ########################## ################################################## #1) Intro # R vem com conjuntos de dados integrados que podem ser recuperados pelo nome, # usando a função de "data()". Nesta classe, vamos utilizar "mtcars". ?data data("mtcars") # visualizando os dados View(mtcars) #Conhecendo a base usando a função help ? mtcars help("mtcars") # Como obtemos estatísticas de um vetor, # podemos aplicar a função "summary()" para dados: summary(mtcars) #1) Visualizando variáveis mpg mtcars$mpg #ao inserir $ você indica que quer analisar uma variável em específico mtcars [,"mpg"] #lembrando que a base de dados é uma matriz mtcars [,1] # o que irá gerar? attach(mtcars) #Fixa nas variáveis dessa base mpg detach(mtcars) #Desvincula a base de dados mpg #2) Criando variáveis a partir dos dados efficients.cars = mtcars[mtcars$mpg > 20,] # Você pode combinar várias condições usando & (e) ou | (Ou), # Por exemplo, duas condições: que o mpg seja superior a 20, # e câmbio automático: efficients.autos = mtcars[mtcars$mpg> 20 & mtcars$am ==0, ] # caracteres: & (e); | (ou); > (maior); < (menor); <= (menor ou igual); # >= (maior ou igual); == (par exato); != (diferente) ################################################## ############### GRÁFICOS ####################### ################################################## ?plot plot(mtcars$mpg, mtcars$cyl, type = "p", main = "Carros", xlab = "MPG", ylab = "Cilindros", col = "dark red") #1) Intro # "ggplot2" é um pacote de R poderoso que fornece visualizações de dados fácil e intuitiva install.packages("ggplot2") # Ou você pode ir para a Ferramentas-> Menu Instalar Pacotes, # digitar "ggplot2" e pressione instalar. library("ggplot2") #2) Dados # Junto com esse pacote, vem a base "diamonds" que é um conjunto de dados, # contendo informações sobre vários atributos de 54000 diamantes. data("diamonds") ?diamonds View(diamonds) #2) Gráfico de Dispersão # Vamos dizer que nós, como cientistas estamos interessados em entender # a relação entre alguns atributos dos diamantes. Por exemplo, como é peso # afetar o preço? Ou como é que a qualidade da cor, ou de clareza do diamante, # afetar o preço? Esses tipos de perguntas, onde estamos à procura de relações # interessantes entre atributos usando as observações que temos, são comuns, # quase universal, através de análise de dados. # Uma visualização comum para determinar a relação entre atributos é um gráfico de # dispersão (scatter plot), onde cada diamante será representado por um ponto. # Este é o ponto onde temos que tomar algumas decisões. # Vamos falar sobre "aesthetic" # Um "aesthetic" é a dimensão de um gráfico para termos uma percepção visual: # o exemplo mais simples sendo os eixos x e y. Quando fazemos um gráfico de dispersão, # nós escolhemos um atributo para atribuir ao eixo x, e um atributo para # atribuir ao eixo y. # Outras "aesthetic" que podemos usar em um gráfico de dispersão são a cor, # tamanho e forma dos pontos do gráfico: cada um desses "aesthetic" nos permite # comunicar alguma dimensão dos dados, e entender as relações complexas entre eles. # Como exemplo, vamos usar ggplot2 para criar um gráfico de dispersão # onde colocamos peso no eixo x e preço, em dólares, no eixo y. # função(base de dados, aes(x=nome var1, y=nome var2)) + geom_estilo ggplot(diamonds, aes(x=carat, y=price)) + geom_point() # podemos usar geom_boxplot, geom_geom_crossbar... # mais exemplos nesse site: http://docs.ggplot2.org/current/ #2) Gráfico de Dispersão, colorido por claridade ggplot(diamonds, aes(x=carat, y=price, color = clarity)) + geom_point() #Pode usar qualquer variável para definir cor #3) Gráfico de Dispersão, colorido por claridade e formato por corte ggplot(diamonds, aes(x=carat, y=price, color = clarity, shape = cut)) + geom_point() #4) Gráfico de Dispersão, colorido por claridade e tamanho por corte ggplot(diamonds, aes(x=carat, y=price, color=clarity, size=cut)) + geom_point() #5) Tendência # Adicionar uma curva suave que mostra a # tendência geral dos dados "geom_smooth()" ggplot(diamonds, aes(x=carat, y=price)) + geom_point() + geom_smooth() # A área cinzenta em torno da curva é um intervalo de confiança, # sugerindo o quanto a incerteza existe neste suavização da curva. # Se quiser tirar o intervalo de confiança, podemos adicionar uma opção # para o geom_smooth ; especificamente "se = FALSE", onde "S.E." # significa "erro padrão". ggplot(diamonds, aes(x=carat, y=price)) + geom_point() + geom_smooth(se=FALSE) #6) scatter plot, Vários gráficos por característica (claridade) ggplot(diamonds, aes(x=carat, y=price, color = cut)) + geom_point() + facet_wrap(~ clarity) #7) scatter plot, Editando o gráfico ggplot(diamonds, aes(x=carat, y=price, color = clarity, shape = cut)) + geom_point() +ggtitle("Meu gráfico") + xlab("Peso") + ylab("Preço") ?ggplot #6) Salvando os gráficos ggplot(diamonds, aes(x=carat, y=price)) + geom_point() p = ggplot(diamonds, aes(x=carat, y=price)) + geom_point() ggsave(filename="diamonds.png", p) #Onde irá salvar? ggsave(filename="diamonds.pdf", p) ggsave(filename="diamonds.jpeg", p) ################################################## ########## TESTES ESTATISTICOS ################# ################################################## # Vamos trabalhar com um conjunto de dados embutido no R, # chamado "mtcars". data("mtcars") View(mtcars) help(mtcars) #1) Teste de T (Student's T-test) # Um teste t examina se uma variável numérica difere entre duas categorias # Antes de realizar um teste estatístico, é sempre uma boa idéia # uma visualização gráfica. Recorde-se que um boxplot compara as distribuições # de vários grupos, e por isso é adequado para esta tarefa. Para fazer isso, # primeiro temos carregar o pacote ggplot2: library(ggplot2) ggplot(mtcars, aes(x=factor(am), y=mpg)) + geom_boxplot() #Coloco o factor para forçar colocar uma variável binária no eixo x. ggplot(mtcars, aes(x=am, y=mpg)) + geom_boxplot() # Podemos formar uma hipótese clara a partir desta visualização: # parece que os carros automáticos têm 'milhas' por galão menor e, # portanto, uma eficiência de combustível mais baixa do que carros manuais. # Mas é possível que esse padrão aconteceu por sorte - aleatório, # isto é, que só aconteceu porque escolhemos um grupo (amostra) de carros automáticos # com baixa eficiência e um grupo de carros manuais com maior eficiência. # Então, para verificar se é esse o caso, temos de usar um teste estatístico. t.test(mpg ~ am, data=mtcars) # Onde ~ significa "explicado por" # obtemos um valor de p: mostra a probabilidade de que esta diferença aparente # entre os dois grupos apareceu por acaso. Este é um p-valor baixo, # de modo que é bem plausível a existência de uma diferença efetiva # entre os grupos (automático e manual). #2) Correlação # testar se duas variáveis numéricas são relacionados ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() # Imediatamente você pode ver uma relação negativa: # um peso maior significa milhas por galão mais elevados e, # portanto, uma menor eficiência. # Para testar isso, precisamos de mais do que um gráfico: # é preciso realizar um teste estatístico. cor.test(mtcars$mpg, mtcars$wt) # Quanto menor o p-valor, mais significativa a correlação, # grande chance que existe uma correlação. # Nós também podemos encontrar a estimativa do coeficiente de correlação. # Este valor varia entre -1 e 1, em que 1 representa uma relação positiva # perfeitamente linear, e -1 representa uma relação negativa perfeitamente linear. #2) Regresão Linear # Usado para transformar essa relação em uma previsão: # por exemplo, qual seria a eficiência de combustível de um carro 4500 libras. # Podemos fazer isso através de um modelo linear, # ou regressão linear, o que é feito em R com a função lm. # Vamos salvar modelo linear em uma variável que chamamos de fit. ?mtcars fit = lm(mpg ~ wt, mtcars) #Recordamos que o til (~) significa "explicado por" e lm signfica Linear Model summary(fit) # milhas por galão explicado pelo peso usando os dados mtcars. # Em primeiro lugar, temos a nossa estimativa do # intercepto: é milhas por galão hipotéticas de um carro que pesava 0 em nosso modelo linear. # Em segundo lugar: o efeito da variável peso em milhas por galão. # também chamado o coeficiente de inclinação do peso. # Isso mostra que há uma relação negativa, onde o aumento do peso diminui as milhas # por galão. Em particular, mostra que o aumento do peso por 1000 libras diminui # a eficiência de 5,3 milhas por galão. # Este modelo prevê a eficiência para cada um dos carros # existentes, utilizando a função predict. predict(fit) # Alguma ideia de como podemos responder a Pergunta Inicial????? 37.2851 + (-5.3445) * 4.5 # Se prevê uma eficiência de combustível de 13,2 milhas por galão. # Isto é o que um modelo linear na verdade significa: uma # combinação linear do intercepto e inclinação. # Finalmente, note que podemos mostrar um modelo linear em nosso # enredo usando um método incorporado ggplot2, geom_smooth. # Dzemos que o método a ser usado é "lm", um modelo linear. ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_smooth(method="lm") # Agora temos uma tendência linear no nosso ggplot. # A área cinzenta mostrada é a incerteza no ajuste: # é um intervalo de confiança de 95% do que a linha de tendência de verdade poderia ser. #3) Regresão Multipla # Por exemplo, digamos que você quer medir o efeito de não apenas o peso, # mas também o número de cilindros e volume do cilindro dos carros? # Podemos ter uma noção da tendência adicionando esses dois preditores para # nossa visualização usando a cor e tamanho. Aqui vamos colocar o número de # cilindros (CYL), como a cor e o volume (DISP) como o tamanho. ggplot(mtcars, aes(x=wt, y=mpg, col=cyl, size=disp)) + geom_point() # O efeito dessas três variáveis sobre as milhas por galão é difícil de determinar. # É verdade que os carros com maior volume (disp), # têm um eficiência de combustível mais baixo, mas eles também têm um peso maior. # Estes dois preditores pode ser redundante para prever a eficiência de combustível. # O mesmo acontece com o número de cilindros: mais cilindros (ou azul mais claro) # significa tanto um peso mais elevado e um consumo de combustível mais baixo. # Que combinação de preditores vai prever melhor eficiência de combustível? # Quais preditores aumentam nossa precisão estatisticamente significativa? mfit = lm(mpg ~ wt + disp + cyl, data=mtcars) summary(mfit) # Observe que a tabela de coeficiente tem agora quatro linhas: # uma para o intercepto e três para os preditores. # Cada um destes contém ainda a estimativa do coeficiente, ou inclinação. # Ele também contém um P-valore para cada um dos preditores # de forma independente. Observe que os valores de p para o peso e o número de cilindros # são ambas significativas. Podemos ver a classificação de importância # com base no número de estrelas, onde ** significa que é entre 0,001 e 0,01. # Mas a p-valor para o volume não é significativa, isto indica que essa # variável é redundante com um ou ambos os outros preditores, # e não fornece qualquer informação adicional significativa. predict(mfit) ############################################## ############### EXPLORANDO DADOS ############# ############################################# #1) Lendo dados # Do computador ? read.csv ESCOLAS2 = read.csv("ESCOLAS.CSV", sep="|") # Da internet salaries = read.csv("http://dgrtwo.github.io/pages/lahman/Salaries.csv") #Manual #Import Dataset/From (Escolha)/... #3) Tabelas Descritivas ?mtcars ?tapply tapply(mtcars$mpg, mtcars$disp, mean) tapply(mtcars$mpg, list(mtcars$cyl, mtcars$am), mean)