Tutorial 1: Introdução ao R

Este tutorial é baseado nos exemplos do livro An Introduction to Statistical Learning, de Gareth James, Daniela Witten, Trevor Hastie e Rob Tibshirani (https://www.statlearning.com/). Nele, vamos introduzir alguns comandos simples do R, afinal, a melhor maneira de aprender uma nova linguagem de programação é testando seus comandos.

O R pode ser baixado em http://cran.r-project.org/. Recomendamos que você execute o R dentro de um Ambiente de Desenvolvimento Integrado (IDE, em inglês), como o RStudio, que pode ser baixado gratuitamente em http://rstudio.com. O site do RStudio também oferece uma versão em nuvem do R, que não requer a instalação de nenhum software.

Comandos Básicos

O R utiliza funções para realizar operações. Para executar uma função chamada funcname, digitamos funcname(input1, input2), onde os inputs (ou argumentos) input1 e input2 indicam ao R como executar a função. Uma função pode ter qualquer número de argumentos.

Por exemplo, para criar um vetor de números, usamos a função c() (de concatenar). Quaisquer números dentro dos parênteses serão unidos. O comando a seguir instrui o R a juntar os números 1, 3, 2 e 5, e a salvá-los como um vetor chamado x. Quando digitamos x, ele nos devolve o vetor:

x <- c(1, 3, 2, 5)
x
[1] 1 3 2 5

Observe que o > não faz parte do comando; ele é impresso pelo R para indicar que está pronto para receber outro comando. Também podemos salvar objetos usando = em vez de <-:

x = c(1, 6, 2)
x
[1] 1 6 2
y = c(1, 4, 3)

Pressionar a tecla de seta para cima várias vezes exibirá os comandos anteriores, que podem então ser editados. Isso é útil, já que frequentemente desejamos repetir um comando semelhante. Além disso, digitar ?funcname sempre fará com que o R abra uma nova janela de ajuda com informações adicionais sobre a função funcname().

Podemos instruir o R a somar dois conjuntos de números. Ele então somará o primeiro número de x com o primeiro número de y, e assim por diante. No entanto, x e y devem ter o mesmo comprimento. Podemos verificar o comprimento deles usando a função length():

length(x)
[1] 3
length(y)
[1] 3
x + y
[1]  2 10  5

A função ls() permite visualizar uma lista de todos os objetos, como dados e funções, que salvamos até o momento. A função rm() pode ser usada para deletar qualquer um desses objetos que não desejamos mais manter:

ls()
[1] "x" "y"
rm(x, y)
ls()
character(0)

Também é possível remover todos os objetos de uma só vez:

rm(list = ls())

A função matrix() pode ser usada para criar uma matriz de números. Antes de usarmos a função matrix(), podemos aprender mais sobre ela utilizando ?matrix:

?matrix
starting httpd help server ... done

O arquivo de ajuda revela que a função matrix() recebe vários parâmetros, mas por enquanto focaremos nos três primeiros: os dados (as entradas na matriz), o número de linhas e o número de colunas. Primeiro, criamos uma matriz simples:

x <- matrix(data = c(1, 2, 3, 4), nrow = 2, ncol = 2)
x
     [,1] [,2]
[1,]    1    3
[2,]    2    4

Observe que poderíamos muito bem omitir a digitação de data=, nrow= e ncol= no comando matrix() acima: ou seja, poderíamos simplesmente digitar:

x <- matrix(c(1, 2, 3, 4), 2, 2)

…e isso teria o mesmo efeito. No entanto, pode ser útil especificar os nomes dos argumentos passados, já que, caso contrário, o R assumirá que os argumentos da função são passados para a função na mesma ordem que está descrita no arquivo de ajuda da função. Como este exemplo ilustra, por padrão, o R cria matrizes preenchendo as colunas sucessivamente. Alternativamente, a opção byrow = TRUE pode ser usada para preencher a matriz na ordem das linhas:

matrix(c(1, 2, 3, 4), 2, 2, byrow = TRUE)
     [,1] [,2]
[1,]    1    2
[2,]    3    4

Observe que no comando acima não atribuímos a matriz a um valor, como x. Nesse caso, a matriz é impressa na tela, mas não é salva para cálculos futuros.

A função sqrt() retorna a raiz quadrada de cada elemento de um vetor ou matriz. O comando x^2 eleva cada elemento de x à potência de 2; quaisquer potências são possíveis, incluindo potências fracionárias ou negativas.

sqrt(x)
         [,1]     [,2]
[1,] 1.000000 1.732051
[2,] 1.414214 2.000000
x^2
     [,1] [,2]
[1,]    1    9
[2,]    4   16

A função rnorm() gera um vetor de variáveis normais aleatórias, com o primeiro argumento n representando o tamanho da amostra. Cada vez que chamamos essa função, obtemos uma resposta diferente. Aqui, criamos dois conjuntos de números correlacionados, x e y, e usamos a função cor() para calcular a correlação entre eles:

x <- rnorm(50)
y <- x + rnorm(50, mean = 50, sd = 0.1)
cor(x, y)
[1] 0.9938037

Por padrão, o rnorm() cria variáveis aleatórias normais padrão com média igual a \(0\) e desvio padrão igual a \(1\). No entanto, a média e o desvio padrão podem ser alterados utilizando os argumentos mean e sd, como ilustrado acima. Às vezes, queremos que nosso script reproduza o mesmo conjunto exato de números aleatórios; para isso, podemos usar a função set.seed(). A função set.seed() recebe um argumento inteiro (arbitrário):

set.seed(1234)
rnorm(50)
 [1] -1.20706575  0.27742924  1.08444118 -2.34569770  0.42912469  0.50605589
 [7] -0.57473996 -0.54663186 -0.56445200 -0.89003783 -0.47719270 -0.99838644
[13] -0.77625389  0.06445882  0.95949406 -0.11028549 -0.51100951 -0.91119542
[19] -0.83717168  2.41583518  0.13408822 -0.49068590 -0.44054787  0.45958944
[25] -0.69372025 -1.44820491  0.57475572 -1.02365572 -0.01513830 -0.93594860
[31]  1.10229755 -0.47559308 -0.70944004 -0.50125806 -1.62909347 -1.16761926
[37] -2.18003965 -1.34099319 -0.29429386 -0.46589754  1.44949627 -1.06864272
[43] -0.85536463 -0.28062300 -0.99434008 -0.96851432 -1.10731819 -1.25198589
[49] -0.52382812 -0.49684996

Usaremos o set.seed() ao longo dos tutoriais sempre que realizarmos cálculos envolvendo quantidades aleatórias. Em geral, isso deve permitir que qualquer usuário reproduza os mesmos resultados dos tutoriais. No entanto, à medida que novas versões do R (e seus pacotes) se tornam disponíveis, pequenas discrepâncias podem ocorrer.

As funções mean() e var() podem ser usadas para calcular a média e a variância de um vetor de números. Aplicar sqrt() à saída de var() fornecerá o desvio padrão. Ou podemos simplesmente usar a função sd():

set.seed(3)
y <- rnorm(100)
mean(y)
[1] 0.01103557
var(y)
[1] 0.7328675
sqrt(var(y))
[1] 0.8560768
sd(y)
[1] 0.8560768

Gráficos Básicos

A função plot() é a forma básica de plotar dados no R. Por exemplo, plot(x, y) gera um gráfico de dispersão dos números em x contra os números em y. Existem muitas opções adicionais que podem ser passadas para a função plot(). Por exemplo, passar o argumento xlab resultará em um rótulo no eixo \(x\). (Para obter mais informações sobre a função plot(), digite ?plot.)

x <- rnorm(100)
y <- rnorm(100)
plot(x, y)

plot(x, y, xlab = "this is the x-axis",
    ylab = "this is the y-axis",
    main = "Plot of X vs Y")

Frequentemente, iremos querer salvar a saída de um gráfico no R. O comando que usamos para fazer isso dependerá do tipo de arquivo que gostaríamos de criar. Por exemplo, para criar um arquivo PDF, usamos a função pdf(), e para criar um JPEG, usamos a função jpeg():

pdf("Figure.pdf")
plot(x, y, col = "green")
dev.off()
png 
  2 

A função dev.off() indica para o R que terminamos de criar o gráfico. Alternativamente, podemos simplesmente copiar a janela do gráfico e colá-la em um tipo de arquivo apropriado, como um documento do Word (porém as vezes isso pode comprometer a qualidade/resolução final da figura).

A função seq() pode ser usada para criar uma sequência de números. Por exemplo, seq(a, b) cria um vetor de números inteiros entre a e b. No entanto, existem muitas outras opções, por exemplo: seq(0, 1, length = 10), cria uma sequência de 10 números igualmente espaçados entre 0 e 1; digitar 3:11 é uma forma abreviada de seq(3, 11) para argumentos inteiros; etc…

x <- seq(1, 10)
x
 [1]  1  2  3  4  5  6  7  8  9 10
x <- 1:10
x
 [1]  1  2  3  4  5  6  7  8  9 10
x <- seq(-pi, pi, length = 50)

Agora criaremos alguns gráficos mais sofisticados. A função contour() gera um gráfico de contorno para representar dados tridimensionais (como um mapa topográfico). Ela recebe três argumentos:

  • Um vetor dos valores de x (a primeira dimensão),
  • Um vetor dos valores de y (a segunda dimensão), e
  • Uma matriz cujos elementos correspondem ao valor de z (a terceira dimensão) para cada par de coordenadas (x, y).

Assim como na função plot(), existem muitos outros parâmetros que podem ser usados para ajustar o resultado da função contour(). (Para saber mais sobre esses parâmetros, consulte o arquivo de ajuda digitando ?contour.)

y <- x
f <- outer(x, y, function(x, y) cos(y) / (1 + x^2))
contour(x, y, f)
contour(x, y, f, nlevels = 45, add = T)

fa <- (f - t(f)) / 2
contour(x, y, fa, nlevels = 15)

A função image() funciona da mesma forma que a contour(), exceto que ela gera um gráfico codificado por cores, cujas cores dependem do valor de z. Isso é conhecido como heatmap (mapa de calor). Alternativamente, a função persp() pode ser usada para gerar um gráfico tridimensional. Os argumentos theta e phi controlam os ângulos de visualização do gráfico:

image(x, y, fa)

persp(x, y, fa)

persp(x, y, fa, theta = 30)

persp(x, y, fa, theta = 30, phi = 20)

persp(x, y, fa, theta = 30, phi = 70)

persp(x, y, fa, theta = 30, phi = 40)

Indexação de Dados

Frequentemente desejamos examinar uma parte de um conjunto de dados. Suponha que nossos dados estejam armazenados na matriz A:

A <- matrix(1:16, 4, 4)
A
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16

Digitar:

A[2, 3]
[1] 10

…irá selecionar o elemento correspondente à segunda linha e à terceira coluna. O primeiro número após o símbolo de colchete [ sempre se refere à linha, e o segundo número sempre se refere à coluna. Também podemos selecionar várias linhas e colunas ao mesmo tempo, fornecendo vetores como índices:

A[c(1, 3), c(2, 4)]
     [,1] [,2]
[1,]    5   13
[2,]    7   15
A[1:3, 2:4]
     [,1] [,2] [,3]
[1,]    5    9   13
[2,]    6   10   14
[3,]    7   11   15
A[1:2, ]
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
A[, 1:2]
     [,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8

Os dois últimos exemplos incluem nenhum índice para as colunas ou nenhum índice para as linhas. Isso indica que o R deve incluir todas as colunas ou todas as linhas, respectivamente. O R trata uma única linha ou coluna de uma matriz como um vetor:

A[1, ]
[1]  1  5  9 13

O uso de um sinal negativo - no índice indica ao R para manter todas as linhas ou colunas, exceto aquelas indicadas no índice:

A[-c(1, 3), ]
     [,1] [,2] [,3] [,4]
[1,]    2    6   10   14
[2,]    4    8   12   16
A[-c(1, 3), -c(1, 3, 4)]
[1] 6 8

A função dim() retorna o número de linhas seguido pelo número de colunas de uma matriz dada:

dim(A)
[1] 4 4

Carregando Dados

Para a maioria das análises, o primeiro passo envolve importar um conjunto de dados para o R. Antes de tentar carregar um conjunto de dados, devemos garantir que o R saiba procurar os dados no diretório correto (Working Directory). Você pode fazer isso manualmente no RStudio clicando em: “Session -> Set Working Directory -> Choose Directory”

A função read.table() é uma das principais maneiras de fazer isso (bem como a função read.csv). O arquivo de ajuda ?read.table() contém detalhes sobre como usar essa função. Podemos usar a função write.table() para exportar dados (bem como a função write.csv()).

Começamos carregando o conjunto de dados Auto usando função read.table(). Esses dados fazem parte da biblioteca (ou pacote) ISLR2, e podem ser carregados diretamente acessando o link https://www.statlearning.com/s/Auto.data. O comando a seguir carregará o arquivo chamado Auto.data no R e o armazenará como um objeto chamado Auto, em um formato denominado data frame. Depois que os dados forem carregados, a função View() pode ser usada para visualizá-los em uma janela semelhante a uma planilha. (Essa função pode ser um pouco temperamental; se você tiver dificuldades para usá-la, tente a função head().) A função head() também pode ser usada para visualizar as primeiras linhas dos dados (remova o # antes de rodar o script abaixo ou o R interpretará a linha com View(Auto) como comentário e ela será ignorada):

Auto <- read.table("https://www.statlearning.com/s/Auto.data")
# View(Auto)
head(Auto)
    V1        V2           V3         V4     V5           V6   V7     V8
1  mpg cylinders displacement horsepower weight acceleration year origin
2 18.0         8        307.0      130.0  3504.         12.0   70      1
3 15.0         8        350.0      165.0  3693.         11.5   70      1
4 18.0         8        318.0      150.0  3436.         11.0   70      1
5 16.0         8        304.0      150.0  3433.         12.0   70      1
6 17.0         8        302.0      140.0  3449.         10.5   70      1
                         V9
1                      name
2 chevrolet chevelle malibu
3         buick skylark 320
4        plymouth satellite
5             amc rebel sst
6               ford torino

Observe que o arquivo Auto.data é simplesmente um arquivo de texto, que você poderia abrir alternativamente em seu computador usando um editor de texto padrão. Muitas vezes, é uma boa ideia visualizar um conjunto de dados usando um editor de texto ou outro software, como o Excel, antes de carregá-lo no R.

Nesse caso, nosso conjunto de dados foi carregado corretamente, mas o R poderia ter assumido que os nomes das variáveis fazem parte dos dados e tê-los incluído na primeira linha do nosso data frame Auto. Nesses casos, usar a opção header = T (ou header = TRUE) na função read.table() informa ao R que a primeira linha do arquivo contém os nomes das variáveis, e o problema seria corrigido. De forma semelhante, o argumento stringsAsFactors = T informa ao R que qualquer variável que contenha caracteres deve ser interpretada como uma variável qualitativa. A função str() apresenta uma visão geral do nosso data frame e suas variáveis:

Auto <- read.table("https://www.statlearning.com/s/Auto.data", header = T, stringsAsFactors = T)
str(Auto)
'data.frame':   397 obs. of  9 variables:
 $ mpg         : num  18 15 18 16 17 15 14 14 14 15 ...
 $ cylinders   : int  8 8 8 8 8 8 8 8 8 8 ...
 $ displacement: num  307 350 318 304 302 429 454 440 455 390 ...
 $ horsepower  : Factor w/ 94 levels "?","100.0","102.0",..: 17 35 29 29 24 42 47 46 48 40 ...
 $ weight      : num  3504 3693 3436 3433 3449 ...
 $ acceleration: num  12 11.5 11 12 10.5 10 9 8.5 10 8.5 ...
 $ year        : int  70 70 70 70 70 70 70 70 70 70 ...
 $ origin      : int  1 1 1 1 1 1 1 1 1 1 ...
 $ name        : Factor w/ 304 levels "amc ambassador brougham",..: 49 36 231 14 161 141 54 223 241 2 ...

De forma mais concisa, a função dim() nos informa que os dados Auto têm 397 observações, ou linhas, e nove variáveis (ou colunas). Existem várias maneiras de lidar com dados ausentes. Neste caso, apenas cinco das linhas contêm observações ausentes, e por isso escolhemos usar a função na.omit() para simplesmente remover essas linhas:

Auto <- na.omit(Auto)
dim(Auto)
[1] 397   9

Uma vez que os dados são carregados corretamente, podemos usar a função names() para verificar os nomes das variáveis:

names(Auto)
[1] "mpg"          "cylinders"    "displacement" "horsepower"   "weight"      
[6] "acceleration" "year"         "origin"       "name"        

Podemos usar a função plot() para produzir gráficos de dispersão das variáveis quantitativas. No entanto, simplesmente digitar os nomes das variáveis gerará uma mensagem de erro, porque o R não sabe que deve procurar essas variáveis no conjunto de dados Auto:

plot(cylinders, mpg)
Error: object 'cylinders' not found

Para se referir a uma variável em um data frame, devemos digitar o nome do conjunto de dados seguido pelo nome da variável, unidos pelo símbolo $. Alternativamente, podemos usar a função attach() para dizer ao R para tornar as variáveis desse conjunto de dados disponíveis pelo nome (remova os # antes de rodar o script abaixo ou o R interpretará as linhas como comentários e elas serão ignoradas). Importante: use a função detach() quando terminar de análisar o conjunto de dados associados à função attach().

plot(Auto$cylinders, Auto$mpg)

# attach(Auto)
# plot(cylinders, mpg)
# detach(Auto)

A variável cylinders é armazenada como um vetor numérico, então o R a tratou como quantitativa. No entanto, como há apenas um pequeno número de valores possíveis para cylinders, pode-se preferir tratá-la como uma variável qualitativa… A função as.factor() converte variáveis quantitativas em variáveis qualitativas:

Auto$cylinders <- as.factor(Auto$cylinders)

Se a variável plotada no eixo \(x\) for qualitativa, então boxplots serão automaticamente produzidos pela função plot(). Como de costume, uma série de opções pode ser especificada para personalizar os gráficos:

plot(Auto$cylinders, Auto$mpg)

plot(Auto$cylinders, Auto$mpg, col = "red")

plot(Auto$cylinders, Auto$mpg, col = "red", varwidth = T)

plot(Auto$cylinders, Auto$mpg, col = "red", varwidth = T,
    horizontal = T)

plot(Auto$cylinders, Auto$mpg, col = "red", varwidth = T,
    xlab = "cylinders", ylab = "MPG")

A função hist() pode ser usada para plotar um histograma. Note que col = 2 tem o mesmo efeito que col = "red":

hist(Auto$mpg)

hist(Auto$mpg, col = 2)

hist(Auto$mpg, col = 2, breaks = 15)

A função pairs() cria uma matriz de dispersão, ou seja, um gráfico de dispersão para cada par de variáveis. Também podemos produzir gráficos de dispersão para apenas um subconjunto das variáveis:

pairs(Auto)

pairs(
    ~ mpg + displacement + horsepower + weight + acceleration,
    data = Auto
  )

Em conjunto com a função plot(), a função identify() oferece um método interativo útil para identificar o valor de uma variável específica para pontos em um gráfico. Passamos três argumentos para a função identify(): a variável do eixo \(x\); a variável do eixo \(y\); e a variável cujos valores gostaríamos de ver impressos para cada ponto. Ao clicar em um ou mais pontos no gráfico e pressionar a tecla Esc, o R imprimirá os valores da variável de interesse. Os números impressos sob a função identify() correspondem às linhas para os pontos selecionados:

plot(Auto$horsepower, Auto$mpg)
identify(Auto$horsepower, Auto$mpg, Auto$name)

integer(0)

A função summary() produz um resumo numérico de cada variável em um conjunto de dados específico:

summary(Auto)
      mpg        cylinders  displacement     horsepower      weight    
 Min.   : 9.00   3:  4     Min.   : 68.0   150.0  : 22   Min.   :1613  
 1st Qu.:17.50   4:203     1st Qu.:104.0   90.00  : 20   1st Qu.:2223  
 Median :23.00   5:  3     Median :146.0   88.00  : 19   Median :2800  
 Mean   :23.52   6: 84     Mean   :193.5   110.0  : 18   Mean   :2970  
 3rd Qu.:29.00   8:103     3rd Qu.:262.0   100.0  : 17   3rd Qu.:3609  
 Max.   :46.60             Max.   :455.0   75.00  : 14   Max.   :5140  
                                           (Other):287                 
  acceleration        year           origin                  name    
 Min.   : 8.00   Min.   :70.00   Min.   :1.000   ford pinto    :  6  
 1st Qu.:13.80   1st Qu.:73.00   1st Qu.:1.000   amc matador   :  5  
 Median :15.50   Median :76.00   Median :1.000   ford maverick :  5  
 Mean   :15.56   Mean   :75.99   Mean   :1.574   toyota corolla:  5  
 3rd Qu.:17.10   3rd Qu.:79.00   3rd Qu.:2.000   amc gremlin   :  4  
 Max.   :24.80   Max.   :82.00   Max.   :3.000   amc hornet    :  4  
                                                 (Other)       :368  

Para variáveis qualitativas, como name, o R listará o número de observações que pertencem a cada categoria. Também podemos produzir um resumo de uma única variável:

summary(Auto$mpg)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   9.00   17.50   23.00   23.52   29.00   46.60 

Uma vez que terminamos de usar o R, digitamos q() para fechá-lo ou sair. Ao sair do R, temos a opção de salvar o workspace atual para que todos os objetos (como conjuntos de dados) que criamos nesta sessão do R fiquem disponíveis da próxima vez.

Antes de sair do R, podemos querer salvar um registro de todos os comandos que digitamos na sessão mais recente; isso pode ser feito utilizando a função savehistory(). Da próxima vez que entrarmos no R, podemos carregar esse histórico usando a função loadhistory(), se desejarmos.

Exercicios

Exercício 1

Este exercício refere-se a um conjunto de dados sobre universidades americanas chamado College.csv (ele pode ser baixado do site https://www.statlearning.com/resources-second-edition na seção Data Sets). Ele contém uma série de variáveis de 777 universidades e faculdades diferentes. As variáveis são:

  • Private: Indicador pública/privada
  • Apps: Número de inscrições de alunos recebidas
  • Accept: Número de alunos aceitos
  • Enroll: Número de novos alunos matriculados
  • Top10perc: Novos alunos que ficaram entre os top 10% melhores em suas classes durante o ensino médio
  • Top25perc: Novos alunos que ficaram entre os top 25% melhores em suas classes durante o ensino médio
  • F.Undergrad: Número de alunos de graduação matriculados em tempo integral
  • P.Undergrad: Número de alunos de graduação matriculados em meio período
  • Outstate: Mensalidades de alunos de outros estados
  • Room.Board: Custos de hospedagem e alimentação
  • Books: Custos estimados de livros
  • Personal: Gastos pessoais estimados
  • PhD: Porcentagem de professores com Ph.D.
  • Terminal: Porcentagem de professores com o nível mais alto de qualificação em suas áreas de atuação
  • S.F.Ratio: Relação aluno/professor
  • perc.alumni: Porcentagem de ex-alunos que doam dinheiro à universidade
  • Expend: Gasto da universidade na educação de cada aluno
  • Grad.Rate: Taxa de graduação

(a) Use a função read.csv() para ler os dados no R. Certifique-se de que o diretório esteja definido para o local correto onde o arquivo College.csv está salvo. Associe os dados a um objeto (data frame) chamado college.

(b) Examine os dados usando a função View(). Você deve notar que a primeira coluna é apenas o nome de cada universidade. Vamos assumir que não queremos que o R trate esses nomes como “dados”, mas pode ser útil ter esses nomes salvos para mais tarde… Tente os seguintes comandos (remova os # antes de rodar o script abaixo ou o R interpretará as linhas como comentários e elas serão ignoradas):

# rownames(college) <- college[, 1]
# View(college)

Você deve ver que agora há uma coluna com o nome de cada universidade. Isso significa que R deu a cada linha um nome correspondente à cada universidade (note que esta não é uma coluna de dados). No entanto, ainda precisamos eliminar a primeira coluna do data frame onde os nomes estão armazenados:

# college <- college[, -1]
# View(college)

(c) Agora você deve ver que a primeira coluna de dados é Private.

  • Use a função pairs() para produzir uma matriz de gráfico de dispersão das primeiras dez colunas ou variáveis dos dados. Lembre-se de que você pode fazer referência às dez primeiras colunas de uma matriz A usando A[ ,1:10].

  • Use a função plot() para produzir boxplots lado a lado de Outstate vs. Private.

  • Crie uma nova variável qualitativa chamada Elite compartimentando a variável Top10perc. Vamos dividir as universidades em dois grupos, com base na proporção Top10perc exceder 50% (remova # do script abaixo):

# Elite <- rep("No", nrow(college))
# Elite[college$Top10perc > 50] <- "Yes"
# Elite <- as.factor(Elite) 
# college <- data.frame(college , Elite)

Existe uma forma mais fácil de compartimentar os dados utilizando a função ifelse(). Pesquise como essa função funciona e escreva um script em R utilizando-a para (re)criar a variável Elite (você pode chamá-la de Elite2 se preferir, para poder compará-la com a original).

  • Use a função summary() para ver quantas universidades de elite existem. Agora use a função plot() para produzir boxplots lado a lado de Outstate vs. Elite.

  • Use a função hist() para produzir alguns histogramas com diferentes intervalos para algumas das variáveis quantitativas. Você pode achar útil o comando par(mfrow = c(2, 2)): ele dividirá a janela de plotagem em quatro regiões para que quatro gráficos possam ser plotados simultaneamente. (Modificar os argumentos dessa função dividirá a tela de outras maneiras.)

  • Continue explorando os dados: crie ao menos mais uma nova variável (que faça sentido) e um gráfico em que ela esteja presente.

Exercício 2

Este exercício envolve o conjunto de dados Auto (Auto.data) utilizado neste tutorial. Certifique-se de que os valores ausentes foram removidos dos dados.

(a) Quais das variáveis são quantitativas e quais são qualitativas?

(b) Qual é o intervalo de cada variável quantitativa? Você pode responder a isso usando a função range().

(c) Qual é a média e o desvio padrão de cada variável quantitativa?

(d) Agora remova as observações entre as linhas 10 e 85. Escolha uma das variáveis quantitativas: qual é o intervalo, a média e o desvio padrão dessa variável baseando-se no subconjunto dos dados que permanecem?

(e) Usando o conjunto de dados completo, investigue as variáveis graficamente, usando gráficos de dispersão ou outras ferramentas de sua escolha. Crie alguns gráficos destacando as relações entre os variáveis.

(f) Suponha que desejamos prever o consumo de combustível (mpg) com base em outras variáveis. Seus gráficos sugerem que alguma variável pode ser particularmente útil para prever mpg?

Exercício 3

Este exercício envolve o conjunto de dados de habitação da cidade de Boston que faz parte da biblioteca ISLR2 (você terá que instalar essa biblioteca para poder acessá-lo). Para começar, carregue o conjunto de dados (remova # do script abaixo):

library(ISLR2)

Attaching package: 'ISLR2'
The following object is masked _by_ '.GlobalEnv':

    Auto
# Boston

Leia sobre esse conjunto de dados utilizando o comando ?Boston e responda as questões abaixo:

(a) Quantas linhas existem neste conjunto de dados? Quantas colunas? O que as linhas e colunas representam?

(b) Faça alguns gráficos de dispersão em pares dos preditores (variáveis) neste conjunto de dados.

(c) Algum dos preditores está associado/correlacionado à taxa de criminalidade per capita?

(d) Algum dos setores censitários de Boston parece ter taxas de criminalidade particularmente altas? Taxas de imposto altas? Proporção aluno-professor alta? Verifique os intervalos de valores de cada preditor.

(e) Quantos dos setores censitários neste conjunto de dados fazem fronteira com o rio Charles?

(f) Qual é a proporção média aluno-professor entre as cidades neste conjunto de dados?

(g) Qual setores censitários de Boston tem o menor valor médio de casas ocupadas pelo proprietário? Quais são os valores dos outros preditores para esses setores censitários e como esses valores se comparam aos intervalos de valores desses preditores?

(h) Nesse conjunto de dados, quantos setores censitários têm em média mais de sete cômodos por residência? E mais de oito cômodos?

Este é fim do nosso tutorial de introdução ao R. Se você quiser saber mais, leia o livro Hands-On Programming with R, disponível em https://rstudio-education.github.io/hopr/index.html