Objetivo deste Tutorial

Este tutorial apresenta diversos tipos de gráficos para análise de dados envolvendo uma ou duas variáveis. Foi elaborado pensando principalmente nos estudantes e usuários iniciantes na linguagem R. A ideia foi disponibilizar um material para facilitar a obtenção de gráficos abrangendo análises de variáveis qualitativas e quantitativas. Com poucas alterações nas linhas de comandos é possível obter gráficos formatados para relatórios e que possibilitam uma rápida interpretação das informações contidas nos dados.

Tendo em vista que atualmente é bastante comum o uso do Google Forms para conhecer as preferências, o grau de satisfação, etc, e também por ser amplamente utilizado nas pesquisas acadêmicas, achei interessante iniciar o tutorial mostrando como podemos importar os dados de um formulário Google, assim como complementar as análises das variáveis fornecidas por esse recurso e incluir estudos de associação entre as mesmas.

Vale ressaltar que embora nos relatórios do Forms sejam apresentados gráficos de barras para análises de variáveis quantitativas, os mesmos na maioria das vezes, não são apropriados. Dessa forma, neste tutorial são apresentados vários exemplos com variáveis quantitativas mostrando como analisá-las de forma apropriada.

Para reproduzir os exemplos deste tutorial é necessário instalar e carregar alguns pacotes do R apresentados abaixo. Os exemplos foram realizados com dados digitados apresentados na seção 3, ou dados importados disponíveis pelos links respostas.xlsx e pelican.csv. Ao clicar no link respostas.xlsx por ser um arquivo xlsx o mesmo será aberto numa planilha Google e ao clicar no link pelican.csv por ser um arquivo de texto com extensão csv o download será imediato.

Uma das formas para instalar os pacotes é

  • estando conectado a internet, copiar e colar a linha de comandos a seguir no editor do RStudio

    install.packages(c("summarytools", "fdth", "ggplot2", 
                       "readxl", "readr","dplyr"))

    Para rodar uma linha de comando devemos colocar o cursor em algum lugar da linha e clicar em Run no Menu superior no editor do RStudio.

Uma das formas para carregar os pacotes é

  • usando o comando require como segue:

    require(summarytools)
    require(fdth)
    require(ggplot2)
    require(readxl)
    require(readr)
    require(dplyr)
    

1. Como importar no RStudio uma planilha de respostas de um formulário Google?

Ao realizar o download da planilha de um formulário Google (Google Forms) a mesma pode ser salva em vários formatos como mostra o Passo 1 abaixo. Esse tutorial ilustra como importar no RStudio os arquivos salvos em xlsx e csv. Em ambos os casos os dados importados ficam com a mesma formatação no R.

É necessário estar atento à importação dos dados para que os nomes das variáveis permaneçam com os acentos e outros caracteres especiais originais, assim como os espaçamentos entre as palavras.

Passo 1: No formulário Google realizar o download da planilha

Para isso na aba Respostas no formulário Google clicar em Criar planilha no canto superior direito.

Captura de tela das respostas do formulário Google

Passo 2: Escolher a extensão para salvar o arquivo (1) xlsx ou (2) csv.

(1) xlsx

Para fazer o download das respostas do formulário Google para um arquivo Microsoft Excel .xlsx

(2) csv

Para fazer o download das respostas do formulário Google para valores separados por vírgulas .csv.

Passo 3: Renomear o arquivo. Não usar acentos ou caracteres especiais no nome do arquivo e também nos diretórios em que o mesmo se encontra para não haver problemas com a importação dos dados.

Para reproduzir os exemplos neste tutorial após baixar os arquivos renomeio-os como respostas.xlsx e respostas.csv.

Passo 4: Importação no RStudio

4.1 Importação arquivo xlsx

Passo 1: Em Environment clicar em Import Dataset e selecionar From Excel.

Para importar a planilha de respostas salva em xlsx

Passo 2: Clicar em Browse para localizar o arquivo e depois em Import.

Para importar a planilha de respostas salva em xlsx

O R armazena a planilha importada em um data.frame com mesmo nome do arquivo importado, neste caso respostas.

Para visualizar a planilha de respostas e o código R gerado para importação

Há também a opção de importar uma planilha xlsx executando diretamente as linhas de comandos abaixo a partir do editor. Nesse caso o pacote readxl deve estar instalado e carregado como visto anteriormente.

library(readxl)
respostas <- read_excel("Caminho_Arquivo")
View(respostas)

OBSERVAÇÃO: Se o arquivo com as linhas de comandos (script) do R estiver gravado na mesma pasta em que estão os arquivos com os dados não será necessário especificar o caminho para acesso ao arquivo, por exemplo “C:/Pasta1/Subpasta1/Nome_Arquivo” bastando especificar o nome “Nome_Arquivo”.

IMPORTANTE Fique atento à direção das barras utilizadas para separar os nomes dos diretórios e o nome do arquivo que pode ser \ ou //.

4.2 Importação arquivo csv

Planilha com as respostas do formulário Google salva em csv aberta no Excel

Passo 1: Em Environment clicar em Import Dataset e selecionar From Text (readr).

Para importar o arquivo salvo em csv

Passo 2: Igual ao Passo 2 no caso de arquivo xlsx.

Há também a opção de importar uma planilha csv executando diretamente as linhas de comandos abaixo a partir do editor. Nesse caso o pacote readr deve estar instalado e carregado como visto anteriormente.

library(readr)
respostas <- read_csv("Caminho_Arquivo/Nome_Arquivo")
View(respostas)

OBSERVAÇÃO: É preferível que os arquivos com os dados e com o script do R estejam gravados na mesma pasta, pois assim será necessário especificar apenas o nome do arquivo.

2. Importação de uma planilha csv salva no Google Drive e publicada na Web

Neste caso a planilha necessita estar publicada na web. Esta planilha está sendo utilizada em alguns exemplos desse tutorial.

# Comandos de Entrada para ler os dados e armazená-los em dados

dados<-read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vT3dF8T3bWR1I4nFWtyX75C7yKUWbxN7tmP-enS8TlITFvGumBwpJv2TwF4ItdFLH4_hCQAyrfyODWN/pub?gid=2123645241&single=true&output=csv")

dados
##    cliente        pagamento itens desconto vendas      sexo estado_civil idade
## 1        1         Discover     1     0.00  39.50 masculino       casado    32
## 2        2 Proprietary_Card     1    25.60 102.40  feminino       casado    36
## 3        3 Proprietary_Card     1     0.00  22.50  feminino       casado    32
## 4        4 Proprietary_Card     5   121.10 100.40  feminino       casado    28
## 5        5       Mastercard     2     0.00  54.00  feminino       casado    34
## 6        6       Mastercard     1     0.00  44.50  feminino       casado    44
## 7        7 Proprietary_Card     2    19.50  78.00  feminino       casado    30
## 8        8             Visa     1     0.00  22.50  feminino       casado    40
## 9        9 Proprietary_Card     2    22.48  56.52  feminino       casado    46
## 10      10 Proprietary_Card     1     0.00  44.50  feminino       casado    36
## 11      11 Proprietary_Card     1     0.00  29.50  feminino       casado    48
## 12      12 Proprietary_Card     1     7.90  31.60  feminino       casado    40
## 13      13             Visa     9   103.60 160.40  feminino       casado    40
## 14      14             Visa     2    24.50  64.50  feminino       casado    46
## 15      15             Visa     1     0.00  49.50 masculino     solteiro    24
## 16      16 Proprietary_Card     2    12.60  71.40 masculino     solteiro    36
## 17      17 Proprietary_Card     3    53.00  94.00  feminino     solteiro    22
## 18      18         Discover     3     0.00  54.50  feminino       casado    40
## 19      19       Mastercard     2    19.00  38.50  feminino       casado    32
## 20      20 Proprietary_Card     6    32.20  44.80  feminino       casado    56
## 21      21 Proprietary_Card     1     7.90  31.60  feminino     solteiro    28
## 22      22 Proprietary_Card     4    29.67  70.82  feminino       casado    38
## 23      23 American_Express     7    66.50 266.00  feminino       casado    50
## 24      24 Proprietary_Card     2     0.00  74.00  feminino       casado    42
## 25      25             Visa     2    14.50  39.50 masculino       casado    48
## 26      26 Proprietary_Card     1     9.48  30.02  feminino       casado    60
## 27      27 Proprietary_Card     1     0.00  44.50  feminino       casado    54
## 28      28 Proprietary_Card     5    48.20 192.80  feminino     solteiro    42
## 29      29 Proprietary_Card     3    37.30  71.20  feminino       casado    32
## 30      30 Proprietary_Card     1     4.50  18.00  feminino       casado    70
## 31      31       Mastercard     2    15.80  63.20  feminino       casado    28
## 32      32 Proprietary_Card     1     0.00  75.00  feminino       casado    52
## 33      33 Proprietary_Card     3    15.80  63.20  feminino       casado    44
## 34      34 Proprietary_Card     1     0.00  40.00  feminino       casado    34
## 35      35       Mastercard     5    10.00 105.50  feminino       casado    56
## 36      36       Mastercard     1     0.00  29.50 masculino     solteiro    36
## 37      37             Visa     2     0.00 102.50  feminino     solteiro    42
## 38      38 Proprietary_Card     6    14.50 117.50  feminino       casado    50
## 39      39 Proprietary_Card     5    25.02  13.23  feminino       casado    44
## 40      40 Proprietary_Card     2     0.00  52.50  feminino       casado    58
## 41      41 Proprietary_Card    13    62.70 198.80  feminino       casado    42
## 42      42             Visa     4    16.50  19.50  feminino       casado    46
## 43      43 Proprietary_Card     2     0.00 123.50  feminino       casado    48
## 44      44 Proprietary_Card     1    15.60  62.40  feminino       casado    54
## 45      45 Proprietary_Card     2    35.20  23.80  feminino       casado    38
## 46      46 Proprietary_Card     2    19.40  39.60  feminino       casado    60
## 47      47       Mastercard     1     0.00  25.00  feminino       casado    46
## 48      48 Proprietary_Card     3    20.11  63.64  feminino       casado    30
## 49      49 Proprietary_Card     1     4.68  14.82  feminino       casado    32
## 50      50       Mastercard     9    94.30 145.20  feminino       casado    46
## 51      51 Proprietary_Card     6    58.88 176.62  feminino       casado    38
## 52      52 Proprietary_Card     5    51.70 118.80 masculino       casado    68
## 53      53         Discover     1     0.00  58.00  feminino     solteiro    78
## 54      54             Visa     2     0.00  74.00  feminino     solteiro    20
## 55      55       Mastercard     2     0.00  49.50  feminino       casado    32
## 56      56 Proprietary_Card     3    35.40 141.60  feminino       casado    38
## 57      57 Proprietary_Card     6    56.40 123.10  feminino       casado    54
## 58      58 Proprietary_Card     2    20.10  80.40  feminino       casado    48
## 59      59       Mastercard     4    28.30  65.20  feminino       casado    46
## 60      60 Proprietary_Card     4    19.50 113.00  feminino     solteiro    50
## 61      61 Proprietary_Card     1    19.20 108.80  feminino       casado    46
## 62      62 Proprietary_Card     3    91.48  59.91  feminino     solteiro    30
## 63      63 Proprietary_Card     5    37.40  53.60  feminino       casado    54
## 64      64 Proprietary_Card     1     7.90  31.60  feminino     solteiro    42
## 65      65 Proprietary_Card     2     9.50  49.50  feminino       casado    48
## 66      66 Proprietary_Card     1     9.90  39.60  feminino       casado    62
## 67      67 Proprietary_Card     2    29.50  59.50  feminino       casado    34
## 68      68 Proprietary_Card     5    36.70 146.80  feminino       casado    28
## 69      69 Proprietary_Card     2    11.80  47.20 masculino       casado    46
## 70      70 Proprietary_Card     8    18.95  95.05  feminino       casado    54
## 71      71 Proprietary_Card     5    57.18 155.32  feminino       casado    30
## 72      72       Mastercard     4    10.00  58.00  feminino       casado    32
## 73      73 Proprietary_Card     1     0.00  69.00  feminino     solteiro    22
## 74      74 Proprietary_Card     2    15.50  46.50  feminino       casado    32
## 75      75 Proprietary_Card     2    14.28  45.22  feminino       casado    74
## 76      76 Proprietary_Card     4    46.26  84.74  feminino       casado    62
## 77      77 Proprietary_Card     2     0.00  39.00  feminino       casado    42
## 78      78 Proprietary_Card     4    35.11 111.14  feminino       casado    28
## 79      79 Proprietary_Card     3    31.20  86.80  feminino       casado    38
## 80      80         Discover     2     0.00  89.00  feminino       casado    54

3. Entrada de dados digitando

Algumas vezes quando se tem poucos dados pode ser conveniente digitá-los. Os exemplos a seguir ilustram a entrada de dados de variáveis qualitativa e quantitativa. Os 3 primeiros exemplos utilizados são do livro de Anderson, David R.

Exemplo: variável qualitativa nominal

# Comandos de Entrada para ler os dados de uma variável qualitativa e armazená-los em var_nominal  

var_nominal <- c("Coke Classic","Diet Coke","Pepsi","Diet Coke","Coke Classic","Coke Classic","Dr. Pepper","Diet Coke","Pepsi","Pepsi","Coke Classic","Dr. Pepper","Sprite","Coke Classic","Diet Coke","Coke Classic","Coke Classic","Sprite","Coke Classic","Diet Coke","Coke Classic","Diet Coke","Coke Classic","Sprite","Pepsi","Coke Classic","Coke Classic","Coke Classic","Pepsi","Coke Classic","Sprite","Dr. Pepper","Pepsi","Diet Coke","Pepsi","Coke Classic","Coke Classic","Coke Classic","Pepsi","Dr. Pepper","Coke Classic","Diet Coke","Pepsi","Pepsi","Pepsi","Pepsi","Coke Classic","Dr. Pepper","Pepsi","Sprite")

var_nominal # para visualizar os dados
##  [1] "Coke Classic" "Diet Coke"    "Pepsi"        "Diet Coke"    "Coke Classic"
##  [6] "Coke Classic" "Dr. Pepper"   "Diet Coke"    "Pepsi"        "Pepsi"       
## [11] "Coke Classic" "Dr. Pepper"   "Sprite"       "Coke Classic" "Diet Coke"   
## [16] "Coke Classic" "Coke Classic" "Sprite"       "Coke Classic" "Diet Coke"   
## [21] "Coke Classic" "Diet Coke"    "Coke Classic" "Sprite"       "Pepsi"       
## [26] "Coke Classic" "Coke Classic" "Coke Classic" "Pepsi"        "Coke Classic"
## [31] "Sprite"       "Dr. Pepper"   "Pepsi"        "Diet Coke"    "Pepsi"       
## [36] "Coke Classic" "Coke Classic" "Coke Classic" "Pepsi"        "Dr. Pepper"  
## [41] "Coke Classic" "Diet Coke"    "Pepsi"        "Pepsi"        "Pepsi"       
## [46] "Pepsi"        "Coke Classic" "Dr. Pepper"   "Pepsi"        "Sprite"

Exemplo: variável qualitativa ordinal

var_ordinal <- c("Bom", "Regular", "Bom", "Ótimo", "Ótimo", "Ótimo", "Regular", "Bom")

Exemplos: variáveis quantitativas

var_quant <- c(2, 5, 10, 12, 4, 4, 5, 17, 11, 8, 9, 8, 12, 21, 6, 8, 7, 13, 18, 3) # tempo de espera em minutos de pacientes

var_quant # para visualizar os dados
##  [1]  2  5 10 12  4  4  5 17 11  8  9  8 12 21  6  8  7 13 18  3
var_quant_2 <- c(10,11,15,rep(11,10),rep(13,17),rep(15,2))

var_quant_2 # para visualizar os dados
##  [1] 10 11 15 11 11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 13 13 13 13
## [26] 13 13 13 13 13 15 15

4. Gráficos para uma variável

4.1 Visualizar os nomes das variáveis do banco de dados

Dependendo da forma como o arquivo é importado pode ocorrer uma mudança nos nomes das variáveis, por exemplo, espaços e parenteses trocados por pontos. Para ter acesso aos nomes das variáveis podemos usar o comando names.

O exemplo mostra que ao importar a planilha Google respostas.xlsx como ilustrado na seção 1 os nomes das variáveis permanecem na forma original. Qualquer uma das formas de importação discutidas anteriormente nessa seção resulta nesse formato.

library(readxl)
respostas <- read_excel("respostas.xlsx")
names(respostas)
##  [1] "Carimbo de data/hora"                                                                               
##  [2] "Qual o seu curso?"                                                                                  
##  [3] "Você tem experiência com os softwares? [Excel]"                                                     
##  [4] "Você tem experiência com os softwares? [R]"                                                         
##  [5] "Você tem experiência com os softwares? [SAS]"                                                       
##  [6] "Você tem experiência com os softwares? [MATLAB]"                                                    
##  [7] "Você tem experiência com os softwares? [Python]"                                                    
##  [8] "Você tem experiência com os softwares? [MINITAB]"                                                   
##  [9] "Você está matriculado na u.c. de Probabilidade e Estatística?"                                      
## [10] "Você já fez algum tipo de análise estatística em caráter profissional ou acadêmico? Se sim, relate."
## [11] "Idioma inglês [Lê]"                                                                                 
## [12] "Idioma inglês [Fala]"                                                                               
## [13] "Idioma inglês [Escreve]"                                                                            
## [14] "Idioma inglês [Compreende]"                                                                         
## [15] "Qual(is) o(s) sistema(s) operacional(is) instalado(s) no seu computador?"                           
## [16] "Região de Procedência"                                                                              
## [17] "Sexo"                                                                                               
## [18] "Idade (em anos)"                                                                                    
## [19] "Altura (em centímetros)"                                                                            
## [20] "Peso (em quilogramas)"                                                                              
## [21] "Número de calçado"

Para que o R possa identificar a variável de interesse é necessário informar o nome da planilha em que a variável está contida seguido do sinal $ e do nome da variável. Por exemplo, respostas$Qual o seu curso?.

Ao digitar o nome da planilha seguido de $ é disponibilizado o menu contendo as variáveis contidas na planilha

4.2 Para obter as Tabelas de Frequências

Variável qualitativa nominal

No caso de variável qualitativa vamos utilizar o pacote summarytools para obter a tabela com as frequências absolutas e relativas. Consideremos os dados em var_nominal.

Para obter a tabela de frequências:

freq(var_nominal, report.nas = FALSE, totals = TRUE, cumul = FALSE, headings = FALSE)
## 
##                      Freq        %
## ------------------ ------ --------
##       Coke Classic     19    38.00
##          Diet Coke      8    16.00
##         Dr. Pepper      5    10.00
##              Pepsi     13    26.00
##             Sprite      5    10.00
##              Total     50   100.00

Variável qualitativa ordinal

Consideremos os dados em var_ordinal.

Primeiramente precisamos informar a ordem das categorias na tabela de frequências, podendo ser utilizado a função factor.

var_ordinal_ord <-factor(var_ordinal, order = TRUE, levels = c("Regular", "Bom", "Ótimo"))

Para obter a tabela de frequências:

freq(var_ordinal_ord, report.nas = FALSE, totals = TRUE, cumul = FALSE, headings = FALSE) # Tabela de frequências
## 
##                 Freq        %
## ------------- ------ --------
##       Regular      2    25.00
##           Bom      3    37.50
##         Ótimo      3    37.50
##         Total      8   100.00

Variável quantitativa discreta com pequeno intervalo de variação

Quando uma variável é quantitativa pode ser interessante apresentar as frequências acumuladas absolutas e relativas em conjunto com as frequências absolutas e relativas. Por exemplo, nos dados de tempo de espera de pacientes (var_quant) pode ser de interesse obter a proporção de pacientes que esperaram até nove minutos para ser atendido.

No caso de variável quantitativa discreta com pequeno intervalo de variação é apropriado utilizar uma tabela de frequência ponto a ponto.

Primeiramente precisamos informar os valores que deverão aparecer na tabela de frequências e para isso, vamos utilizar a função factor.

Consideremos os dados em var_quant_2.

var_quant_2ord <-factor(var_quant_2, order = TRUE, levels = c("10", "11", "12", "13", "14", "15"))

Para obter a tabela de frequências:

freq(var_quant_2ord, report.nas = FALSE, totals = TRUE, cumul = TRUE, headings = FALSE) # tabela de frequencia
## 
##               Freq        %   % Cum.
## ----------- ------ -------- --------
##          10      1     3.12     3.12
##          11     11    34.38    37.50
##          12      0     0.00    37.50
##          13     17    53.12    90.62
##          14      0     0.00    90.62
##          15      3     9.38   100.00
##       Total     32   100.00   100.00

Variável quantitativa contínua ou discreta com grande intervalo de variação

Neste caso para obter uma tabela de frequências em classes foi utilizada a biblioteca fdth. É necessário especificar alguns parâmetros como limite inferior da 1a classe, o limite superior da última classe e a amplitude das classes.

Dessa forma, é interessante inicialmente visualizar os dados ordenados para facilitar a obtenção desses parâmetros. Para isso, podemos utilizar a função sort.

Considerando os dados em var_quant.

sort(var_quant) 
##  [1]  2  3  4  4  5  5  6  7  8  8  8  9 10 11 12 12 13 17 18 21

Neste exemplo parece razoável considerar a amplitude das classes igual a 3. Para buscar uma melhor visualização da distribuição dos dados é interessante escolher as classes a partir de algumas tentativas. Alguns autores sugerem também algumas regrinhas para auxiliar na escolha do número de classes.

tab=fdt(var_quant, start=2,h=3,end=23)
tab # para visualizar a tabela
##  Class limits f   rf rf(%) cf cf(%)
##         [2,5) 4 0.20    20  4    20
##         [5,8) 4 0.20    20  8    40
##        [8,11) 5 0.25    25 13    65
##       [11,14) 4 0.20    20 17    85
##       [14,17) 0 0.00     0 17    85
##       [17,20) 2 0.10    10 19    95
##       [20,23) 1 0.05     5 20   100

Verifique o que acontece alterando os valores dos parâmetros. Fique atento para que as classes definidas abranjam todos os dados. Veja como fica a tabela usando end=22.

4.3 Gráfico de setores (Pizza) - Variável qualitativa

Usando o pacote básico do R:

cols <- c("grey","yellow","blue","red","green")
pielabels<- paste(round(table(var_nominal)/length(var_nominal)*100), "%", sep="")
pie(round((table(var_nominal)/length(var_nominal)*100),2),labels=pielabels, cex=1.2, col=cols)
legend("topright", c("Coke Classic","Diet Coke","Dr. Pepper","Pepsi","Sprite"), cex = 0.8,
       fill = c("grey","yellow","blue","red","green"))

Exercício: Altere cores, local da legenda e tamanho da fonte.

4.4 Gráfico de barras verticais - Variável qualitativa

No caso em que o número de categorias é grande ou a variável é qualitativa ordinal o gráfico de barras é mais apropriado do que o gráfico de pizza. Vamos usar o pacote básico do R que não precisa de instalação.

Nestes exemplos são utilizados os dados em var_nominal.

Frequências absolutas no eixo y

barplot(table(var_nominal))

IMPORTANTE: Necessário dar nome aos eixos.

barplot(table(var_nominal), xlab = "refrigerante", ylab = "nº entrevistados")

Podemos definir uma escala para o eixo Y de 0 a 20.

barplot(table(var_nominal), xlab = "refrigerante", ylab = "nº entrevistados", ylim=c(0,20))

Podemos alterar a cor e o tamanho da fonte.

barplot(table(var_nominal), xlab = "refrigerante", ylab = "nº entrevistados", cex.lab=0.7, cex.names=0.7, cex.axis=0.7, col="lightgreen", ylim=c(0,20))

Exercício: Troque a cor do gráfico e aumente a fonte.

Frequências relativas no eixo y

Podemos considerar os percentuais no eixo Y.

barplot((table(var_nominal)/length(var_nominal)*100), xlab = "refrigerante", ylab = "% entrevistados", col="lightgreen", ylim=c(0,40))

4.5 Gráfico de barras verticais com frequências decrescentes - Variável qualitativa nominal

Quando a variável é qualitativa nominal não importa a ordem das categorias na tabela de frequências e no gráfico de barras. Entretanto, pode ser útil ordená-las de acordo com as suas frequências em ordem decrescente.

Para obter o gráfico de barras com as frequências ordenadas de forma decrescente:

Frequências absolutas no eixo y

barplot((sort(table(var_nominal),decreasing=T)), xlab = "Refrigerante", ylab = "nº entrevistados", col="lightgreen", ylim=c(0,20))

Frequências relativas no eixo y

barplot((sort(table(var_nominal), decreasing=T))/length(var_nominal)*100, xlab = "Refrigerante", ylab = "% entrevistados", col="lightgreen", ylim=c(0,40))

4.6 Gráfico de barras verticais - Uma variável qualitativa ordinal

Neste caso as categorias no gráfico de barras devem estar ordenadas (de forma crescente ou decrescente).

Neste exemplo foram usados os dados em var_ordinal.

Sem considerar que a variável é ordinal (incorreto)

barplot((table(var_ordinal)/length(var_ordinal)*100), xlab = "O que achou do produto", ylab = "% entrevistados", col="lightgreen", ylim=c(0,40))

Considerando que a variável é ordinal (correto)

var_ordinal_ord <-factor(var_ordinal, order = TRUE, levels = c("Regular", "Bom", "Ótimo"))
var_ordinal_ord
## [1] Bom     Regular Bom     Ótimo   Ótimo   Ótimo   Regular Bom    
## Levels: Regular < Bom < Ótimo
barplot((table(var_ordinal_ord)/length(var_ordinal_ord)*100), xlab = "O que achou do produto", ylab = "% entrevistados", col="lightgreen", ylim=c(0,40))

4.7 Gráfico de barras horizontais - Uma variável qualitativa - Exemplo pergunta formulário Google

Quando o nome das categorias da variável é extenso é preferível que as barras sejam horizontais.

Pergunta criada no formulário Google

Formato das respostas na planilha Google

Segue a linha de comandos para obter os percentuais de estudantes em cada uma das categorias.

round(table(respostas$`Região de Procedência`)/length(respostas$`Região de Procedência`)*100,1)
## 
##                     Outros estados da Região Sudeste 
##                                                  4.9 
##             Outros municípios do estado de São Paulo 
##                                                 31.7 
##                                      Região Nordeste 
##                                                  2.4 
##                                           Região Sul 
##                                                  2.4 
##                                  São José dos Campos 
##                                                 36.6 
## Vale do Paraíba (com exceção de São José dos Campos) 
##                                                 22.0

Para obter o gráfico:

par(mfrow=c(1,1))

Sim =c(36.6, 22, 31.7, 4.9, 2.4, 0, 2.4, 0)

par(las=1) # nomes dos eixos perpendicular
par(mar=c(5,22,1,1)+0.1) # para aumentar a margem a esquerda 

x <- barplot(Sim, xlab = "% estudantes", 
names.arg=c(row.names =c("São José dos Campos ",
                         "Vale do Paraíba (com exceção de São José dos Campos)",
                         "Outros municípios do estado de São Paulo",
                         "Outros estados da Região Sudeste",
                         "Região Sul",
                         "Região Norte",
                         "Região Nordeste",
                         "Região Centro Oeste")), horiz=TRUE) 
text(Sim-0.5*Sim, x,labels=round(Sim), col="black", cex=1.0)

par(mar=c(5,4,4,2)+0.1) # para retornar a margem default

4.8 Gráfico de barras verticais - Uma variável quantitativa discreta com intervalo de variação pequeno - Exemplo planilha formulário Google

Quando a variável é discreta e a amplitude (máximo - mínimo) é pequena então a análise ponto a ponto é apropriada.

Pergunta criada no formulário Google

Formato das respostas na planilha Google

Linhas de comandos para obter o gráfico de barras:

Inicialmente é interessante visualizar os dados ordenados.

sort(respostas$`Número de calçado`)
##  [1] 35 35 36 36 36 37 37 37 37 38 38 39 39 39 40 40 40 40 40 40 41 41 41 41 41
## [26] 41 41 41 41 41 42 42 42 42 42 42 43 43 43 44 44

Especificar os valores nas categorias da tabela. Esse passo é importante especialmente quando não há dados em alguma das categorias.

respostas$`Número de calçado_ord` <-factor(respostas$`Número de calçado`, order = TRUE, levels = c("35", "36", "37", "38", "39", "40", "41", "42", "43", "44"))

Para obter o gráfico de barras:

x<-barplot((table(respostas$`Número de calçado_ord`)/length(respostas$`Número de calçado_ord`))*100, ylab="% de estudantes", xlab="nº de calçado", ylim=c(0,25), col="orange")
text(x, (table(respostas$`Número de calçado_ord`)/length(respostas$`Número de calçado_ord`))*100-1, labels=round((table(respostas$`Número de calçado_ord`)/length(respostas$`Número de calçado_ord`))*100), col="black", cex=1.0)

4.9 Gráfico de frequências acumuladas - Variável quantitativa discreta com intervalo de variação pequeno - Exemplo planilha formulário Google

plot((ecdf(respostas$`Número de calçado_ord`)), main="", ylab="proporção de estudantes", xlab="nº de calçado") 

4.10 Uma janela com 2 gráficos - Variável quantitativa discreta com intervalo de variação pequeno - Exemplo planilha formulário Google

Colocando os gráficos lado a lado em uma janela.

par(mfrow=c(1,2))
x<-barplot((table(respostas$`Número de calçado_ord`)/length(respostas$`Número de calçado_ord`))*100, ylab="% de estudantes", xlab="nº de calçado", ylim=c(0,25), col="orange")
text(x, (table(respostas$`Número de calçado_ord`)/length(respostas$`Número de calçado_ord`))*100-1, labels=round((table(respostas$`Número de calçado_ord`)/length(respostas$`Número de calçado_ord`))*100), col="black", cex=1.0)
plot((ecdf(respostas$`Número de calçado_ord`)), main="", ylab="proporção de estudantes", xlab="nº de calçado") 

4.11 Hitograma - Variável quantitativa contínua ou discreta com intervalo de variação grande

Quando a variável é quantitativa contínua ou quantitativa discreta com grande amplitude de variação então a análise em classes é apropriada. Nesse caso pode ser usado o pacote fdth.

Nesses exemplos são utilizados os dados em var_quant:

Frequências absolutas no eixo y

Considerando frequências absolutas no eixo Y:

sort(var_quant)
##  [1]  2  3  4  4  5  5  6  7  8  8  8  9 10 11 12 12 13 17 18 21
tab=fdt(var_quant, start=2,h=3,end=23) # ver os dados ordenados para definir os valores de start, h e end
plot(tab, type='fh', xlab="tempo de espera (min)",ylab="nº pacientes") 

Frequências relativas no eixo y

Considerando % no eixo Y:

sort(var_quant)
##  [1]  2  3  4  4  5  5  6  7  8  8  8  9 10 11 12 12 13 17 18 21
tab=fdt(var_quant, start=2,h=3,end=23) # ver os dados ordenados para definir os valores de start, h e end
plot(tab, type='rfph', xlab="tempo de espera (min)",ylab="% pacientes") 

4.12 Polígono de frequências - Variável quantitativa contínua ou discreta com intervalo de variação grande

Vamos usar o pacote fdth.

Frequências absolutas no eixo y

Considerando frequências absolutas no eixo Y:

sort(var_quant)
##  [1]  2  3  4  4  5  5  6  7  8  8  8  9 10 11 12 12 13 17 18 21
tab=fdt(var_quant, start=2,h=3,end=23) # ver os dados ordenados para definir os valores de start, h e end
plot(tab,type='fp', xlab="tempo de espera (min)",ylab="nº pacientes", col = "black")  

Frequências relativas no eixo y

Considerando % no eixo Y:

sort(var_quant)
##  [1]  2  3  4  4  5  5  6  7  8  8  8  9 10 11 12 12 13 17 18 21
tab=fdt(var_quant, start=2,h=3,end=23) # ver os dados ordenados para definir os valores de start, h e end
plot(tab,type='rfpp', xlab="tempo de espera (min)",ylab="% pacientes", col = "black")  

4.13 Histograma com polígono de frequências - Variável quantitativa contínua ou discreta com intervalo de variação grande

Pacote fdth.

Frequências absolutas no eixo y

Considerando frequências absolutas no eixo Y:

tab=fdt(var_quant, start=2,h=3,end=23) # ver os dados ordenados para definir os valores de start, h e end
plot(tab, type='fh', xlab="tempo de espera (min)",ylab="nº pacientes") 
par(new=TRUE)  
plot(tab,type='fp', xlab="tempo de espera (min)",ylab="nº pacientes", col = "black")  

Frequências relativas no eixo y

Considerando % no eixo Y:

tab=fdt(var_quant, start=2,h=3,end=23) # ver os dados ordenados para definir os valores de start, h e end
plot(tab, type='rfph', xlab="tempo de espera (min)",ylab="% pacientes") 
par(new=TRUE)
plot(tab,type='rfpp', xlab="tempo de espera (min)",ylab="% pacientes", col = "black")

4.14 Gráfico de frequências acumuladas - Variável quantitativa contínua ou discreta com intervalo de variação grande

Pacote fdth.

tab=fdt(var_quant, start=2,h=3,end=23) # ver os dados ordenados para definir os valores de start, h e end
plot(tab,type='cfpp', xlab="tempo de espera (min)",ylab="% pacientes", ylim=c(0,100), col = "black" )  

4.15 Diagrama de caixas - Variável quantitativa

Pacote básico do R.

boxplot(var_quant, ylab = "tempo de espera (min)") 
points(mean(var_quant), pch=3) # para inserir a média no gráfico

Exercício: Reproduza alguns dos gráficos alterando os nomes dos eixos.

4.16 Janela com vários gráficos - Variável quantitativa

As linhas de comandos para obter conjuntamente o diagrama de caixas, o histograma com o polígono de frequência e o gráfico de frequências acumuladas (janela com três gráficos lado a lado para análise de uma variável contínua).

Exemplo 1

sort(var_quant)
##  [1]  2  3  4  4  5  5  6  7  8  8  8  9 10 11 12 12 13 17 18 21
tab=fdt(var_quant, start=2,h=3,end=23) # ver os dados ordenados para definir os valores de start, h e end

par(mfrow=c(1,3))

boxplot(var_quant, ylab = "tempo de espera (min)", cex.axis=1.6, cex.lab=1.6) #diagrama de caixas
points(mean(var_quant), pch=3) 

plot(tab, type='rfph', xlab="tempo de espera (min)",ylab="% pacientes", cex.axis=1.6, cex.lab=1.6) 
par(new=TRUE)
plot(tab,type='rfpp', xlab="tempo de espera (min)",ylab="% pacientes", col = "black", cex.axis=1.6, cex.lab=1.6) # histograma e poligono de frequencia 
  
plot(tab,type='cfpp', xlab="tempo de espera (min)",ylab="% acumulados", ylim=c(0,100), col = "black",cex.axis=1.6, cex.lab=1.6 ) #ogiva de Galton (% acumulados) 

Exemplo 2

Pergunta criada no formulário Google

Formato das respostas na planilha Google

sort(respostas$`Idade (em anos)`)
##  [1] 17 17 18 18 18 18 18 18 18 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 21
## [26] 21 21 21 21 21 22 22 22 23 23 23 24 26 29 31 32
tab=fdt(respostas$`Idade (em anos)`, start=17,h=2,end=34) # ver os dados ordenados para definir os valores de start, h e end

par(mfrow=c(1,3))

boxplot(respostas$`Idade (em anos)`, ylab = "idade", cex.axis=1.6, cex.lab=1.6) 
points(mean(respostas$`Idade (em anos)`), pch=3)

plot(tab, type='rfph', xlab="idade",ylab="% estudantes", cex.axis=1.6, cex.lab=1.6) 
par(new=TRUE)
plot(tab,type='rfpp', xlab="idade",ylab="% estudantes", col = "black",cex.axis=1.6, cex.lab=1.6)

plot(tab,type='cfpp', xlab="idade",ylab="% estudantes", ylim=c(0,100), col = "black", cex.axis=1.6, cex.lab=1.6)

Exemplo 3

Pergunta criada no formulário Google

Formato das respostas na planilha Google

sort(respostas$`Peso (em quilogramas)`)
##  [1]  48  50  51  51  52  55  55  56  56  58  59  60  60  61  64  65  65  65  67
## [20]  68  68  70  71  72  73  74  75  78  78  79  80  80  80  81  85  85  85  86
## [39]  98 102 106
tab=fdt(respostas$`Peso (em quilogramas)`, start=48,h=10,end=108) # ver os dados ordenados para definir os valores de start, h e end

par(mfrow=c(1,3))

boxplot(respostas$`Peso (em quilogramas)`, ylab = "peso (kg)", cex.axis=1.6, cex.lab=1.6) 
points(mean(respostas$`Peso (em quilogramas)`), pch=3)

plot(tab, type='rfph', xlab="peso (kg)",ylab="% estudantes", cex.axis=1.6, cex.lab=1.6) 
par(new=TRUE)
plot(tab,type='rfpp', xlab="peso (kg)",ylab="% estudantes", col = "black", cex.axis=1.6, cex.lab=1.6)

plot(tab,type='cfpp', xlab="peso (kg)",ylab="% estudantes", ylim=c(0,100), col = "black" , cex.axis=1.6, cex.lab=1.6)  

Exercício: Apresente em uma janela os gráficos anteriores um abaixo do outro.

4.17 Medidas Resumo - Variável quantitativa

Pacote summarytools.

descr(var_quant)
## Descriptive Statistics  
## var_quant  
## N: 20  
## 
##                     var_quant
## ----------------- -----------
##              Mean        9.15
##           Std.Dev        5.18
##               Min        2.00
##                Q1        5.00
##            Median        8.00
##                Q3       12.00
##               Max       21.00
##               MAD        5.19
##               IQR        7.00
##                CV        0.57
##          Skewness        0.68
##       SE.Skewness        0.51
##          Kurtosis       -0.49
##           N.Valid       20.00
##         Pct.Valid      100.00

5. Análise conjunta de duas variáveis

5.1 Gráfico para perguntas com mais de uma alternativa - Exemplo formulário Google

Pergunta criada no formulário Google

Formato das respostas na planilha Google

Se a pergunta possibilita a escolha de mais de uma alternativa então não será possível obter os percentuais em cada categoria a partir da planilha de dados. A alternativa é usar os percentuais que constam no gráfico do relatório de respostas do formulário Google.

Linhas de comando para obter o gráfico:

sistema <- data.frame(sim=c(100, 26.8, 6.4), nao=c(0, (100-26.8), (100-6.4)))

par(mfrow=c(1,1), mar=c(5,4,4,4)+0.1, oma=c(0,0,0,4)) # para aumentar a margem da direita.

x <- barplot(t(data.matrix(sistema)),  col=c("dodgerblue3","tomato"), border=NA,  cex.lab=1.0, cex.axis =1.0, cex.names=1.0, ylab="% de estudantes", xlab="sistema operacional", names.arg=c(row.names =c("Windows", "Linux", "MacOS")))

par(mar = c(0,0,0,0), oma = c(0,0,0,0), new = TRUE)
legend(x = "right", colnames(sistema), fill = c("dodgerblue3","tomato"), bty = "n")

par(mar=c(5,4,4,4)+0.1, oma=c(0,0,0,4), new=TRUE)  

library(dplyr) # para usar na_if
text(x, sistema$sim-0.5*sistema$sim,  labels=na_if(round(sistema$sim),0), col="black", cex=1.0)
text(x, sistema$sim+sistema$nao-0.5*sistema$nao, labels=na_if(round(sistema$nao),0), col="black", cex=1.0)

5.2 Gráfico para perguntas com várias opções para várias categorias - Exemplo formulário Google

Pergunta criada no formulário Google

Formato das respostas na planilha Google

Inicialmente vamos obter os percentuais de estudantes em cada uma das possíveis escolhas para cada categoria:

round(table(respostas$`Você tem experiência com os softwares? [Excel]`)/length(respostas$`Você tem experiência com os softwares? [Excel]`)*100,1)
## 
##   Mínima    Muita  Nenhuma Razoável 
##     26.8      2.4      7.3     63.4
round(table(respostas$`Você tem experiência com os softwares? [R]`)/length(respostas$`Você tem experiência com os softwares? [R]`)*100,1)
## 
##  Mínima Nenhuma 
##    26.8    73.2
round(table(respostas$`Você tem experiência com os softwares? [SAS]`)/length(respostas$`Você tem experiência com os softwares? [SAS]`)*100,1)
## 
##  Mínima Nenhuma 
##     4.9    95.1
round(table(respostas$`Você tem experiência com os softwares? [MATLAB]`)/length(respostas$`Você tem experiência com os softwares? [MATLAB]`)*100,1)
## 
##   Mínima    Muita  Nenhuma Razoável 
##     12.2      7.3     70.7      9.8
round(table(respostas$`Você tem experiência com os softwares? [Python]`)/length(respostas$`Você tem experiência com os softwares? [Python]`)*100,1)
## 
##   Mínima    Muita  Nenhuma Razoável 
##     26.8     14.6     26.8     31.7
round(table(respostas$`Você tem experiência com os softwares? [MINITAB]`)/length(respostas$`Você tem experiência com os softwares? [MINITAB]`)*100,1)
## 
##  Mínima Nenhuma 
##     2.4    97.6

Gráfico de barras verticais

exper <- data.frame(
   nenhuma=c(7.3,  26.8,70.7, 73.2,95.1,97.6),
   minima=c(26.8, 26.8,  12.2, 26.8,4.9,2.4),
   satisfatoria=c(63.4, 31.7,9.8,0,0,0),
   muita=c(2.4,14.6,7.3,0,0, 0))

par(las=1) # texto eixo y horizontal
par(mar=c(4,4,2,8)+0.1, oma=c(0,0,0,7)) # para aumentar a margem da direita.
# mar e oma são vetores c(abaixo, esquerda, acima, direita)
# mar default c(5, 4, 4, 2) + 0.1 - oma defaut c(0,0,0,0)
x <- barplot(t(data.matrix(exper)), col=c("dodgerblue3", "red","orange","green"),legend=FALSE, border=NA,  cex.lab=1.0, cex.axis =1.0, cex.names=1.0, names.arg=c(row.names =c("EXCEL", "R", "SAS", "MATLAB", "Pyton", "MINITAB")), ylab="% de respostas")


par(mar = c(0,0,0,0), oma = c(0,0,0,0), new = TRUE)
legend(x = "right", legend = colnames(exper), fill = c("dodgerblue3", "red","orange","green"), bty = "n", y.intersp = 2)

par(mar=c(4,4,2,8)+0.1, oma=c(0,0,0,7), new=TRUE)  
library(dplyr) # para usar na_if
text(x, exper$nenhuma-0.5*exper$nenhuma, labels=na_if(round(exper$nenhuma),0), col="black", cex=1.0)
text(x, exper$nenhuma+exper$minima-0.5*(exper$minima), labels=na_if(round(exper$minima),0), col="black", cex=1.0)
text(x, exper$nenhuma+exper$minima+exper$satisfatoria-0.5*exper$satisfatoria, labels=na_if(round(exper$satisfatoria),0), col="black", cex=1.0)
text(x, exper$nenhuma+exper$minima+exper$satisfatoria+exper$muita-0.5*exper$muita, labels=na_if(round(exper$muita),0), col="black", cex=1.0)

par(mar=c(5,4,4,2)+0.1, oma=c(0,0,0,0)) # retorna valores default

Gráfico de barras horizontais

A seguir as linhas de comandos para obter o gráfico com barras horizontais, útil quando os nomes das categorias são extensos.

exper <- data.frame(
   nenhuma=c(7.3,  26.8,70.7, 73.2,95.1,97.6),
   minima=c(26.8, 26.8,  12.2, 26.8,4.9,2.4),
   satisfatoria=c(63.4, 31.7,9.8,0,0,0),
   muita=c(2.4,14.6,7.3,0,0, 0))


par(las=1) # texto eixo y horizontal
par(mar=c(5,8,2,8)+0.1, oma=c(0,0,0,8)) # para aumentar a margem a esquerda.
# mar e oma são vetores c(abaixo, esquerda, acima, direita)
# mar default c(5, 4, 4, 2) + 0.1 - oma defaut c(0,0,0,0)
x <- barplot(t(data.matrix(exper)),  xlim=c(0,100), col=c("dodgerblue3", "red","orange","green"),legend=FALSE, border=NA,  cex.lab=1.0, cex.axis =1.0, cex.names=1.0, horiz=TRUE, xlab="% de respostas",  names.arg=c(row.names =c("EXCEL", "R", "SAS", "MATLAB", "Pyton", "MINITAB")))

par(mar = c(0,0,0,0), oma = c(0,0,0,0), new = TRUE)
legend(x = "right", legend = colnames(exper), fill = c("dodgerblue3", "red","orange","green"), bty = "n", y.intersp = 2)

par(mar=c(5,8,2,8)+0.1, oma=c(0,0,0,8), new=TRUE)  
library(dplyr) # para usar na_if
text(exper$nenhuma-0.5*exper$nenhuma, x, labels=na_if(round(exper$nenhuma),0), col="black", cex=1.0)
text(exper$nenhuma+exper$minima-0.5*(exper$minima), x, labels=na_if(round(exper$minima),0), col="black", cex=1.0)
text(exper$nenhuma+exper$minima+exper$satisfatoria-0.5*exper$satisfatoria, x, labels=na_if(round(exper$satisfatoria),0), col="black", cex=1.0)
text(exper$nenhuma+exper$minima+exper$satisfatoria+exper$muita-0.5*exper$muita, x, labels=na_if(round(exper$muita),0), col="black", cex=1.0)

par(mar=c(5,4,4,2)+0.1, oma=c(0,0,0,0)) # retorna valores default

5.3 Tabelas de frequências cruzadas - Associação entre duas variáveis qualitativas

São mais recomendadas quando as duas variáveis são qualitativas, mas também podem ser utilizadas quando uma das variáveis ou mesmo as duas são quantitativas, desde que sejam agrupadas em classes.

Da mesma forma que na análise de uma única variável é importante apresentar as frequências relativas juntamente com as frequências absolutas.

No caso das tabelas de frequências cruzadas os percentuais podem ser calculados a partir do total geral, ou do total de cada linha ou ainda com relação ao total de cada coluna, dependendo do objetivo.

O pacote summarytools possibilita obter tabelas cruzadas com percentuais obtidos a partir do total geral (prop = “t”), do total de cada linha (prop = “r”) e do total de cada coluna (prop = “c”).

Tabela de dupla entrada com percentuais calculados em relação ao total geral

Para obter a tabela de dupla entrada das variáveis sexo e forma de pagamento com os percentuais calculados em relação ao total geral usando o pacote summarytools:

ctable(dados$pagamento, dados$sexo, prop = 't', headings = FALSE) # pacote summarytools
## 
## ------------------ ------ ------------ ----------- -------------
##                      sexo     feminino   masculino         Total
##          pagamento                                              
##   American_Express           1 ( 1.2%)    0 (0.0%)    1 (  1.2%)
##           Discover           3 ( 3.8%)    1 (1.2%)    4 (  5.0%)
##         Mastercard          10 (12.5%)    1 (1.2%)   11 ( 13.8%)
##   Proprietary_Card          53 (66.2%)    3 (3.8%)   56 ( 70.0%)
##               Visa           6 ( 7.5%)    2 (2.5%)    8 ( 10.0%)
##              Total          73 (91.2%)    7 (8.8%)   80 (100.0%)
## ------------------ ------ ------------ ----------- -------------

Tabela de dupla entrada com percentuais calculados em relação ao total de cada linha

Para obter a tabela de dupla entrada das variáveis sexo e forma de pagamento com os percentuais calculados em relação ao total de cada linha usando o pacote summarytools:

ctable(dados$pagamento, dados$sexo, prop = 'r', headings = FALSE) # pacote summarytools
## 
## ------------------ ------ ------------- ----------- -------------
##                      sexo      feminino   masculino         Total
##          pagamento                                               
##   American_Express           1 (100.0%)   0 ( 0.0%)    1 (100.0%)
##           Discover           3 ( 75.0%)   1 (25.0%)    4 (100.0%)
##         Mastercard          10 ( 90.9%)   1 ( 9.1%)   11 (100.0%)
##   Proprietary_Card          53 ( 94.6%)   3 ( 5.4%)   56 (100.0%)
##               Visa           6 ( 75.0%)   2 (25.0%)    8 (100.0%)
##              Total          73 ( 91.2%)   7 ( 8.8%)   80 (100.0%)
## ------------------ ------ ------------- ----------- -------------

Tabela de dupla entrada com percentuais calculados em relação ao total de cada coluna

Para obter a tabela de dupla entrada das variáveis sexo e forma de pagamento com os percentuais calculados em relação ao total de cada coluna usando o pacote summarytools:

ctable(dados$pagamento, dados$sexo, prop = 'c', headings = FALSE) # pacote summarytools
## 
## ------------------ ------ ------------- ------------ -------------
##                      sexo      feminino    masculino         Total
##          pagamento                                                
##   American_Express           1 (  1.4%)   0 (  0.0%)    1 (  1.2%)
##           Discover           3 (  4.1%)   1 ( 14.3%)    4 (  5.0%)
##         Mastercard          10 ( 13.7%)   1 ( 14.3%)   11 ( 13.8%)
##   Proprietary_Card          53 ( 72.6%)   3 ( 42.9%)   56 ( 70.0%)
##               Visa           6 (  8.2%)   2 ( 28.6%)    8 ( 10.0%)
##              Total          73 (100.0%)   7 (100.0%)   80 (100.0%)
## ------------------ ------ ------------- ------------ -------------

5.4 Gráfico de barras - Associação entre duas variáveis qualitativas

Gráfico de barras com os resultados da tabela cruzada com percentuais calculados em relação ao total de cada linha

library(dplyr)
percentData <- dados %>% group_by(pagamento) %>% count(sexo) %>%  mutate(ratio=scales::percent(n/sum(n)))
percentData
## # A tibble: 9 x 4
## # Groups:   pagamento [5]
##   pagamento        sexo          n ratio
##   <chr>            <chr>     <int> <chr>
## 1 American_Express feminino      1 100% 
## 2 Discover         feminino      3 75%  
## 3 Discover         masculino     1 25%  
## 4 Mastercard       feminino     10 91%  
## 5 Mastercard       masculino     1 9%   
## 6 Proprietary_Card feminino     53 95%  
## 7 Proprietary_Card masculino     3 5%   
## 8 Visa             feminino      6 75%  
## 9 Visa             masculino     2 25%
require(ggplot2)
ggplot(dados, aes(x=factor(pagamento),fill=factor(sexo))) + 
  geom_bar(position="fill") + 
  geom_text(data=percentData, aes(y=n,label=ratio), position=position_fill(vjust=0.5))+
  xlab("Pagamento") +
  ylab("Proporção de clientes") + 
  scale_fill_manual(name="Sexo", values = c("darksalmon", "aquamarine3"))

Gráfico de barras com os resultados da tabela cruzada com percentuais calculados em relação ao total de cada coluna

Barras verticais

Exemplo 1

library(dplyr)
percentData <- dados %>% group_by(sexo) %>% count(pagamento) %>%  mutate(ratio=scales::percent(n/sum(n)))
percentData
## # A tibble: 9 x 4
## # Groups:   sexo [2]
##   sexo      pagamento            n ratio
##   <chr>     <chr>            <int> <chr>
## 1 feminino  American_Express     1 1.4% 
## 2 feminino  Discover             3 4.1% 
## 3 feminino  Mastercard          10 13.7%
## 4 feminino  Proprietary_Card    53 72.6%
## 5 feminino  Visa                 6 8.2% 
## 6 masculino Discover             1 14%  
## 7 masculino Mastercard           1 14%  
## 8 masculino Proprietary_Card     3 43%  
## 9 masculino Visa                 2 29%
require(ggplot2)
ggplot(dados, aes(x=factor(sexo),fill=factor(pagamento))) + 
  geom_bar(position="fill") + 
  geom_text(data=percentData, aes(y=n,label=ratio ), position=position_fill(vjust=0.5))+
  xlab("Sexo") +
  ylab("Proporção de clientes")+
  scale_fill_manual(name="Pagamento", values = c("red", "dodgerblue3", "green", "orange", "yellow"))

Exemplo 2 - Considerando um ângulo de 30º nos nomes das categorias do eixo x, sendo útil para nomes extensos e controlando os tamanhos de fontes.

ggplot(dados, aes(x=factor(sexo),fill=factor(pagamento))) + 
geom_bar(position="fill") + 
geom_text(data=percentData, aes(y=n,label=ratio ), position=position_fill(vjust=0.5))+
xlab("Sexo") +
ylab("Proporção de clientes")+
scale_fill_manual(name="Pagamento", values = c("red", "dodgerblue3", "green", "orange", "yellow")) +

theme(axis.text.x = element_text(angle = 30, vjust = .5, size = 12)) + #tamanho fonte eixo x
theme(text = element_text(size = 12)) + #tamanho fonte título eixo x e y
theme(axis.text.y = element_text(size = 12)) + #tamanho fonte eixo y
theme(legend.text=element_text(size = 11)) #tamanho fonte legenda

Barras horizontais

ggplot(dados, aes(x=factor(sexo),fill=factor(pagamento))) + 

geom_bar(position="fill") + 
geom_text(data=percentData, aes(y=n,label=ratio), position=position_fill(vjust=0.5))+ 
xlab("Sexo") +
ylab("Proporção de clientes")+
scale_fill_manual(name="Pagamento", values = c("red", "dodgerblue3", "green", "orange", "yellow")) +

theme(axis.text.x = element_text(angle = 0, vjust = .5, size = 12)) + #tamanho fonte eixo x
theme(text = element_text(size = 12)) + #tamanho fonte título eixo x e y
theme(axis.text.y = element_text(size = 12)) + #tamanho fonte eixo y
theme(legend.text=element_text(size = 11)) + #tamanho fonte legenda

coord_flip() # barras na hoizontal

Observe que para esse exemplo a melhor opção é considerar barras verticais.

Exercício: Que conclusões podemos obter a partir das tabelas cruzadas e gráficos de barras para duas variáveis?

Exercício: Compare a conclusão obtida a partir dos pecentuais em relação ao total das linhas com a obtida a partir dos pecentuais em relação ao total das colunas

5.5 Diagrama de caixas - Associação entre uma variável qualitativa e uma variável quantitativa

boxplot(dados$vendas ~ dados$sexo, xlab = "Sexo", ylab = "Vendas")
points(1:nlevels(dados$sexo), tapply(dados$vendas, dados$sexo, mean),  pch=3)

Exercício: Que conclusões podemos obter a partir do diagrama de caixas para duas variáveis?

5.6 Diagrama de dispersão - Associação entre duas variáveis quantitativas

Exemplo 1

(Livro Anderson) Como ilustração, considere a relação entre propaganda e vendas para uma loja de equipamentos de estéreo e som em São Francisco. Em dez ocasiões durante os últimos três meses a loja recorreu a propagandas na TV durante os fins de semana para promover as vendas em suas lojas. Os gerentes querem investigar se existe relação entre o número de comerciais apresentados e as vendas realizadas durante o fim de semana seguinte. Dados amostrais para as dez semanas, com as vendas em centenas de dólares

x<- c(2, 5, 1, 3, 4, 1, 5, 3, 4, 2)  # número de comerciais
y<- c(50, 57, 41, 54, 54, 38, 63, 48, 59, 46)  # valores vendas (em milhares de reais)

par(mfrow=c(1,1))
plot(y~x, xlab = "Comerciais", ylab = "Vendas (US$ 100)", col = "blue") #diagrama de dispersão

Exemplo 2

names(dados)
## [1] "cliente"      "pagamento"    "itens"        "desconto"     "vendas"      
## [6] "sexo"         "estado_civil" "idade"
par(mfrow=c(1,1))
plot(dados$vendas~dados$itens, xlab = "Itens", ylab = "Vendas (US$)", col = "blue") 

Exercício: Que conclusões podemos obter a partir do diagrama de dispersão?

5.7 Coeficientes de correlação - Associação entre duas variáveis quantitativas

Coeficiente de correlação de Pearson

Exemplo 1

pearson <- cor(y,x); pearson
## [1] 0.9304906

Exemplo 2

pearson <- cor(dados$vendas,dados$itens); pearson
## [1] 0.6920072

Exercício: Que conclusões podemos obter a partir do coeficiente de correlação de Pearson?

Coeficiente de correlação de Spearman

Exemplo 1

spearman <- cor(y, x, method = "spearman"); spearman
## [1] 0.9259965

Exemplo 2

spearman <- cor(dados$vendas,dados$itens, method = "spearman"); spearman
## [1] 0.6270787

Exercício: Que conclusões podemos obter a partir do coeficiente de correlação de Spearman?

5.8 Diagrama de dispersão e reta de mínimos quadrados - Associação entre duas variáveis quantitativas

Exemplo 1

plot(y~x, xlab = "Comerciais", ylab = "Vendas (US$ 100)", col = "blue")  
abline(lm(y~x), col= "red")   #reta ajustada

Exemplo 2

names(dados)
## [1] "cliente"      "pagamento"    "itens"        "desconto"     "vendas"      
## [6] "sexo"         "estado_civil" "idade"
par(mfrow=c(1,1))
plot(dados$vendas~dados$itens, xlab = "Itens", ylab = "Vendas (US$)", col = "blue") 
abline(lm(dados$vendas~dados$itens), col= "red")   #reta ajustada

Para outras opções de gráfico acesse a galeria de gráficos do R https://www.r-graph-gallery.com/.

6. Exercício - Estudo de caso

Pelican Stores (Anderson, David R.).

A Pelican Stores, uma divisão da National Clothing, é uma cadeia de lojas de roupas femininas que opera em todos os Estados Unidos. Recentemente, a cadeia realizou uma promoção na qual cupons de desconto foram enviados aos clientes de outras lojas da National Clothing. Dados coletados para uma amostra de 100 transações de cartões de crédito em lojas Pelican Stores em um dia, durante a promoção, estão no arquivo PelicanStores. O método de pagamento chamado Proprietary Card (Cartão Proprietário) refere-se a cobranças feitas utilizando um cartão de crédito da National Clothing. Os clientes que fizeram compra utilizando um cupom de descontos são denominados clientes promocionais, e os que fizeram uma compra sem utilizar o cupom de desconto são chamados clientes regulares. Como os cupons promocionais não foram enviados aos clientes da Pelican Stores regulares, a administração considera as negociações feitas para pessoas apresentando cupons promocionais como vendas que, de outro modo, não teriam sido efetuadas. Naturalmente, a Pelican também espera que os clientes promocionais continuem a comprar em suas lojas.

Itens: O número total de itens comprados. Vendas líquidas: A quantia total (US$) cobrada pelo cartão de crédito.

A administração da Pelican gostaria de utilizar esses dados amostrais para aprender a respeito do perfil de seus clientes e avaliar a promoção envolvendo cupons de desconto.

Relatório administrativo Utilize os métodos gráficos e tabulares de estatística descritiva para ajudar a administração a desenvolver um perfil de cliente e avaliar a campanha promocional.

Obtenha a distribuição de frequências percentuais e os gráficos apropriados para as principais variáveis.

Obtenha um gráfico de barras ou de setores mostrando o número de compras de clientes atribuíveis ao método de pagamento.

Observe que para obter informações sobre o número de itens vendidos pode ser necessário excluir os 0.

dados_sem_zeros <- dados$desconto[dados$desconto>0]   
dados_sem_zeros #exibir dados sem os zeros
##  [1]  25.60 121.10  19.50  22.48   7.90 103.60  24.50  12.60  53.00  19.00
## [11]  32.20   7.90  29.67  66.50  14.50   9.48  48.20  37.30   4.50  15.80
## [21]  15.80  10.00  14.50  25.02  62.70  16.50  15.60  35.20  19.40  20.11
## [31]   4.68  94.30  58.88  51.70  35.40  56.40  20.10  28.30  19.50  19.20
## [41]  91.48  37.40   7.90   9.50   9.90  29.50  36.70  11.80  18.95  57.18
## [51]  10.00  15.50  14.28  46.26  35.11  31.20

Exercícios:

Obtenha a tabela de frequências e o gráfico de barras para formas de pagamento.

Obtenha a tabela de frequências; uma janela gráfica com o diagrama de caixas, histograma com polígono de frequências e ogiva de galton (frequências acumuladas) e as medidas resumo para a variável vendas.

Explore outras variáveis para responder aos objetivos da administração da Pelican Stores.

7. Referências

Estatística aplicada a administração e economia – Tradução da 8ª edição norte-americana de David R. Anderson; Dennis J. Sweeney; Thomas A. Williams; Jeffrey D. Camm; James J. Cochran.

Vignette pacote summarytools. https://cran.r-project.org/web/packages/summarytools/vignettes/Introduction.html.

https://www.dataanalytics.org.uk/legends-on-graphs-and-charts/.

https://stackoverflow.com/.