Análise de dados com R

Conjunto de dados

## Conjunto de dados
dados = iris # conjunto de dados disponível direto no R
head(dados)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Análise Exploratória de dados

Medidas-Resumo

Vamos calcular algumas medidas de posição e dispersão com funções do R.

# Média
mean(dados$Sepal.Length)
## [1] 5.843333
# Mediana
median(dados$Sepal.Length)
## [1] 5.8
# Variância amostral
var(dados$Sepal.Length)
## [1] 0.6856935
# Desvio padrão
sd(dados$Sepal.Length)
## [1] 0.8280661

Algumas outras medidas resumo

summary(dados)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

Gráficos

Também há funções implementadas para confecção de gráficos.

Gráfico de dispersão

plot(dados$Sepal.Length, dados$Sepal.Width, col = dados$Species, pch = 19)

Histograma

hist(dados$Petal.Length, main = "Histograma dos tamanhos de pétala", 
     xlab = "Tamanhos de pétala",
     ylab = "Frequência")

Boxplot

Será que há diferença no tamanho das pétalas entre as espécies de flores?

boxplot(dados$Sepal.Length) 

boxplot(Petal.Length ~ Species, data = dados)

Gráficos mais bonitos com o pacote ggplot2

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
ggplot(data = dados) +
  aes(x = Sepal.Length, y = Sepal.Width, colour = Species) +
  geom_point()

Melhorando um pouco o gráfico…

ggplot(data = dados) +
  aes(x = Sepal.Length, y = Sepal.Width, colour = Species) +
  geom_point(size = 2) +
  labs(x = "Comprimento da Sépala",
       y = "Largura da Sépala",
       colour = "Espécie",
       title = "Medidas da sépala por espécie") +
  theme_bw()

Histograma no ggplot

ggplot(data = dados) +
  aes(x = Petal.Length) +
  geom_histogram() +
  theme_light()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data = dados) +
  aes(x = Petal.Length, fill = Species) +
  geom_histogram() +
  theme_light()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Boxplot no ggplot

ggplot(data = dados) +
  geom_boxplot(aes(y = Petal.Length, x = Species, fill = Species)) +
  theme_light()

Outras utilidades

Distribuições de probabilidade

## Geração de valores aleatórios
rnorm(10, mean = 0, sd = 1)
##  [1] -1.498473925  0.006180356  0.584895319 -1.333115402  0.202802352
##  [6] -0.592021858  1.872343521  0.246501746  0.783646430 -0.903579533
## Probabilidade acumulada (P(X <= x))
pnorm(1.96, mean = 0, sd = 1)
## [1] 0.9750021
## Quantis
qnorm(0.975, mean = 0, sd = 1)
## [1] 1.959964
qnorm(0.95, mean = 0, sd = 1)
## [1] 1.644854
## Distribuição t
qt(0.975, 87)
## [1] 1.987608

Gerando valores da distribuição exponencial

x_exp = rexp(1000, rate = 5)
hist(x_exp, freq = F)
curve(dexp(x,5), add = T, col = 2)

Testes de hipótese

Teste Unilateral com

\[H_0: \mu = 6 \\ H_1: \mu < 6 \]

t.test(dados$Sepal.Length, mu = 6, alternative = "less")
## 
##  One Sample t-test
## 
## data:  dados$Sepal.Length
## t = -2.3172, df = 149, p-value = 0.01093
## alternative hypothesis: true mean is less than 6
## 95 percent confidence interval:
##     -Inf 5.95524
## sample estimates:
## mean of x 
##  5.843333
## p-valor calculado "na mão"
n = nrow(dados)
(t = (mean(dados$Sepal.Length) - 6)/(sd(dados$Sepal.Length)/sqrt(n)))
## [1] -2.317166
# p-valor do teste unilateral
pt(t, df = n - 1)
## [1] 0.01092831

Também podemos testar:

\[H_0: \mu = 6 \\ H_1: \mu \neq 6 \]

## Teste pronto no R
t.test(dados$Sepal.Length, mu = 6, alternative = "two.sided")
## 
##  One Sample t-test
## 
## data:  dados$Sepal.Length
## t = -2.3172, df = 149, p-value = 0.02186
## alternative hypothesis: true mean is not equal to 6
## 95 percent confidence interval:
##  5.709732 5.976934
## sample estimates:
## mean of x 
##  5.843333
# p-valor do nosso teste
pt(t, df = n-1) + (1-pt(-t, df = n-1))
## [1] 0.02185662
2*pt(t, df = n-1)
## [1] 0.02185662

Instalação e uso

Para usar o R no seu computador basta ir até este link e baixar a linguagem. Após isso, é aconselhavel baixar o IDE RStudio.