Descrição
Introdução ao R pelo estudo das aplicações à econometria.
PROPÓSITO
R é um software gratuito de amplo uso no mercado de trabalho e na academia, especialmente aplicado à análise econométrica.
Preparação
Antes de iniciar o estudo deste tema, é preciso que você pesquise na internet e instale em seu computador dois softwares gratuitos e abertos:
- The R Project for Statistical Computing – a linguagem de programação.
Escolha a opção conforme seu sistema operacional e selecione a versão mais recente. - RStudio – Open source & professional software for data science teams – um excelente ambiente integrado de desenvolvimento (IDE) para o R. Note que é preciso que você tenha o R instalado no seu computador para utilizar o RStudio. O RStudio é apenas uma interface utilizada para interagir com o R.
OBJETIVOS
Módulo 1
Descrever o software R, o RStudio e os pacotes para operações básicas
Módulo 2
Identificar os principais objetos e classes de dados no R
Módulo 3
Aplicar importação e manipulação de bases de dados
Módulo 4
Calcular estatísticas descritivas e regressões
Introdução
O R é um software livre voltado para análises estatísticas e gráficas. O programa é bastante conhecido pelos seus mais variados pacotes, que são códigos (não necessariamente do R) de funções escritas por terceiros e já estabelecidas. É o resultado da colaboração de várias pessoas.
Vamos apresentar o R a partir do RStudio, uma interface amigável que nos ajuda a trabalhar. No primeiro módulo, instalaremos os softwares e estudaremos os famosos pacotes. No segundo módulo, introduziremos alguns tipos de objetos com que o R trabalha e veremos operações básicas.
A partir do terceiro módulo, caminharemos para a aplicação empírica de conceitos econométricos e, assim, trabalharemos com bases de dados. Aprenderemos como importar dados de diferentes extensões e manipulá-los: como criar uma nova variável, renomear colunas, filtrar por um critério específico etc. Por fim, no quarto módulo, aplicaremos análises de econometria, gerando regressões e gráficos simples.
MÓDULO 1
Descrever o software R, o RStudio e os pacotes para operações básicas
R, RStudio e pacotes
O R é tanto uma linguagem de programação quanto um ambiente de software para o cálculo de estatísticas. Ele vem se tornando cada vez mais popular, e é uma excelente ferramenta para análise de dados.
Os próximos módulos servirão como uma introdução básica ao R. O intuito deste tema não é ser uma completa referência ao R, mas introduzir o básico que é necessário para avançar e se aprofundar.
Este módulo introdutório apresenta muitas informações nunca vistas. Não se preocupe, não esperamos que você compreenda tudo de primeira. Tente reproduzir todos os códigos deste módulo, retornando quantas vezes forem necessárias.
Usando o RStudio
Funções
Funções são conjuntos de afirmações organizadas conjuntamente para realizar uma tarefa específica.
O R possui grande número de funções embutidas, mas o usuário também pode criar suas próprias funções. Em programação, utilizamos funções para incorporar conjuntos de instruções que queremos usar repetidamente ou que, por causa de sua complexidade, funcionam melhor quando estão autocontidas em uma espécie de subprograma.
Uma função é uma parte de um código escrito de forma a desenvolver uma determinada tarefa. A função pode ou não aceitar argumentos ou parâmetros, como também pode ou não retornar um ou mais valores. Assim, a função executa sua tarefa e retorna o controle ao R, bem como qualquer resultado que possa ser armazenado em outros objetos. Todas as funções são compostas de argumentos, que, quando colocados em ordem, não precisam ser especificados. Isso porque, geralmente, podemos saber quais argumentos entram em uma função e a ordem deles pela documentação da função, obtida com o uso do comando help (Nome da Função). Neste tema, vamos focar apenas em funções embutidas do R e funções oriundas de pacotes, já prontas.
Usando o help()
A função help() apresenta a documentação e tem como objetivo ensinar a usar uma determinada função. Por exemplo, queremos entender como funciona a função log() e podemos digitar as duas opções abaixo:
help(log)
?log
Uma vez executados os comandos de ajuda, a documentação será aberta em um painel no canto inferior direito.
Atenção
Uma das coisas mais importantes quando estamos aprendendo R é pedir ajuda. Caso a documentação não ajude, você deve primeiro procurar no Google com uma breve descrição do seu problema. Se falhar, e provavelmente isso acontecerá em algum momento, é necessário ou buscar ajuda com alguém ou postar o problema em algum site como o Stack Overflow.
Contudo, antes de postar o problema, verifique se ele já não foi postado e resolvido por outra pessoa. Mesmo que não seja exatamente o mesmo problema, é possível testar soluções a problemas similares. Se ainda assim não tiverem uma resposta para seu problema, peça ajuda.
Quando pedir ajuda em algum fórum, lembre-se de seguir os seguintes passos:
- Descreva de forma objetiva o que você espera que o código faça;
- Seja claro com o que você quer realizar;
- Forneça o texto completo de qualquer mensagem de erro que você tenha recebido;
- Forneça código suficiente para alguém recriar o erro. Em alguns casos, você pode simplesmente postar o script inteiro;
- Poste uma foto da janela do RStudio quando o erro ocorre; isso poderá ajudar.
Com esses passos é bem provável solucionar o erro mais rapidamente e ainda aprender no processo. Não se desmotive com as dificuldades: isso é simplesmente parte do processo de aprendizado.
Pacotes
O grande trunfo do R são seus pacotes. Você irá instalar e atualizar muitos e muitos pacotes ao longo do tempo. Os pacotes são coleções de funções, dados e códigos compilados em um formato bem definido. O diretório em que os pacotes estão instalados se chama library. O R já vem com um conjunto-padrão de pacotes. Outros são disponibilizados para download e instalação. Uma vez instalados, eles devem ser carregados dentro da sessão para serem utilizados.
Na maioria das vezes que queremos realizar algo no R, e essa opção não está disponível no default, há uma grande chance que haja um pacote que vá atender às suas necessidades. Para instalar um pacote use a função install.packages(). Considere esse processo como a compra de um livro de receitas em uma livraria, trazendo-o para casa e colocando-o em sua prateleira (no nosso caso do R, na nossa library).
install.packages(“tidyverse”)
Uma vez instalado, o pacote precisa ser carregado na sua sessão corrente do R antes de ser utilizado.
library(tidyverse)
Quando fechamos o R, todos os pacotes são fechados e colocados na estante imaginária. Na próxima vez que formos usar o R, não será preciso instalar novamente o pacote, apenas carregá-lo usando library().
Comandos no R e minúsculas e maiúsculas
O R é uma expressão de linguagem com uma sintaxe bastante simples. É importante atentarmos que minúsculas e maiúsculas são símbolos diferentes e podem se referir a diferentes variáveis. No geral, separamos comandos por linhas, isto é, quando terminamos um comando, começamos o próximo em uma nova linha. Geralmente, quando adicionamos um comentário utilizamos #. Comentários podem estar na mesma linha de códigos como no exemplo a seguir:
library(data.table) # Carregando o pacote data.table
Comentários são feitos para o ‘leitor humano’, e não para a máquina: o R entende que não precisa executá-los. É apenas um registro sobre uma determinada parte do código. Habitue-se a usar comentários para registrar o que você está fazendo: quando você revisitar o seu próprio código algum tempo depois, será muito mais fácil entender o que está nele.
Se um comando não estiver completo no final de uma linha, o R mostrará no console uma mensagem diferente do erro, e apenas aparecerá +, e as linhas subsequentes a essa mensagem serão lidas como a continuação do comando até que a sintaxe esteja completa.
Neste tema, não cobriremos o tópico de boas práticas ao se escrever scripts, contudo, é possível achar bons materiais na internet. Lembre-se: é importante fazer buscas na internet regularmente enquanto estiver usando o R!
Independentemente da maneira que você preferir organizar seu código, sugerimos fortemente que sempre comece limpando o ambiente e liberando memória, com os seguintes comandos:
rm(list = ls()) # Remove todos os objetos do espaço de trabalho corrente
gc(). # Libera memória que continuava reservada por tarefas já executadas
## used (Mb) gc trigger (Mb) limit (Mb) max used (Mb
## Ncells 409595 21.9 841274 45 NA 657994 35.2
## Vcells 775554 6.0 8388608 64 16384 1802143 13.8
O comando ls() lista todas as variáveis existentes no ambiente. Caso você queira apagar um único objeto, utilize o comando rm(), inserindo o nome do objeto que quer remover dentro de parênteses, como no exemplo:
rm(dataframe) # Remove o objeto dataframe
Por fim, um último conceito importante antes de passarmos para operações básicas do R é o de diretório. O diretório de trabalho é apenas um caminho dos arquivos no seu computador, escolhido como localização-padrão de todos os arquivos que serão lidos ou salvos pelo R.
Cada diretório funciona como uma pequena bandeira em algum lugar no seu computador que está conectado a um projeto específico. Se pedirmos para o R importar algum arquivo ou salvar, ele assumirá que o arquivo se localiza dentro do seu diretório.
Temos somente um diretório de trabalho ativo a cada momento. Nosso diretório de trabalho é chamado de diretório de trabalho corrente. Para ver seu diretório corrente, basta digitar getwd():
getwd() # Retorna o diretório que estamos usando
## [1] "/Users/Introdução R"
Como podemos notar no exemplo acima, quando executamos esse código, o R nos diz que o diretório de trabalho é a pasta Introdução R. Isso significa que, quando formos ler arquivos dentro do R ou exportar arquivos do R, ele irá assumir que queremos colocar os arquivos nessa pasta.
Se quisermos alterar o diretório de trabalho, usamos a função setwd(). No exemplo anterior, se quisermos mudar o diretório para a pasta chamada Arquivos Exportados do R, podemos executar:
# Seleciona o diretório que vamos usar:
setwd("/Users/Arquivos Exportados do R")
Atenção
Importante notar que, em geral, se você copiar e colar o caminho, o Windows dará o nome do arquivo com \ em vez de /. O R só lê usando /, então é necessário que isso seja alterado.
Operações básicas
O R possui diversos operadores para realizar tarefas, como operações aritméticas, relativas, de atribuição e lógicos. Os operadores aritméticos são aqueles que realizam operações matemáticas básicas, como soma e multiplicação.
+: Adição
-: Subtração
*: Multiplicação
/: Divisão
^: Expoente
%%: Operação módulo (resto de uma divisão)
%/%: Divisão de inteiros
Para executá-los, basta seguir a ordem das operações matemáticas. Se quisermos executar mais de uma operação na mesma linha do script, usamos um ponto e vírgula ";" separando as operações.
> 1 + 1
## [1] 2
> 10 / 2
## [1] 5
> 2^3
## [1] 8
> 13 %/% 4
## [1] 3
> 2 + 4; 7 - 5
## [1] 6
## [1] 2
Os operadores relativos são usados para comparar valores.
<: Menor que
>: Maior que
<= :Menor que ou igual
>=: Maior que ou igual
==: Igual a
!=: Diferente de
Ao ler esses operadores, o R retornará se a relação indicada entre os valores é falsa ou verdadeira, FALSE e TRUE, em inglês, respectivamente. Vejamos exemplos:
> 20 < 30
## [1] TRUE
> 3 >= 4
## [1] FALSE
> 5 == 9
## [1] FALSE
> 20 != 2
## [1] TRUE
Operadores relativos também funcionam para avaliar valores não numéricos, como, por exemplo, palavras. Nesse caso, as palavras devem estar entre aspas para que o R saiba que se tratam de letras e não de números, como veremos adiante.
> "São Paulo" == "Sao Paulo"
## [1] FALSE
> "brasília" == "Brasília"
## [1] FALSE
> "Paraná" != "Paraná"
## [1] FALSE
> "Ceará" == "Ceará"
## [1] TRUE
Nos casos acima, o R só considerou iguais os valores das últimas duas linhas (Paraná e Ceará), pois não têm nenhum caractere diferente entre a palavra do lado direito e do lado esquerdo do operador relativo. Acentos, maiúsculas e minúsculas, e espaços são interpretados como caracteres diferentes pelo R. Assim, devemos ter atenção aos detalhes ao comparar valores.
Os operadores de atribuição são aqueles que usamos para atribuir valores aos diferentes objetos do R. Os operadores de atribuição mais comuns são:
<-, =: Atribuição à esquerda
->: Atribuição à direita
Os operadores <- e = são usados de maneira quase equivalente para atribuir valores a objetos. O uso do operador -> de atribuição à direita é raramente usado. Se quero criar dois objetos, x e y, e atribuir valores a eles, é preciso usar operadores de atribuição. Eles ficam guardados no ambiente global do R, e para visualizar seus valores no console devemos escrever seus nomes no script.
Assim:
x <- 2
x
## [1] 2
x = 7
x
## [1] 7
9 -> y
y
## [1] 9
Podemos atribuir mais de um valor a um objeto. Suponha que gostaríamos de criar um vetor x com números pares até 10 e um vetor y com números ímpares até 10. Podemos usar a função c(), de concatenar, e separar os valores do vetor por vírgulas, criando os vetores de números ímpar e par:
x = c(1,3,5,7,9) # Vetor de números ímpar
y = c(2,4,6,8,10) # Vetor de números par
Por fim, o R também possui operadores lógicos, muito úteis quando queremos analisar conjuntos ou fazer funções com condições, como veremos adiante. Os operadores lógicos do R são:
!: Não
&: E
|: Ou
Os operadores & e | realizam operações para cada elemento do objeto, produzindo um resultado de comprimento do maior operando. Isso significa que se temos um operador lógico sobre um vetor de 4 elementos, então, o resultado dos operadores & e | será do tamanho 4, seu comprimento.
Ainda sobre operadores lógicos, quando tratamos de números, zero é considerado um valor falso (FALSE) e números diferentes de zero são considerados verdadeiros (TRUE).
Vejamos isso de maneira aplicada em conjuntos, representados pelos vetores x e y, ambos de comprimento 3.
Verificando o aprendizado
ATENÇÃO!
Para desbloquear o próximo módulo, é necessário que você responda corretamente a uma das seguintes questões:
O conteúdo ainda não acabou.
Clique aqui e retorne para saber como desbloquear.
MÓDULO 2
Identificar principais objetos e classes de dados no R
Objetos, tipos e estrutura de dados
O R trabalha com objetos em seu ambiente. Neste módulo, vamos estudar os principais objetos no R. No geral, trabalhamos com diferentes objetos simultaneamente, uma vez que algumas vezes queremos realizar operações que necessitam de diversos objetos.
Mas o que são objetos no R?
Objeto é tudo que se manipula e se cria no R. Esses objetos podem ser variáveis, vetores e matrizes, cadeias de caracteres, funções ou estruturas mais gerais constituídas a partir desses outros componentes. Podemos criar objetos e salvá-los temporariamente no ambiente do R, usando os operadores de atribuição vistos no módulo anterior, atribuindo um nome a eles.
Tipos de dados básicos
Antes de conhecermos mais profundamente os objetos do R, precisamos entender os tipos de informação que o R armazena, que chamaremos de dados. É fundamental entender a forma como o R armazena e interpreta diferentes dados para minimizar erros na hora de escrever o código.
Muitas vezes, perde-se tempo tentando entender por que uma parte do código não roda ou uma função está exibindo uma mensagem de erro e, frequentemente, o problema é relacionado ao tipo de dado.
Exemplo
Por exemplo, um número pode ter sido armazenado incorretamente como caractere e tentamos executar uma soma. Como não podemos somar duas letras, o código não roda. Erros como esse são comuns no R quando estamos trabalhando com dados de fontes externas.
Existem alguns tipos básicos de dados no R, sendo eles (i) numeric (numérico); integer (inteiro); complex (complexo); logical (lógico); e character (caractere).
Dados numéricos e inteiros
Valores numéricos são chamados de numeric no R. Dados do tipo numeric comportam valores decimais. Aqui vale lembrar: o R usa a notação americana para decimais, de modo que o separador decimal é o ponto (.), e não a vírgula (,), como no Brasil. Se atribuirmos um valor numérico a uma variável x, essa variável será do tipo numérico. Podemos usar o comando mode() para recuperar o modo (tipo) de x.
x = 3.75
mode(x)
## [1] "numeric"
Além disso, mesmo que se atribua um valor inteiro a uma variável y, o número inteiro ainda será salvo como um valor do tipo numeric.
y = 10
mode(y)
## [1] "numeric"
Para criar uma variável do tipo integer (inteiro), precisamos declarar que ela é desse tipo por meio de uma função as.integer(). Quando aplicado a um número com casas decimais, o R força um arredondamento.
as.integer(10.25)
## [1] 10
Dados lógicos
Valores lógicos, como vimos anteriormente, são resultados de operações relativas. Como os demais tipos de dados, podemos salvá-los na forma de objetos. Por exemplo:
z = (3 > 5)
z
## [1] FALSE
Estamos "testando" se 3 é maior que 5 e armazenando o resultado desse teste em z. O R retorna que essa afirmação é falsa, pois 3 é menor do que 5.
Dados do tipo character
Dados do tipo character podem ser letras, palavras, frases, ou até mesmo números guardados como caracteres. Diferentemente de como acontece com os números, não podemos realizar operações algébricas com dados desse tipo.
Pesquisadores estão acostumados a trabalhar com dados character. Podem ser nomes de indivíduos, lugares, ocupação na profissão, nível de escolaridade e uma série de outras informações importantes.
Há uma série de funções específicas do R para dados do tipo character. Para converter um valor em character, usamos o comando as.character(). Para colar dois valores um ao lado do outro, usamos a função paste(), que também serve para objetos tipo numeric.
nome = "Maria"
sobrenome = "Silva"
paste(nome, sobrenome)
## [1] "Maria Silva"
x = as.character(15.7)
mode(x)
## [1] "character"
Dados missing
Quando o valor de um elemento não está disponível, dizemos que é um dado missing, ou um dado faltante. Dados missing são representados no R pelo valor especial NA. Em geral, qualquer operação em um NA gera um NA. Vejamos o vetor z, com o terceiro elemento faltante, e o vetor y. O que ocorre quando tentamos somá-los?
z = c(1,2,NA,4,5)
y = c(1,1,1,1,1)
y + z
## [1] 2 3 NA 5 6
Note que o terceiro elemento da soma dos dois vetores também é NA. Isso ocorre porque NA não é exatamente um valor, e sim um marcador para uma quantidade que não está disponível.
Em um vetor de 5 elementos, isso é fácil de identificar. Porém, quando temos um número grande de informações, devemos tomar mais cuidado para não perder informações ao executar operações em dados que contêm valores faltantes. Uma forma de identificar se há um valor faltante em um objeto no R é usando o comando is.na().
is.na(z)
## [1] FALSE FALSE TRUE FALSE FALSE
Modo e comprimento de objetos
Como já mencionamos, objeto é o nome que damos aos elementos com que o R trabalha. Alguns objetos armazenam apenas uma informação, enquanto outros armazenam vários pontos de dados. Objetos têm duas propriedades básicas: modo e comprimento. O modo se refere ao tipo de dado que o R armazena, que pode ser numérico, caractere ou outro. O comprimento de um objeto se refere ao seu tamanho. Por exemplo, um vetor x de 7 elementos tem comprimento de tamanho 7.
x = c(1,2,3,4,5,6,7)
mode(x)
## [1] "numeric"
length(x)
## [1] 7
Classes de objetos e estruturas de dados
Todos os objetos no R têm uma classe, retornada pela função class(). Para vetores simples, a classe é apenas o modo do objeto, como numeric, logical ou character. Porém, classes também podem ser matrizes, factors ou data frames.
A classe é outro atributo dos objetos do R e vai determinar a forma de armazenamento e exibição daquele objeto. Algumas funções também são sensíveis à classe do argumento que se insere na função.
Por exemplo, se quisermos saber o comprimento de um vetor de tamanho 5, a função length() retornará o valor 5. Mas e se estivermos tratando de uma matriz 2 x 4? Ou se estivermos falando de uma base de dados? Qual será o comprimento nesse caso? Vejamos adiante algumas classes.
Vetores
Vetores são uma estrutura de dados básica no R que contém elementos do mesmo tipo. Os dados podem ser do tipo logical, integer, double, character, complex ou raw.
A forma mais simples de criar um vetor no R é com o comando c(). Podemos também criar vetores de forma sequencial, através do operador : ou do comando seq(). O operador : cria uma sequência de números inteiros com intervalo de uma unidade entre eles. Já a função seq() requer 3 argumentos: o valor inicial, o valor final e o valor do intervalo entre os elementos da sequência.
Exemplo
x = c(1,2,3,4,5,6,7)
y = c(1:7)
z = seq(from = 1, to = 7, by = 1)
z = seq(1, 7, 1)
Usando o código acima, criamos vetores exatamente iguais de três formas diferentes. Vale notar que quando usamos uma função ou comando como fizemos com o vetor z, podemos especificar cada argumento separadamente (from, to e by) escrevendo por extenso e atribuindo um valor a eles, ou escrever diretamente seus valores contanto que respeitemos a ordem dos argumentos da função.
E se quisermos gerar um vetor de -6 até 12, com intervalo de 3 números? Podemos recorrer novamente à função seq().
x = seq(-6,12,3)
x
## [1] -6 -3 0 3 6 9 12
Devemos sempre lembrar que vetores são uma forma de armazenar dados. Logo, podemos recuperar cada elemento de um vetor separadamente, acessando a informação guardada nele.
Vamos criar um vetor nomes com elementos do tipo character de comprimento 8. Em outras palavras, estou criando uma lista de 8 nomes e armazenando em forma de vetor.
nomes = c("João", "Pedro", "Vitória", "Enzo", "Valentina", "Maria", "Sofia", "Juliana")
mode(nomes)
## [1] "character"
length(nomes)
## [1] 8
As funções mode() e length() confirmam o tipo de informação armazenada e o número de elementos do vetor.
Suponha que eu queira saber qual é o quarto nome no vetor. Para acessar essa informação de maneira individual, eu posso usar o indexador [] com o número do elemento que eu quero acessar entre os colchetes depois do nome do objeto.
Assim:
nomes[4]
## [1] "Enzo"
E se eu quisesse acessar os dois últimos nomes do vetor? Eu poderia combinar o comando c() com o indexador [].
nomes[c(7,8)]
## [1] "Sofia" "Juliana"
Também poderia usar o operador : para acessar, por exemplo, os 4 primeiros elementos do vetor:
nomes[c(1:4)]
## [1] "João" "Pedro" "Vitória" "Enzo"
E se eu quisesse modificar um elemento desse vetor?
Poderíamos combinar o operador de atribuição com o indexador. Assim:
nomes[1] = "Lucas"
nomes
## [1] "Lucas" "Pedro" "Vitória" "Enzo" "Valentina" "Maria"
## [7] "Sofia" "Juliana"
Nesse último exemplo, mudamos o primeiro nome do vetor de "Pedro" para "Lucas". Também podemos deletar um elemento de um vetor, com um sinal de menos (-) antes do elemento que queremos remover, ou deletar um vetor por completo, atribuindo o valor NULL a ele.
nomes = nomes[-6] # Removendo o 6º elemento do vetor
nomes
## [1] "Lucas" "Pedro" "Vitória" "Enzo" "Valentina" "Sofia"
## [7] "Juliana"
nomes = NULL # Deletando o vetor por completo
nomes
## NULL
Quando removemos o 6o elemento do vetor, ele muda também de comprimento: de 8 elementos, passa a ter somente 7. No último caso, em que deletamos o vetor, vale notar que ele continua salvo no ambiente do R como objeto, mas se torna um objeto vazio, isto é, sem dados armazenados.
Como vimos no módulo 1 com os operadores lógicos, o R faz operações com objetos com comprimento maior que 1, isto é, com mais de um elemento, como vetores ou matrizes. Podemos fazer operações aritméticas ou relativas com vetores.
x = c(1,2,3,4,5)
y = c(1,1,0,0,0)
x + 1
## [1] 2 3 4 5 6
2*x - y
## [1] 1 3 6 8 10
x < y
## [1] FALSE FALSE FALSE FALSE FALSE
Também podemos fazer operações relativas com vetores não numéricos:
a = c("RJ", "PR", "CE", "DF")
b = c("RJ", "RJ", "DF", "DF")
a == b
## [1] TRUE FALSE FALSE TRUE
Trabalhando com matrizes
Listas
Listas são estruturas de dados muito similares a vetores, com a diferença de que comportam dados de tipos misturados. Enquanto um vetor deve conter todos os elementos do mesmo tipo, sejam todos numeric ou character, por exemplo, um vetor com elementos de tipos diferentes é chamado de lista.
Podemos criar uma lista no R usando o comando list().
alunos = list("Ana", 12, "Leticia", 16, "Gabriel", 11, "Mateus", 15)
class(alunos) # Verificando que é uma lista
## [1] "list"
Acessamos os elementos de uma lista da mesma forma que fazemos com vetores: usando o indexador de colchetes.
alunos[3]
## [[1]]
## [1] "Leticia"
Em listas, podemos separar dados de tipos diferentes por componentes, dando nomes a esses componentes.
Poderíamos reorganizar a lista de alunos acima da seguinte maneira:
alunos = list("nome" = c("Ana", "Leticia", "Gabriel", "Mateus"), "idade" = c(12,16,11,15))
alunos
## $nome
## [1] "Ana" "Leticia" "Gabriel" "Mateus"
##
## $idade
## [1] 12 16 11 15
Poderíamos acessar cada componente separadamente com o operador de cifrão $ ou o colchete duplo [[]], equivalentes entre si. Se os componentes tiverem dados de um único tipo, cada um terá a classe de seus elementos.
alunos$nome
## [1] "Ana" "Leticia" "Gabriel" "Mateus"
alunos[["nome"]] # Mesmo resultado
## [1] "Ana" "Leticia" "Gabriel" "Mateus"
class(alunos$nome); class(alunos$idade)
## [1] "character"
## [1] "numeric"
Data frames
Data frames são estruturas de dados bidimensionais no R. São, provavelmente, as mais importantes para um pesquisador que trabalha com dados. São um caso especial de lista, em que cada componente tem o mesmo comprimento.
A função que cria um data frame é data.frame() e é parecida com as funções que usamos para construir matrizes, vetores e listas até aqui.
dados = data.frame("salários" = c(800,1200), "idade" = c(27, 35), "nome" = c("Guilherme", "Amanda"))
dados
## salários idade nome
## 1 800 27 Guilherme
## 2 1200 35 Amanda
class(dados)
## [1] "data.frame"
Os data frames podem ser pensados como listas em que cada componente é um vetor (ou coluna). Assim, o número de colunas do data frame será o número de componentes que ele tem, e o número de linhas será do tamanho do comprimento dessas colunas (vetores).
ncol(dados) # Verificando o número de colunas do data frame
## [1] 3
nrow(dados) # Verificando o número de linhas do data frame
## [1] 2
length(dados) # Igual ao nrow(). O número de elementos de cada vetor/coluna é igual ao comprimento do data frame.
## [1] 3
Se você já abriu uma base de dados ou uma tabela em seu computador, notou que a estrutura é muito parecida com a que apresentamos aqui. É porque um data frame é exatamente isso, uma base de dados. Assim, suas colunas podem ter nomes, que podem ser acessados pelo comando names(). Podemos mudar o nome das colunas usando esse mesmo comando, indicando o número da coluna que queremos modificar entre colchetes.
names(dados) # Nomes das colunas do data frame
## [1] "salários" "idade" "nome"
names(dados)[1] = "renda" # Modificando o nome da coluna 1 do data frame
names(dados) # Verificando a mudança
## [1] "renda" "idade" "nome"
Data frames são muito úteis para os pesquisadores guardarem e manipularem dados diversos. Com eles, podemos gerar estatísticas descritivas, fazer inferência, rodar regressões e gerar gráficos. Veremos mais sobre como trabalhar com eles e manipulá-los no próximo módulo.
Verificando o aprendizado
ATENÇÃO!
Para desbloquear o próximo módulo, é necessário que você responda corretamente a uma das seguintes questões:
O conteúdo ainda não acabou.
Clique aqui e retorne para saber como desbloquear.
MÓDULO 3
Aplicar importação e manipulação de bases de dados
Importando dados externos para o R
Só podemos fazer análise de dados se tivermos… dados. Grandes objetos de dados costumam ser lidos de arquivos externos em vez de imputados manualmente pelo usuário.
Este módulo ensina a colocar os dados no R e a manipulá-los para criar variáveis necessárias ou limpar os dados antes de iniciarmos a análise. Esse módulo, assim como o restante do tema, não tenta exaurir o assunto, nem ser extremamente detalhista; pelo contrário, ele omite muitas coisas. A omissão mais grave é, sem dúvida alguma, os pacotes do Tidyverse, mas você encontrará as indicações necessárias na seção Explore Mais.
A importação de dados no R é simples e, mesmo o software não recebendo diretamente algumas extensões, existem pacotes específicos que leem quase todas as extensões de arquivos. Vamos nos concentrar nos mais comuns: .txt, .csv, .xlsx, .dta.
A primeira função que vamos ver é a mais geral, a read.table(), que pode ser utilizada para ler um arquivo com formato de tabela.
Usando essa função, o arquivo será importado como um data frame. Já a função read.csv() lê arquivos separados por vírgula, enquanto a função read.delim() lê também um arquivo em formato de tabela e cria um objeto data frame.
# Lendo dados em tabela no R
read.table(file, header = FALSE, sep = "", dec = ".", ...)
# Lendo arquivos separados por vírgulas (".csv")
read.csv(file, header = TRUE, sep = ",", dec = ".", ...)
# Ou então use read.csv2: variante que utiliza ponto e vírgula como
# separador
read.csv2(file, header = TRUE, sep = ";", dec = ",", ...)
# Lendo arquivos separados por "\""
read.delim(file, header = TRUE, sep = "\t", dec = ".", ...)
read.delim2(file, header = TRUE, sep = "\t", dec = ",", ...)
Como podemos notar, a maioria das funções recebe os mesmos argumentos. Assim, listamos alguns deles abaixo:
- file: o diretório do arquivo que será lido pelo R.
- sep: o tipo de caractere que separa os dados. “\t” é utilizado para arquivos delimitados por barra.
- header: valor lógico. Se TRUE, read.table() supõe que seu arquivo tem uma linha de cabeçalho, de modo que a primeira linha contém o nome de cada coluna. Se esse não é o caso, pode-se utilizar o argumento header = FALSE.
- dec: o caractere utilizado como ponto decimal.
O R não lê diretamente arquivos excel (.xls ou .xlsx), apesar de alguns pacotes permitirem isso.
Mas essa não é a melhor opção: o ideal é salvar a planilha Excel com os dados em outro formato, como .csv. Isso não é difícil: basta, no Excel, ir em Salvar Como e, abaixo da opção de nome do arquivo, há a opção de escolher o formato.
Nos casos mostrados acima, o R só exibirá os dados, sem salvá-los dentro do seu ambiente. Você não poderá fazer nada com os dados; assim, para usá-los mais tarde, precisamos salvá-los no ambiente do R. Para isso, basta criar um objeto com os dados. Por exemplo:
# Lendo arquivos separados por vírgulas (".csv")
data <- read.csv(file = "dados_exemplo_1.csv", header = TRUE, sep = ",", dec = ".")
Caso você queira ler um arquivo em extensão .xls ou .xslx, é possível.
Para isso, é preciso carregar o pacote readxl e utilizar a função read_excel():
library(readxl)
# Lendo arquivos .xls ou .xlsx
data <- read_excel("dados_exemplo_1.xls")
Se você não está familiarizado com usar o caminho dos arquivos, isso pode parecer excessivamente complicado. Felizmente, o R permite que você escolha o caminho do arquivo de maneira mais usual, usando um menu e o mouse. Para isso, precisamos alterar o comando anterior ligeiramente:
# Escolhendo arquivos em csv que serão lidos
data <- read.csv(file.choose())
Essa ação abrirá o menu e permitirá que você escolha o arquivo como um menu do Microsoft Word. Entretanto, apesar de ser mais fácil, essa solução pode ser extremamente inconveniente: toda vez que você rodar o programa, terá que repetir a escolha. Apesar de trabalhar diretamente com o caminho ser um pouco mais chato, poupa muito tempo.
Atenção
Muitos arquivos com dados ainda são distribuídos em versão de programas estatísticos, como o Stata. É fácil ler esses arquivos usando o pacote foreign.
Normalmente, esse pacote já vem instalado, mas caso você não o tenha, pode instalá-lo como qualquer outro pacote. Ele permite ler dados do SAS, SPSS, entre outros. É preciso consultar a documentação do pacote, já que há uma função específica para cada tipo de arquivo.
Exemplo
Por exemplo, se quisermos ler um arquivo em formato .dta, usamos read.dta(), de forma análoga à usada com read_excel(). Vale notar que o read.dta só lê arquivos criados pelo Stata até a versão 12. Para versões posteriores do Stata, existe um pacote chamado readstata13. Se, ao usar o read.dta, você receber uma mensagem de erro, vale a pena verificar o readstata13.
Em alguns casos, os arquivos que queremos ler são muito grandes e o R pode sofrer para lê-los, mesmo que o computador utilizado tenha bastante memória e capacidade de processamento.
O pacote data.table possui algumas soluções para esse problema. Em particular, a função fread() lê arquivos de forma bem mais rápida. Para saber quais extensões a função lê, lembre-se de consultar sua documentação.
Manipulando dados
Uma vez carregados os dados, é possível manipulá-los de diversas maneiras.
A primeira coisa que devemos saber antes de manipular nossos dados é como eles estão. Assim, a função head() nos fornece as variáveis e as primeiras observações.
Outra função importantíssima para conhecermos nossos dados é a summary(). Essa função nos fornece uma espécie de resumo de cada uma das nossas variáveis, como média, máximo e mínimo.
Selecionar uma linha ou uma coluna específica de uma base de dados é fundamental. Se quisermos rodar uma regressão e cada coluna da tabela for uma variável, então, teremos que ser capazes de informar ao R qual coluna será usada como variável explicada e quais colunas como variáveis explicativas. O R usa a notação de matrizes com colchetes, então, para selecionar a primeira linha da base de dados chamada “data”, basta fazer:
data[1, ]
Note que colocamos a vírgula e depois deixamos em branco, informando ao R que queremos todas as colunas.
Para obter todas as linhas da primeira coluna, fazemos:
data[, 1]
Se quisermos apenas algumas linhas ou algumas colunas podemos passar um vetor dizendo quais são essas linhas e/ou colunas. Por exemplo, se quisermos as linhas 1 a 4, podemos executar:
data[c(1:4), ]
Se quisermos as linhas 1 e 4, podemos fazer:
data[c(1,4), ]
Outra maneira, bastante útil, de selecionar variáveis é pelo nome delas. Suponha que os dados venham com nomes, id (número de identificação), renda, raça e sexo. Para selecionar a variável renda, basta fazer data$renda. Contudo, para realizarmos essa seleção, é necessário saber como (e se) o R importou os nomes.
Para isso, a função names() permite saber quais os nomes das variáveis. Logo, names(dados) vai retornar os nomes das variáveis. Em alguns casos, vamos querer renomear alguma variável.
Exemplo
Queremos renomear a variável “renda” como “renda do mercado de trabalho”:
names(data)[names(data) == "renda"] <- "renda_mercado_trabalho"
E se quisermos selecionar uma subamostra a partir de algum critério lógico?
Por exemplo, queremos apenas uma amostra que contenha homens. Assim, se a variável sexo assumir os valores “H” ou “M”, selecionaremos apenas as observações que têm a variável sexo igual a “H”:
data[data$sexo == “H”,]
Caso precisemos organizar nossas observações de acordo com a raça, de modo a termos as observações ordenadas por grupos raciais, podemos usar a função order():
data <- data[order(data$raça), ]
Se preferirmos uma nova variável que seja igual a um, basta indicar:
data$nova_var <- 1
Algumas vezes, queremos transformar uma variável contínua em uma dummy. Variáveis dummy são variáveis lógicas, que recebem valores zero ou um. Podemos querer isolar apenas aqueles que têm renda menor do que um certo valor, de maneira que essa nova variável tenha valor igual a um para aqueles que têm renda abaixo desse nível e, caso contrário, 0. Para isso, bastaria fazer:
data$dummy <- renda < 300
Você verá que o R vai gerar um vetor de True e False.
É possível converter para numérico, caso você queira, mas não há nenhuma necessidade, uma vez que o R é capaz de interpretar o verdadeiro ou falso como uma dummy em uma regressão linear.
Caso tenhamos mais de uma base de dados, podemos querer juntá-las. Existem diferentes formas de agregarmos dados: adicionando linhas, adicionando colunas ou fundindo as bases.
Para adicionar linhas, é preciso que ambas as bases tenham as mesmas variáveis. Caso tenham, basta utilizar o comando rbind().
No caso de adicionarmos colunas, é preciso que as bases tenham exatamente as mesmas linhas e, assim, podemos usar cbind(). No caso de fundir as duas bases, é preciso que elas tenham algo em comum, a variável-chave, para agregá-las com a função merge().
A função merge tem diferentes resultados, podendo gerar uma nova base que contenha todos os elementos das duas bases, todos os elementos comuns ou apenas os elementos de uma das bases. Para isso, é preciso especificar os argumentos de forma correta. Em geral, se quisermos manter todos os elementos de X, adicionamos all.x = TRUE. Se quisermos que o resultado contenha todos os elementos de Y, adicionamos all.y = TRUE. O argumento by receberá a variável-chave que deve ser comum às duas bases.
data1 <- read_excel("dados_exemplo_1.xls")
data2 <- read_excel("dados_exemplo_2.xls")
data3 <- merge(x = data1, y = data2, by = "X")
Exemplo de importação e manipulação de dados
Verificando o aprendizado
ATENÇÃO!
Para desbloquear o próximo módulo, é necessário que você responda corretamente a uma das seguintes questões:
O conteúdo ainda não acabou.
Clique aqui e retorne para saber como desbloquear.
MÓDULO 4
Calcular estatísticas descritivas e regressões
Estatísticas descritivas, gráficos e regressão
Existem inúmeras maneiras de gerar estatísticas descritivas no R. Alguns pacotes foram criados por usuários para facilitar o processo de gerá-las e estão disponíveis no CRAN, uma rede de servidores localizados ao redor do mundo que armazenam versões idênticas e atualizadas de códigos e documentação do R, para download.
Este módulo, no entanto, ensina a calcular essas estatísticas manualmente com as funções base do R. Também vamos mostrar como criar gráficos e rodar regressões.
Neste módulo, vamos trabalhar com a base de dados USArrests, embutida no R. Para isso, basta carregá-la escrevendo USArrests e atribuindo um nome a ela, que aqui chamaremos de “dados”.
dados = USArrests
Para ver uma prévia da base de dados podemos usar o comando head(), que exibe as seis primeiras observações.
head(dados)
## Murder Assault UrbanPop Rape
## Alabama 13.2 236 58 21.2
## Alaska 10.0 263 48 44.5
## Arizona 8.1 294 80 31.0
## Arkansas 8.8 190 50 19.5
## California 9.0 276 91 40.6
## Colorado 7.9 204 78 38.7
As bases do R vêm em inglês, assim como seus comandos. Essa base contém dados fictícios sobre crimes nos Estados Unidos. Cada linha representa um estado, a primeira coluna tem a taxa de assassinatos, a segunda a taxa de agressões, a terceira a população urbana e a quarta coluna a taxa de estupros.
Estatísticas descritivas são fundamentais na vida de um pesquisador que trabalha com dados. Elas nos ajudam a conhecer melhor os dados, olhar para variáveis de forma individual e conjunta, entender como os dados se comunicam e, até mesmo, a identificar erros. O R tem uma série de comandos que calculam as estatísticas mais usuais.
Podemos encontrar o mínimo e o máximo pelas funções min() e max(), respectivamente.
min(dados$Murder) # Taxa mínima de assassinatos
## [1] 0.8
max(dados$Murder) # Taxa máxima de assassinatos
## [1] 17.4
A função range, de maneira alternativa, traz os valores máximos e mínimos de uma variável.
range(dados$Murder)
## [1] 0.8 17.4
A média de uma variável pode ser obtida pela função mean() e a mediana com o comando median().
mean(dados$Murder) # Média da taxa de assassinatos
## [1] 7.788
median(dados$Murder) # Mediana da taxa de assassinatos
## [1] 7.25
É importante tomar cuidado com valores faltantes. Se o dado do qual você estiver tirando a média tiver ao menos um valor faltante, o R retornará a média como faltante também (NA). Uma forma de solucionar o problema é incluindo o argumento na.rm = TRUE na função, que faz com que o R ignore os valores faltantes ao executar a função.
dados = rbind(dados, c(NA, NA, NA, NA)) # Adicionando uma linha com valores faltantes à base
mean(dados$Murder) # O comando retorna NAs
## [1] NA
mean(dados$Murder, na.rm = TRUE) # O comando retorna a média excluindo os NAs.
## [1] 7.788
Os diferentes quantis podem ser computados no R pela função quantile(). Para isso, basta indicar no segundo argumento qual o quantil que queremos computar. Vejamos alguns exemplos:
quantile(dados$Murder, 0.25) # Primeiro quartil
## 25%
## 4.075
quantile(dados$Murder, 0.9) # Último decil
## 90%
## 13.32
quantile(dados$Murder, 0.01) # Primeiro percentil
## 1%
## 1.437
O desvio-padrão e a variância são computados pelos comandos sd() e var().
sd(dados$Murder)
## [1] 4.35551
var(dados$Murder)
## [1] 18.97047
É preciso prestar atenção, pois no R o desvio-padrão e a variância são computados como se os dados representassem uma amostra. Assim, o denominador é n - 1 em uma amostra com n observações. Assim, se quisermos computar a variância e o desvio-padrão de uma população, é preciso fazê-lo manualmente.
Resumo de estatísticas descritivas
Quando queremos ter um panorama geral dos dados, pode ser muito trabalhoso computar as estatísticas descritivas uma por uma, variável a variável. O comando summary no R computa o mínimo, primeiro quantil, mediana, média, terceiro quartil e máximo de todas as variáveis de uma só vez.
summary(dados)
## Murder Assault UrbanPop Rape
## Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
## 1st Qu.: 4.075 1st Qu.:109.0 1st Qu.:54.50 1st Qu.:15.07
## Median : 7.250 Median :159.0 Median :66.00 Median :20.10
## Mean : 7.788 Mean :170.8 Mean :65.54 Mean :21.23
## 3rd Qu.:11.250 3rd Qu.:249.0 3rd Qu.:77.75 3rd Qu.:26.18
## Max. :17.400 Max. :337.0 Max. :91.00 Max. :46.00
Se quisermos computar estatísticas por grupo, podemos usar a função by() e definir o grupo pelo qual queremos dividir no segundo argumento da função. Como não temos um grupo, vamos criar uma variável categórica “Group” com dois grupos: um com os estados com a taxa de homicídios maior que 10, que chamaremos de grupo A, e outro com as demais observações, que chamaremos de grupo B.
dados$Group = ifelse(dados$Murder > 10, "Grupo A", "Grupo B") # Criando dois grupos de estados
by(dados, dados$Group, summary) # Gerando descritivas por grupo
## dados$Group: Grupo A
## Murder Assault UrbanPop Rape
## Min. :10.40 Min. :188.0 Min. :44.00 Min. :16.10
## 1st Qu.:11.75 1st Qu.:242.5 1st Qu.:58.50 1st Qu.:22.35
## Median :13.00 Median :254.0 Median :67.00 Median :25.80
## Mean :13.29 Mean :259.3 Mean :66.73 Mean :26.69
## 3rd Qu.:14.90 3rd Qu.:282.0 3rd Qu.:80.00 3rd Qu.:29.85
## Max. :17.40 Max. :337.0 Max. :86.00 Max. :46.00
## Group
## Length:15
## Class :character
## Mode :character
##
##
##
## ------------------------------------------------------------
## dados$Group: Grupo B
## Murder Assault UrbanPop Rape
## Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
## 1st Qu.: 3.250 1st Qu.: 84.5 1st Qu.:53.50 1st Qu.:12.05
## Median : 5.700 Median :120.0 Median :66.00 Median :16.40
## Mean : 5.431 Mean :132.8 Mean :65.03 Mean :18.89
## 3rd Qu.: 7.350 3rd Qu.:160.0 3rd Qu.:76.00 3rd Qu.:21.20
## Max. :10.000 Max. :294.0 Max. :91.00 Max. :44.50
## Group
## Length:35
## Class :character
## Mode :character
##
##
##
Tabela de frequências
A função table() cria uma tabela de frequências absolutas. Se quisermos saber quantos estados estão em cada categoria da variável “Group”, podemos fazê-lo com esse comando.
table(dados$Group)
##
## Grupo A Grupo B
## 15 35
Também podemos obter as frequências relativas com o comando prop.table() antecedendo o table().
prop.table(table(dados$Group))
##
## Grupo A Grupo B
## 0.3 0.7
Gráficos
Uma das razões pelas quais muitos analistas de dados recorrem ao R é por suas fortes capacidades gráficas. Os comandos da base do R têm muitas opções para a construção de gráficos, mas recomendamos também o uso do pacote ggplot2, parte da coleção de pacotes tidyverse, como ferramenta gráfica. Neste módulo, veremos como criar gráficos usando os comandos base do R.
Gráfico de dispersão
A forma mais comum de se criar um gráfico no R é pelo comando plot(). Ele cria um gráfico de dispersão entre duas variáveis, que são os principais argumentos da função.
plot(dados$Assault, dados$Murder) # Criando gráfico de dispersão para a relação entre taxa de assassinatos e agressões
Em geral, gráficos no R aparecem de forma crua, sem cores, com os nomes das variáveis como estão no data frame, e sem título.
O R, contudo, nos permite personalizar os gráficos adicionando e alterando elementos, e isso é feito adicionando novas linhas de comando após o gráfico.
Exemplo
Para adicionar um título, escrevemos uma linha com o comando title() com o nome que desejamos colocar no gráfico logo abaixo da linha de comando do gráfico e rodamos as duas linhas conjuntamente.
plot(dados$Assault, dados$Murder)
title("Relação entre taxa de assassinatos e agressões") # Adicionando um título
Relação entre taxa de assassinatos e agressões
Também é possível renomearmos os eixos do gráfico, incluindo os argumentos xlab e ylab na função plot().
plot(dados$Assault, dados$Murder, xlab = "Taxa de Agressões", ylab = "Taxa de Assassinatos")
title("Relação entre taxa de assassinatos e agressões”)
Relação entre taxa de assassinatos e agressões
Há uma infinidade de formas, sobre as quais não detalharemos neste tema, com que podemos personalizar gráficos no R. É possível consultar a ajuda do R com o comando help() e olhar na documentação da função que opções aquele comando gráfico suporta. A internet também conta com uma série de materiais gratuitos disponíveis, entre eles, tutoriais criados por usuários de R que ensinam como personalizar gráficos de maneira detalhada.
Também podemos criar histogramas com o R, com o comando hist(). O argumento break define o número de divisões a serem exibidas no eixo x.
hist(dados$Rape, breaks = 8)
Histogram of dados$Rape
Para visualizar a distribuição de uma variável, também podemos recorrer ao gráfico de densidade de Kernel (linha), com o comando density(), combinado ao comando plot().
plot(density(dados$Rape))
density.default(x = dados$Rape)
Gráficos de barra podem apenas ser criados a partir de variáveis qualitativas. Um gráfico de barras é uma ferramenta para visualizar a distribuição de uma variável qualitativa. Vamos usar o exemplo da variável “Group” que criamos acima para visualizar a sua distribuição. Para isso, combinamos o comando barplot() com o comando table(), usado anteriormente.
barplot(table(dados$Group))
Gráficos de linha são muito usados na área de finanças e com séries de tempo em geral. Para criá-los, basta adicionar o argumento type = 'l' ao comando plot().
plot(dados$Murder, type = 'l')
Regressões
Pesquisadores frequentemente recorrem a regressões lineares para entender a relação entre duas variáveis (ou mais). O R possui diversos comandos para rodar regressões simples, múltiplas, lineares, em probabilidade, e muitas outras que vemos em cursos de estatística, econometria e ciência de dados de forma geral. Aqui vamos ensinar como rodar algumas delas e como encontrar os estimadores da tabela de regressão.
Regressão simples
Para rodar uma regressão linear, usamos o comando lm(). Essa função tem dois argumentos principais: o primeiro, formula, em que descrevemos o modelo que queremos especificar; e o segundo, data, em que dizemos qual o data frame que estamos usando.
Assim, não precisamos escrever os nomes das variáveis com o nome do data frame seguido pelo $; basta escrever o nome da coluna com os dados que queremos rodar.
Exemplo
Suponha que queiramos entender a relação entre a taxa de homicídios e a taxa de agressões. Vamos considerar a taxa de homicídios como variável dependente nesse caso. Para rodar uma regressão, escrevemos primeiro a variável dependente do lado esquerdo da fórmula e as variáveis independentes do lado direito, e as separamos por um sinal de ~. Então:
lm(Murder ~ Assault, data = dados)
O R não exibe a tabela de regressão se não especificarmos que queremos vê-la com o comando summary(). Assim, é bastante útil guardar os resultados da regressão como um objeto. Vamos chamar a regressão do exemplo acima de reg e salvá-la como objeto, e depois visualizar a tabela de regressão.
reg = lm(Murder ~ Assault, data = dados)
summary(reg)
##
## Call:
## lm(formula = Murder ~ Assault, data = dados)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.8528 -1.7456 -0.3979 1.3044 7.9256
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.631683 0.854776 0.739 0.464
## Assault 0.041909 0.004507 9.298 2.6e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.629 on 48 degrees of freedom
## Multiple R-squared: 0.643, Adjusted R-squared: 0.6356
## F-statistic: 86.45 on 1 and 48 DF, p-value: 2.596e-12
A tabela de regressão traz a fórmula da regressão, as estatísticas descritivas dos resíduos, as estimativas, os erros-padrão, a estatística t e o p-valor de cada coeficiente. Além disso, do lado direito do p-valor, o R também exibe, em forma de asteriscos, os graus de significância de cada coeficiente, com uma linha de legenda embaixo. O comando summary() também mostra a estatística F da regressão e o R quadrado.
Além da tabela de regressões, conseguimos recuperar outras estimativas, como os resíduos estimados para cada observação e os valores preditos. Quando salvamos uma regressão em um objeto, como fizemos acima, conseguimos facilmente acessar esses valores. Por exemplo, $residuals guarda os resíduos da regressão, e $fitted.values o valor predito da variável dependente, ambos em forma de vetor.
reg$residuals
reg$fitted.values
Podemos combinar as ferramentas gráficas que aprendemos neste módulo com o que aprendemos sobre regressões para melhor compreender os dados. Sabemos que o comando plot() mostra a relação entre duas variáveis. Se adicionarmos na linha imediatamente abaixo o comando abline() com a regressão como argumento, podemos ver a linha de regressão sobre o gráfico de dispersão.
plot(dados$Assault, dados$Murder, # Gráfico de dispersão
ylab = "Taxa de Assassinatos", xlab = "Taxa de Agressões", # Nomeando Eixos
main = "Linha de regressão sobre um gráfico de dispersão") # Nomeando Gráfico
abline(reg, # Adicionando linha de regressão
col = "red") # Definindo cor da linha = vermelho
Linha de regressão sobre um gráfico de dispersão
Também podemos ver a linha de regressão criando um gráfico com a linha dos valores preditos:
plot(dados$Assault, reg$fitted.values, type = "l")
Quando estamos trabalhando com regressão, frequentemente queremos saber como os resíduos estão distribuídos para identificar heterocedasticidade. Podemos exibir graficamente a dispersão dos resíduos e adicionar uma linha com a sua média para verificar se está próxima de zero (como deve ser, por construção, pelas hipóteses de Gauss-Markov).
plot(reg$residuals)
abline(h = mean(reg$residuals), # o argumento h indica que é uma linha vertical, e o comando mean() tira a média dos resíduos
col = “red")
Para rodar uma regressão múltipla, basta adicionar variáveis ao lado direito da fórmula e separá-las por um sinal de adição +.
lm(Murder ~ Assault + UrbanPop, data = dados)
Os comandos usados para recuperar parâmetros e estimativas da regressão simples também podem ser usados na regressão múltipla.
Exemplo de Regressão Linear
Verificando o aprendizado
ATENÇÃO!
Para desbloquear o próximo módulo, é necessário que você responda corretamente a uma das seguintes questões:
O conteúdo ainda não acabou.
Clique aqui e retorne para saber como desbloquear.
Conclusão
Considerações Finais
Neste tema, conhecemos o R e vimos os primeiros passos para manipular dados e gerar algumas estatísticas.
Contudo, a programação é uma linguagem e, assim como fazemos para aprender uma língua, precisamos colocá-la em prática para solidificar nossos conhecimentos.
Quanto mais praticamos, mais fluentes ficamos, e com a programação e a linguagem R é igual. Conforme vamos aprendendo novos comandos, os problemas que encontramos na hora de lidar com dados vão ficando mais fáceis de resolver. As soluções tornam-se criativas e conseguimos executar tarefas trabalhosas em questão de minutos.
A curva de aprendizado no início pode ser íngreme, mas em um mundo cada vez mais tecnológico e automático, é importante aprendermos uma linguagem de programação para acompanharmos o progresso.
CONQUISTAS
Você atingiu os seguintes objetivos:
Descreveu o software R, o RStudio e os pacotes para operações básicas
Identificou principais objetos e classes de dados no R
Aplicou importação e manipulação de bases de dados
Calculou estatísticas descritivas e regressões