Introdução ao R



Parte 1


Questão 1

a) Construa um vetor com os 8 primeiros dígitos da sua matrícula

b) Construa uma matriz com 2 linhas e 4 colunas utilizando o vetor anterior, de forma que os dois dígitos do ano da matrícula componham a primeira coluna dessa matriz.

# Vetor:


matricula <- c(2,3,1,0,1,1,0,1)

# Matriz:

matriz <- matrix(matricula, nrow = 2, ncol = 4, byrow = FALSE)


# Apresentando o vetor:

matricula
## [1] 2 3 1 0 1 1 0 1
# Apresentando a matriz:

matriz
##      [,1] [,2] [,3] [,4]
## [1,]    2    1    1    0
## [2,]    3    0    1    1

Questão 2

a) Crie uma sequência com os números de 1 a 40, salve em um vetor com o nome de x.

b) Crie outra sequência com os números pares de 1 a 40, seguido dos números ímpares de 1 a 40, salve em um vetor com o nome de y.

c) Crie um data frame cuja primeira coluna é o vetor x (nomeie essa coluna de x) e cuja segunda coluna é o vetor y (nomeie essa coluna de y).

d) Considere que cada par ordenado (x1, y1) são as coordenadas de um ponto no R2. Verifique se cada ponto está dentro do círculo de raio 30 (retornando TRUE) ou fora do círculo (retornando FALSE). (Obs: São 40 pontos, com abscissa detalhada no vetor x e ordenada no vetor y).

# Item a):

x <- 1:40


# Item b):


pares <- seq(2,40, by = 2)
impares <- seq(1,39, by = 2)


# Vetor desejado:

y <- c(pares,impares)


# Item c):

dados <- data.frame(
  x = x,
  y = y
)


# Apresentando o Dataframe:

dados
##     x  y
## 1   1  2
## 2   2  4
## 3   3  6
## 4   4  8
## 5   5 10
## 6   6 12
## 7   7 14
## 8   8 16
## 9   9 18
## 10 10 20
## 11 11 22
## 12 12 24
## 13 13 26
## 14 14 28
## 15 15 30
## 16 16 32
## 17 17 34
## 18 18 36
## 19 19 38
## 20 20 40
## 21 21  1
## 22 22  3
## 23 23  5
## 24 24  7
## 25 25  9
## 26 26 11
## 27 27 13
## 28 28 15
## 29 29 17
## 30 30 19
## 31 31 21
## 32 32 23
## 33 33 25
## 34 34 27
## 35 35 29
## 36 36 31
## 37 37 33
## 38 38 35
## 39 39 37
## 40 40 39
# Item d):

# Verificando se cada ponto está dentro do círculo desejado:

raio = 30

dentro_circulo <- (dados$x**2 + dados$y**2) <= raio**2

# Apresentando:

dentro_circulo
##  [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [13]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
## [25]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE

Questão 3:

a) Crie o vetor a seguir com 1 observação faltante (NA): x = 10, 20, 30, NA.

b) Calcule a média do vetor e explique o resultado obtido.

c) Leia o help da função mean e corrija o resultado da letra b) para ser numérico.

# Item a):

x <- c(10,20,30,NA)

# Item b):

media_vetor_x <- mean(x)

Comentários: Não foi obtido um resultado numérico pois há um valor ausente presente no vetor.


# Item c):

# Usando a documentação para retornar o valor numérico corretamente:

media_vetor_X <- mean(x, na.rm = TRUE)

# A função mean tem o argumento 'na.rm' que, quando definido como TRUE, remove os valores ausentes antes de calcular a média.

# Apresentando a média:

media_vetor_X
## [1] 20


O R disponibiliza diversos bancos de dados. Nesta lista trabalharemos com o banco de dados airquality disponível no R (ou seja, basta digitar airquality para visualizar o objeto). Leia o help do airquality para aprender o contexto das variáveis e, em seguida, responda as perguntas a seguir de forma sequencial (ou seja, faça a questão 2 considerando o resultado da questão 1, e as questões subsequentes utilizando o resultado de todas anteriores a ela).


1. Altere o nome de todas as variáveis do banco de dados para o português.

# Salvando primeiramente os dados em um novo dataset:

dados <- airquality


# Verificando as linhas iniciais do dataset:

dados[1:6,]
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6
# Alterando de fato o nome de todas as variáveis:

names(dados) <- c("Ozonio","Radiacao_solar","Vento","Temperatura","Mes","Dia")

# Observando a mudança:

head(dados)
##   Ozonio Radiacao_solar Vento Temperatura Mes Dia
## 1     41            190   7.4          67   5   1
## 2     36            118   8.0          72   5   2
## 3     12            149  12.6          74   5   3
## 4     18            313  11.5          62   5   4
## 5     NA             NA  14.3          56   5   5
## 6     28             NA  14.9          66   5   6
# (Opção 2):

colnames(dados) <- c("Ozonio","Radiacao_solar","Vento","Temperatura","Mes","Dia")


# Verificando:

head(dados)
##   Ozonio Radiacao_solar Vento Temperatura Mes Dia
## 1     41            190   7.4          67   5   1
## 2     36            118   8.0          72   5   2
## 3     12            149  12.6          74   5   3
## 4     18            313  11.5          62   5   4
## 5     NA             NA  14.3          56   5   5
## 6     28             NA  14.9          66   5   6

Informações sobre os dados:

Descrição: Medições diárias da qualidade do ar em Nova York, maio a setembro de 1973.

Formato: O Dataset possui 153 observações e 6 variáveis. 153 linhas e 6 colunas.


Variáveis

Ozone: Ozônio médio em partes por bilhão de 1300 a 1500 horas na Ilha Roosevelt. (Variável Numérica)

Solar.R: Radiação solar em Langleys na faixa de frequência 4000–7700 Angstroms de 0800 a 1200 horas no Central Park. (Variável Numérica)

Wind: Velocidade média do vento em milhas por hora às 0700 e 1000 horas no Aeroporto de LaGuardia. (Variável Numérica)

Temp: Temperatura máxima diária em graus Fahrenheit no Aeroporto de La Guardia. (Variável Numérica)

Month: (Variável Numérica)

Day: (Variável Numérica)


2. Extraia o conteúdo da linha correspondente aos 2 últimos dígitos da sua matrícula. (matrícula : 231011014)

# Extraindo o conteúdo (Pegando informações sobre todas as variáveis para a linha 14):

conteudo_linha <- dados[14, ]


# Apresentando:

conteudo_linha
##    Ozonio Radiacao_solar Vento Temperatura Mes Dia
## 14     14            274  10.9          68   5  14

3. Substitua no banco de dados airquality o conteúdo da seguinte célula por NA (célula: interseção entre a linha extraída da questão 2 e a coluna com informações sobre o vento).

# Aplicando o filtro e substituindo por NA:

dados[14, "Vento"] <- NA


# Verificando:

dados[14,]
##    Ozonio Radiacao_solar Vento Temperatura Mes Dia
## 14     14            274    NA          68   5  14

4. Considerando inclusive a operação realizada na questão 3, calcule o vento médio do banco de dados. (Leia o help da função mean para retornar um valor numérico)

# Cálculo da média:

vento_medio <- mean(dados$Vento, na.rm = TRUE)

# Aprensentando:

vento_medio
## [1] 9.951316

5. Crie uma nova coluna no banco de dados indicando se a temperatura do dia foi maior (retornando TRUE) ou menor ou igual (retornando FALSE) a xx graus F (xx deve ser o quádruplo da sua idade e no máximo 90 F).

# Criando um objeto representando o quádruplo de minha idade:

xx <- 4*21


# Criando a nova variável:

dados$status_temp_alta <- dados$Temperatura > xx

# Verificando a nova variável:

head(dados)
##   Ozonio Radiacao_solar Vento Temperatura Mes Dia status_temp_alta
## 1     41            190   7.4          67   5   1            FALSE
## 2     36            118   8.0          72   5   2            FALSE
## 3     12            149  12.6          74   5   3            FALSE
## 4     18            313  11.5          62   5   4            FALSE
## 5     NA             NA  14.3          56   5   5            FALSE
## 6     28             NA  14.9          66   5   6            FALSE

6. Crie um novo banco de dados contendo apenas as informações (todas as colunas) dos dias cujas temperaturas foram superiores ao valor definido na questão 5.

# Novo banco de dados:

dados2 <- dados[dados$status_temp_alta,] 


# Verificando:

head(dados2)
##    Ozonio Radiacao_solar Vento Temperatura Mes Dia status_temp_alta
## 36     NA            220   8.6          85   6   5             TRUE
## 39     NA            273   6.9          87   6   8             TRUE
## 40     71            291  13.8          90   6   9             TRUE
## 41     39            323  11.5          87   6  10             TRUE
## 42     NA            259  10.9          93   6  11             TRUE
## 43     NA            250   9.2          92   6  12             TRUE

7. Transforme o banco de dados da questão 6 em uma matriz e explique porque a coluna criada na questão 5 foi alterada.

# Transformando em uma matriz:

matriz_dados <- as.matrix(dados2)


# Apresentando:

matriz_dados
##     Ozonio Radiacao_solar Vento Temperatura Mes Dia status_temp_alta
## 36      NA            220   8.6          85   6   5                1
## 39      NA            273   6.9          87   6   8                1
## 40      71            291  13.8          90   6   9                1
## 41      39            323  11.5          87   6  10                1
## 42      NA            259  10.9          93   6  11                1
## 43      NA            250   9.2          92   6  12                1
## 63      49            248   9.2          85   7   2                1
## 68      77            276   5.1          88   7   7                1
## 69      97            267   6.3          92   7   8                1
## 70      97            272   5.7          92   7   9                1
## 71      85            175   7.4          89   7  10                1
## 75      NA            291  14.9          91   7  14                1
## 80      79            187   5.1          87   7  19                1
## 81      63            220  11.5          85   7  20                1
## 85      80            294   8.6          86   7  24                1
## 86     108            223   8.0          85   7  25                1
## 88      52             82  12.0          86   7  27                1
## 89      82            213   7.4          88   7  28                1
## 90      50            275   7.4          86   7  29                1
## 96      78             NA   6.9          86   8   4                1
## 97      35             NA   7.4          85   8   5                1
## 98      66             NA   4.6          87   8   6                1
## 99     122            255   4.0          89   8   7                1
## 100     89            229  10.3          90   8   8                1
## 101    110            207   8.0          90   8   9                1
## 102     NA            222   8.6          92   8  10                1
## 103     NA            137  11.5          86   8  11                1
## 104     44            192  11.5          86   8  12                1
## 118     73            215   8.0          86   8  26                1
## 119     NA            153   5.7          88   8  27                1
## 120     76            203   9.7          97   8  28                1
## 121    118            225   2.3          94   8  29                1
## 122     84            237   6.3          96   8  30                1
## 123     85            188   6.3          94   8  31                1
## 124     96            167   6.9          91   9   1                1
## 125     78            197   5.1          92   9   2                1
## 126     73            183   2.8          93   9   3                1
## 127     91            189   4.6          93   9   4                1
## 128     47             95   7.4          87   9   5                1

Comentários: Uma matriz só aceita elementos do mesmo tipo. Logo, os valores de tipo lógico da coluna criada na questão 5 serão convertidos para o mesmo tipo das outras colunas quando os dados são transformados em uma matriz. (TRUE:1 / FALSE:0)


8. Qual é a dimensão da matriz criada na questão 7?

# Dimensão:

dim(matriz_dados)
## [1] 39  7
# N. de Linhas:

nrow(matriz_dados)
## [1] 39
# N. de Colunas:

ncol(matriz_dados)
## [1] 7

Aplicações Estatísticas


9. Há alguma relação entre as variáveis Temperatura e Ozonio ? Ou seja, há relação entre a temperatura e o Ozônio médio?

# Efetuando o cálculo da correlação:

correlacoes_ozonio_temp <- cor(dados$Ozonio,dados$Temperatura, use = "complete.obs")

# Exibindo:

correlacoes_ozonio_temp
## [1] 0.6983603
# Visualização com um gráfico de dispersão:

# Carregamendo do pacote necessário:

library(tidyverse)

dados %>%
  ggplot(aes(x = Ozonio, y = Temperatura)) +
  geom_point(color = "skyblue", alpha = 0.8) +
  geom_smooth(method = "lm", color = "red") +
  ggtitle("Relação entre o Ozônio médio e a temperatura") +
  xlab("Ozônio") + ylab("Temperatura")

Comentários: O coeficiente de correlação de Pearson entre as variáveis Ozone e Temp é aproximadamente 0.698. Isso indica uma correlação positiva moderada a forte entre as duas variáveis. A correlação positiva significa que, em geral, quando a concentração de ozônio (Ozone) aumenta, a temperatura (Temp) também tende a aumentar. A linha de regressão adicionada reforça a observação de que há uma relação linear positiva entre a concentração de ozônio e a temperatura.


Medidas de Associação Linear: Exemplo detalhado explicando a correlação linear



Análise de Correlação: Interesse em mensurar a “Força” da associação entre as variáveis.

Diagrama de Dispersão: Um diagrama de dispersão mostra a relação entre duas variáveis quantitativas. Os valores de uma variável aparecem no eixo horizontal (x), e os da outra, no eixo vertical (y). Exemplo: tempo de estudo e nota da prova de estatística.

# Criando um dataframe com os dados:


dados_exemplo_correlacao <- data.frame(
  Tempo_estudo_horas = c(3, 3.5,4,5, 7, 8, 9, 11, 12),
  Nota = c(4, 3.5, 7, 6.5, 4.7, 8, 7.7, 8.5, 9.8)
)
  


# Exibindo:

dados_exemplo_correlacao
##   Tempo_estudo_horas Nota
## 1                3.0  4.0
## 2                3.5  3.5
## 3                4.0  7.0
## 4                5.0  6.5
## 5                7.0  4.7
## 6                8.0  8.0
## 7                9.0  7.7
## 8               11.0  8.5
## 9               12.0  9.8
# Gráfico de Dispersão para visualização:

dados_exemplo_correlacao %>%   
  ggplot(aes(x= Tempo_estudo_horas, y = Nota)) +
  geom_point(color= "red") + ggtitle("Relação entre horas de estudo e notas de estatística") + xlab("Tempo de Estudo em Horas") + ylab("Nota")

Comentários: O gráfico demonstra claramente que os alunos que dedicam mais horas aos estudos tendem a obter notas mais altas. Isso indica uma relação diretamente proporcional entre o tempo de estudo e as notas em estatística: quanto maior o tempo de estudo, melhores são as notas. No entanto, é importante ressaltar que o gráfico pode nos enganar visualmente em algumas situações. Portanto, é essencial complementar essa análise visual com medidas numéricas para obter uma compreensão mais precisa e confiável da relação entre essas variáveis.


Coeficiente de correlação de Person (ou coeficiente de correlação): De acordo com Fonseca (2006), o coeficiente de correlação mede a força, a intensidade da relação entre duas variáveis. Existe mais de uma fórmula para encontrar o coeficiente de correlação de Person, entre elas temos:



# Calculando o coeficiente de correlação para o exemplo usado:

cor(dados_exemplo_correlacao$Tempo_estudo_horas,dados_exemplo_correlacao$Nota)
## [1] 0.8337528

Comentários: Complementando a análise anterior, o gráfico de dispersão sugere uma relação positiva entre o tempo de estudo e as notas. Para confirmar essa análise, calculamos o coeficiente de correlação, que apresentou um valor de aproximadamente 0,83. Esse valor indica uma correlação positiva forte entre as duas variáveis quantitativas, reforçando a conclusão de que mais horas de estudo resultam em melhores notas.