Projeto Estatistica alura - 1

1 CONHECENDO OS DADOS

1.1 Dataset do projeto


Pesquisa Nacional por Amostra de Domicílios - 2015

A Pesquisa Nacional por Amostra de Domicílios - PNAD investiga anualmente, de forma permanente, características gerais da população, de educação, trabalho, rendimento e habitação e outras, com periodicidade variável, de acordo com as necessidades de informação para o país, como as características sobre migração, fecundidade, nupcialidade, saúde, segurança alimentar, entre outros temas. O levantamento dessas estatísticas constitui, ao longo dos 49 anos de realização da pesquisa, um importante instrumento para formulação, validação e avaliação de políticas orientadas para o desenvolvimento socioeconômico e a melhoria das condições de vida no Brasil.


Variáveis utilizadas

Renda

Rendimento mensal do trabalho principal para pessoas de 10 anos ou mais de idade.

Idade

Idade do morador na data de referência em anos.

Altura (elaboração própria)

Altura do morador em metros.

UF

Código Descrição Código Descrição
11 Rondônia 28 Sergipe
12 Acre 29 Bahia
13 Amazonas 31 Minas Gerais
14 Roraima 32 Espírito Santo
15 Pará 33 Rio de Janeiro
16 Amapá 35 São Paulo
17 Tocantins 41 Paraná
21 Maranhão 42 Santa Catarina
22 Piauí 43 Rio Grande Sul
23 Ceará 50 Mato Grosso Sul
24 Rio Grande do Norte 51 Mato Grosso
25 Paraíba 52 Goiás
26 Pernambuco 53 Distrito Federal
27 Alagoas

Sexo

Código Descrição
0 Masculino
1 Feminino

Anos de Estudo

Código Descrição Código Descrição
1 Sem instrução e menos de 1 ano 10 9 anos
2 1 ano 11 10 anos
3 2 anos 12 11 anos
4 3 anos 13 12 anos
5 4 anos 14 13 anos
6 5 anos 15 14 anos
7 6 anos 16 15 anos ou mais
8 7 anos 17 Não determinados
9 8 anos Não aplicável

Cor

Código Descrição Código Descrição
0 Indígena 6 Amarela
2 Branca 8 Parda
4 Preta 9 Sem declaração

Observação

Os seguintes tratamentos foram realizados nos dados originais:

  1. Foram eliminados os registros onde a Renda era inválida (999 999 999 999);
  2. Foram eliminados os registros onde a Renda era missing;
  3. Foram considerados somente os registros das Pessoas de Referência de cada domicílio (responsável pelo domicílio).
sessionInfo()
## R version 4.1.2 (2021-11-01)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 22621)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=Portuguese_Brazil.1252  LC_CTYPE=Portuguese_Brazil.1252   
## [3] LC_MONETARY=Portuguese_Brazil.1252 LC_NUMERIC=C                      
## [5] LC_TIME=Portuguese_Brazil.1252    
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] dplyr_1.0.8   ggplot2_3.3.5 janitor_2.1.0 stringr_1.4.0
## 
## loaded via a namespace (and not attached):
##  [1] pillar_1.7.0     bslib_0.3.1      compiler_4.1.2   jquerylib_0.1.4 
##  [5] rmdformats_1.0.3 tools_4.1.2      digest_0.6.29    gtable_0.3.0    
##  [9] jsonlite_1.8.0   lubridate_1.8.0  evaluate_0.15    lifecycle_1.0.1 
## [13] tibble_3.1.8     pkgconfig_2.0.3  rlang_1.0.2      cli_3.3.0       
## [17] DBI_1.1.3        rstudioapi_0.13  yaml_2.3.5       xfun_0.30       
## [21] fastmap_1.1.0    withr_2.5.0      knitr_1.39       generics_0.1.2  
## [25] vctrs_0.4.1      sass_0.4.1       grid_4.1.2       tidyselect_1.1.2
## [29] glue_1.6.2       snakecase_0.11.0 R6_2.5.1         fansi_1.0.3     
## [33] rmarkdown_2.14   bookdown_0.28    purrr_0.3.4      magrittr_2.0.3  
## [37] scales_1.2.0     htmltools_0.5.2  ellipsis_0.3.2   assertthat_0.2.1
## [41] colorspace_2.0-3 utf8_1.2.2       stringi_1.7.6    munsell_0.5.0   
## [45] crayon_1.5.1

Importando a base de dados

dados <- read.csv(
  "C:/Lepes - pasta local/Rmarkdown - alura/dados.csv",
  sep = ","
)

1.2 Tipos de dados

Variáveis qualitativas ordinais

► Variáveis que podem ser ordenadas ou hierarquizadas
Exemplo: Anos de Estudo

  sort(unique(dados$Anos.de.Estudo),decreasing = FALSE)
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17

Variáveis qualitativas nominais

► Variáveis que não podem ser ordenadas ou hierarquizadas
Exemplo: UF, Sexo e Cor

knitr::kable(
  data.frame(
    UF   = sort(unique(dados$UF), decreasing = FALSE),
    
    Sexo = c(
      sort(unique(dados$Sexo), decreasing = FALSE),
      rep("",25)
    ),
    Cor = c(
      sort(unique(dados$Cor), decreasing = FALSE),
      rep("",22)
    ),
    fix.empty.names = TRUE
  ),
  align = c('c','c','c')
)
UF Sexo Cor
11 0 0
12 1 2
13 4
14 6
15 8
16
17
21
22
23
24
25
26
27
28
29
31
32
33
35
41
42
43
50
51
52
53

Variáveis quantitativas discretas

► Variáveis que representam uma contagem onde os valores possíveis formam um conjunto finito ou enumerável.
Exemplo: Idade

Idade <- sort(unique(dados$Idade), decreasing = FALSE)

paste("A idade varia entre",min(Idade),"e",max(Idade))
## [1] "A idade varia entre 13 e 99"

Variáveis quantitativas contínuas

► Variáveis que representam uma contagem ou mensuração que assumem valores em uma escala contínua (números reais).
Exemplo: Altura

altura <- sort(unique(dados$Altura), decreasing = FALSE)

paste("A idade varia entre",round(min(altura),digits = 2),"e",round(max(altura),digits = 2),"metros")
## [1] "A idade varia entre 1.34 e 2.03 metros"

2 DISTRIBUIÇÃO DE FREQUÊNCIAS

O primeiro passo em um trabalho de análise é o conhecimento do comportamento das variáveis envolvidas no estudo. Utilizando técnicas estatísticas como as análises das DISTRIBUIÇÕES DE FREQUÊNCIAS e HISTOGRAMAS podemos avaliar melhor a forma como os fenômenos em estudo se distribuem.

2.1 Distribuição de frequências para variáveis qualitativas

# usando o pacote "janitor" e o dplyr

df <- dados %>%
        mutate(
          Sexo = case_when(
            Sexo == 0 ~ "masculino",
            Sexo == 1 ~ "feminino"
          )
        ) %>% 
        tabyl(Sexo) %>%
        adorn_pct_formatting(digits = 2)

names(df)[2] <- "amostra"

knitr::kable(df, format = "simple")
Sexo amostra percent
feminino 23590 30.70%
masculino 53250 69.30%

2.2 Distribuição de frequências para variáveis quantitativas

Passo 1 - Especificar os limites de cada classe

Utilizar a seguinte classificação:

A ► Acima de 20 SM

B ► De 10 a 20 SM

C ► De 4 a 10 SM

D ► De 2 a 4 SM

E ► Até 2 SM

onde SM é o valor do salário mínimo na época. Em nosso caso R$ 788,00 (2015):

A ► Acima de 15.760

B ► De 7.880 a 15.760

C ► De 3.152 a 7.880

D ► De 1.576 a 3.152

E ► Até 1.576

classes <- c(0, 1576, 3152, 7880, 15760, 200000)

nomes <- c('E', 'D', 'C', 'B', 'A')

data <- tabyl(
    cut(
      x = dados$Renda,
      breaks = classes,
      labels = nomes,
      include.lowest = TRUE
    )
  ) %>% 
  adorn_pct_formatting(digits = 2)
   
names(data) <- c("classe","amostra","porcentagens")

df <- data[order(data$classe,decreasing = TRUE),]

knitr::kable(df,align = c("c","c","c"))
classe amostra porcentagens
5 A 608 0.79%
4 B 2178 2.83%
3 C 7599 9.89%
2 D 16700 21.73%
1 E 49755 64.75%

2.3 Distribuição de frequências para variáveis quantitativas

Passo 1 - Definindo o número de classes

Regra de Sturges

\[k = 1 + \frac {10}{3}\log_{10}n\]

n <- nrow(dados)

k <- round(1 + (log(n,base = 10))*(10/3))

frequencia <- table(
    cut(
        x = dados$Altura,
        breaks = k,
        include.lowest = TRUE
    )
)

2.4 Histograma

O HISTOGRAMA é a representação gráfica de uma distribuição de frequências. É um gráfico formado por um conjunto de retângulos colocados lado a lado, onde a área de cada retângulo é proporcional à frequência da classe que ele representa.

ggplot(dados, aes(x = Altura)) + 
    geom_histogram(
      binwidth = 0.02,
      alpha = 0.9
      ) + 
  # ggplot2::scale_color_gradient(
  #   low  = red,
  #   high = white 
  # ) +
    ylab("Frequência") + 
    xlab("Alturas") + 
    ggtitle('Histograma das Alturas') +
    theme(
        plot.title = element_text(size = 14, hjust = 0.5),
        axis.title.y = element_text(size = 12, vjust = +0.2),
        axis.title.x = element_text(size = 12, vjust = -0.2),
        axis.text.y = element_text(size = 10),
        axis.text.x = element_text(size = 10)
    )

3 MEDIDAS DE TENDÊNCIA CENTRAL

Data Fame Exemplo

db <- data.frame(
  materias = c(
    'Matemática', 'Português', 'Inglês', 
    'Geografia','História', 'Física', 'Química'
    ),
Fulano = c(
  8, 10, 4, 8, 6, 10, 8
  ),
Beltrano = c(
  10, 2, 0.5, 1, 3, 9.5, 10
  ),
Sicrano = c(
  7.5, 8, 7, 8, 8, 8.5, 7
  )
)

knitr::kable(db,align = c("c","c","c"))
materias Fulano Beltrano Sicrano
Matemática 8 10.0 7.5
Português 10 2.0 8.0
Inglês 4 0.5 7.0
Geografia 8 1.0 8.0
História 6 3.0 8.0
Física 10 9.5 8.5
Química 8 10.0 7.0

3.1 Média aritmética

É representada por \(\mu\) quando se refere à população e por \(\bar{X}\) quando se refere à amostra

\[\mu = \frac 1n\sum_{i=1}^{n}X_i\]

onde

\(n\) = número de observações (registros)

\(X_i\) = valor da i-ésima observação (registro)

a <- aggregate(list(Renda = dados$Renda), list(Sexo = dados$Sexo), mean)
a
##   Sexo    Renda
## 1    0 2192.442
## 2    1 1566.847
knitr::kable(a, align = c("c","c"))
Sexo Renda
0 2192.442
1 1566.847

3.2 Mediana

Para obtermos a mediana de uma conjunto de dados devemos proceder da seguinte maneira: 1. Ordenar o conjunto de dados; 2. Identificar o número de observações (registros) do conjunto de dados (\(n\)); 3. Identicar o elemento mediano:

Quando \(n\) for ímpar, a posição do elemento mediano será obtida da seguinte forma:

\[Elemento_{Md} = \frac{n+1}2\]

Quando \(n\) for par, a posição do elemento mediano será obtida da seguinte forma:

\[Elemento_{Md} = \frac{n}2\]

  1. Obter a mediana:
# valores ordenados da amostra 


# Para descobrir se o md eh par ou impar, devemos utilizar o operador "%% 2"
# quando o valor for par, o resultado sera zero, quando impar, 1 ...
mediana <- function(base, coluna){
if(k %% 2 == 0){
dados <- base[order(base[,coluna])]

k <- length(dados)
  
  md <- (dados[k/2])
  paste("O valor da divisao foi par, logo 
        divide-se k por 2 e teremos:", md)
  
} else{
  
  mf <- ( dados[round(k/2)] +  dados[(1+k)/2] ) 
  paste("O valor da divisao foi impar, logo realiza-se a conta 
        somando os dois termos do meio da distribuicao:", mf)
}
}

# Ou use a funcao median()

3.3 Moda

Pode-se definir a moda como sendo o valor mais frequente de um conjunto de dados. A moda é bastante utilizada para dados qualitativos.

# criando uma funcao para calcular a moda

Moda <- function(vetor) {
    freq <- table(vetor)
    return(names(freq)[freq == max(freq)])
}

Moda(db$Fulano)
## [1] "8"

3.4 Relação entre média, mediana e moda

Avaliando a variável RENDA

ggplot(
  dados[dados$Renda < 20000,],
  aes(x = Renda, y = ..density..)
  ) + 
    geom_histogram(
      binwidth = 500
      ) + 
    geom_density(
      color = 'green',
      alpha = 0.7
      )

Variaveis estatisticas descritivas

mediana <- median(dados$Renda)
media <- mean(dados$Renda)
moda <- as.numeric(Moda(dados$Renda))

paste(
  "A media, mediana e moda sao respectivamentes:",
  round(media     ,3),
  round(mediana   ,3),
  round(mean(moda),3)
  )
## [1] "A media, mediana e moda sao respectivamentes: 2000.383 1200 788"
summary(dados[dados$Renda < 20000,"Renda"])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0     788    1200    1849    2000   19663

Avaliando a variável ALTURA

ggplot(
  dados, aes(x = Altura, y = ..density..)
  ) + 
    geom_histogram() + 
    geom_density(color = 'green',
                 alpha = 0.7)

Variaveis estatisticas descritivas

mediana <- median(dados$Altura)
media <- mean(dados$Altura)
moda <- as.numeric(Moda(dados$Altura))

paste(
  "A media, mediana e moda sao respectivamentes:",
  round(media     ,3),
  round(mediana   ,3),
  round(mean(moda),3)
  )
## [1] "A media, mediana e moda sao respectivamentes: 1.7 1.699 1.707"

4 MEDIDAS SEPARATRIZES

4.1 Quartis, decis e percentis

Há uma série de medidas de posição semelhantes na sua concepção à mediana, embora não sejam medidas de tendência central. Como se sabe, a mediana divide a distribuição em duas partes iguais quanto ao número de elementos de cada parte. Já os quartis permitem dividir a distribuição em quatro partes iguais quanto ao número de elementos de cada uma; os decis em dez partes e os centis em cem partes iguais.

quartis <- seq(from = 25, to = 75, by = 25) / 100

decis <- seq(from = 1, to = 9) / 10

centis <- seq(from = 1, to = 99) / 100

a <- quantile(dados$Renda, quartis)

b <- quantile(dados$Renda, decis)

c <- quantile(dados$Renda, centis)

4.2 Box-plot

O box plot dá uma idéia da posição, dispersão, assimetria, caudas e dados discrepantes (outliers). A posição central é dada pela mediana e a dispersão por \(IIQ\). As posições relativas de \(Q1\), \(Mediana\) e \(Q3\) dão uma noção da simetria da distribuição. Os comprimentos das cauda são dados pelas linhas que vão do retângulo aos valores remotos e pelos valores atípicos.

5 MEDIDAS DE DISPERSÃO

Embora as medidas de posição forneçam uma sumarização bastante importante dos dados, elas podem não ser suficientes para caracterizar conjuntos distintos, especialmente quando as observações de determinada distribuição apresentarem dados muito dispersos.

5.1 Desvio médio absoluto

\[DM = \frac 1n\sum_{i=1}^{n}|X_i-\bar{X}|\]

notas_fulano <- data.frame(Fulano = db$Fulano)

nota_media_fulano <- mean(notas_fulano$Fulano)

notas_fulano$Desvio <- notas_fulano$Fulano - nota_media_fulano


notas_fulano$Desvio.Absoluto <- abs(notas_fulano$Desvio)

mean(notas_fulano$Desvio.Absoluto)
## [1] 1.55102

Variância

A variância é construída a partir das diferenças entre cada observação e a média dos dados, ou seja, o desvio em torno da média. No cálculo da variância, os desvios em torno da média são elevados ao quadrado.

Variância populacional

\[\sigma^2 = \frac 1n\sum_{i=1}^{n}(X_i-\mu)^2\]

Variância amostral

\[S^2 = \frac 1{n-1}\sum_{i=1}^{n}(X_i-\bar{X})^2\]

notas_fulano$Desvio2 <- notas_fulano$Desvio ^ 2

knitr::kable(notas_fulano,format = "html")
Fulano Desvio Desvio.Absoluto Desvio2
8 0.2857143 0.2857143 0.0816327
10 2.2857143 2.2857143 5.2244898
4 -3.7142857 3.7142857 13.7959184
8 0.2857143 0.2857143 0.0816327
6 -1.7142857 1.7142857 2.9387755
10 2.2857143 2.2857143 5.2244898
8 0.2857143 0.2857143 0.0816327
round(sum(notas_fulano$Desvio2) / (nrow(notas_fulano) - 1),3)
## [1] 4.571
variancia <-  var(notas_fulano$Fulano)

variancia
## [1] 4.571429

5.3 Desvio padrão

Uma das restrições da variância é o fato de fornecer medidas em quadrados das unidades originais - a variância de medidas de comprimento, por exemplo, é em unidades de área. Logo, o fato de as unidades serem diferentes dificulta a comparação da dispersão com as variáveis que a definem. Um modo de eliminar essa dificuldade é considerar sua raiz quadrada.

Desvio padrão populacional

\[\sigma = \sqrt{\frac 1n\sum_{i=1}^{n}(X_i-\mu)^2} \Longrightarrow \sigma = \sqrt{\sigma^2}\]

Desvio padrão amostral

\[S = \sqrt{\frac 1{n-1}\sum_{i=1}^{n}(X_i-\bar{X})^2} \Longrightarrow S = \sqrt{S^2}\]

sqrt(variancia)
## [1] 2.13809
desvio_padrao <- sd(notas_fulano$Fulano)
desvio_padrao
## [1] 2.13809
summary(db)
##    materias             Fulano          Beltrano         Sicrano     
##  Length:7           Min.   : 4.000   Min.   : 0.500   Min.   :7.000  
##  Class :character   1st Qu.: 7.000   1st Qu.: 1.500   1st Qu.:7.250  
##  Mode  :character   Median : 8.000   Median : 3.000   Median :8.000  
##                     Mean   : 7.714   Mean   : 5.143   Mean   :7.714  
##                     3rd Qu.: 9.000   3rd Qu.: 9.750   3rd Qu.:8.000  
##                     Max.   :10.000   Max.   :10.000   Max.   :8.500