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)
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.
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
xlsx ou (2) csv.xlsxPara fazer o download das respostas do formulário Google para um arquivo Microsoft Excel .xlsx
csvPara fazer o download das respostas do formulário Google para valores separados por vírgulas .csv.
Para reproduzir os exemplos neste tutorial após baixar os arquivos renomeio-os como respostas.xlsx e respostas.csv.
xlsxEnvironment clicar em Import Dataset e selecionar From Excel.Para importar a planilha de respostas salva em xlsx
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 //.
csvPlanilha com as respostas do formulário Google salva em csv aberta no Excel
Environment clicar em Import Dataset e selecionar From Text (readr).Para importar o arquivo salvo em csv
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.
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
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.
# 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"
var_ordinal <- c("Bom", "Regular", "Bom", "Ótimo", "Ótimo", "Ótimo", "Regular", "Bom")
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
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
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
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
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
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.
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.
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.
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.
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))
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:
barplot((sort(table(var_nominal),decreasing=T)), xlab = "Refrigerante", ylab = "nº entrevistados", col="lightgreen", ylim=c(0,20))
barplot((sort(table(var_nominal), decreasing=T))/length(var_nominal)*100, xlab = "Refrigerante", ylab = "% entrevistados", col="lightgreen", ylim=c(0,40))
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.
barplot((table(var_ordinal)/length(var_ordinal)*100), xlab = "O que achou do produto", ylab = "% entrevistados", col="lightgreen", ylim=c(0,40))
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))
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
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)
plot((ecdf(respostas$`Número de calçado_ord`)), main="", ylab="proporção de estudantes", xlab="nº de calçado")
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")
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:
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")
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")
Vamos usar o pacote fdth.
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")
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")
Pacote fdth.
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")
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")
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" )
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.
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).
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)
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)
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.
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
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)
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
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
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
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”).
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%)
## ------------------ ------ ------------ ----------- -------------
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%)
## ------------------ ------ ------------- ----------- -------------
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%)
## ------------------ ------ ------------- ------------ -------------
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"))
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"))
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
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
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?
(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
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?
pearson <- cor(y,x); pearson
## [1] 0.9304906
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?
spearman <- cor(y, x, method = "spearman"); spearman
## [1] 0.9259965
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?
plot(y~x, xlab = "Comerciais", ylab = "Vendas (US$ 100)", col = "blue")
abline(lm(y~x), col= "red") #reta ajustada
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/.
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.
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/.