Gráficos com o ggplot ggplot de Hadley Wickham
- instale o programa e o ative
install.packages("ggplot2")
library(ggplot2)
- Abra o arquivo de dados para essa aula e veja as variáveis contidas nele
- Essa base contém dados de um TCC com 66 alunos de escolas públicas dos anos 4, 7 e 9
- Ha uma medida de habilidades socioemocionais com o SENNA v 1.0 senna v 1.0, um instrumento de auto relato em itens avaliadas na escala 1: nada a ver comigo, 2: um pouco a ver comigo, 3; mais ou menos, 4: tudo a ver comigo, 5: completamente a ver comigo.
- Medida
- Notas e frequencia às aulas
- Nós iremos explorar: + como as habilidades estão distribuídas + como estão distribuídas em relação ao ano escolar ? + qual a relação entre habilidades e notas ? + qual a relação entre habilidades e frequência ?
load("~/Dropbox/R Stat/senna.RData")
names(sennav1)
## [1] "SEXO" "IDADE" "Estado Civil"
## [4] "COR" "ESCOLARIDADE" "E. Pai"
## [7] "E. Mae" "RENDA" "TRABALHO"
## [10] "COM QUEM MORA" "QTD PESSOAS NA CASA" "TV"
## [13] "lavadoura" "Banheiro" "Automovel"
## [16] "Empreg" "Microondas" "Lav. Roupa"
## [19] "DVD" "Geladeira" "Freezer"
## [22] "PC" "Motocicleta" "F1.Cons"
## [25] "F2.Extr" "F3.EmSt" "F4.Agre"
## [28] "F5.Opns" "F6.NVLoc" "ID0"
## [31] "MenL.P" "F.L.P" "Men.His"
## [34] "F.His" "Men.Ge" "F.Ge"
## [37] "Men.Mat" "F.Mat" "Men.Ciê"
## [40] "F.Ciê" "Men.Edu.Fí" "F.Edu.Fí"
## [43] "Men.Art" "F.Artes" "Men.Ing"
## [46] "F.Ing" "Men.LeiteP.T" "F.LeiteP.T"
## [49] "Faltas" "s_faltas" "m_notas"
- Faça um histograma (análise de distribuiçào de uma variável)
- A análise exploratória é um dos passos mais importantes na análise e entendimento dos dados
- ggplot usa a gramar of graphics que define um gráfico como o mapeamento dos dados em atributos estéticos (cor, forma e tamanho) de objetos geométricos (pontos, linhas e barras).
- Para fazer um histograma
- Defina a base de dados
- Defina a variável x em aes() “estéticas”
- Defina o objeto geométrico geoms()
ggplot(data=sennav1, aes(x=F1.Cons)) + geom_histogram()
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
- Mudando detalhes dos gráficos
- labs: títulos
- alpha: transparência
- binwidth: intervalo de x
ggplot(data=sennav1, aes(x=F1.Cons)) +
geom_histogram(alpha =.4, fill ="blue", color="black", binwidth=.5) +
labs(title="SENNA v1.0", x="Auto Gestão", y="freq")
- Comparando distribuições em função de uma segunda variável
- fill: cada valor da variável será mapeada em diferentes cores no preenchimento das barras
- variáveis dentro de aes(), constantes fora.
ggplot(data=sennav1, aes(x=F1.Cons, fill = factor(SEXO))) +
geom_histogram(alpha =.4, binwidth=.5, color = "black") +
labs(title="SENNA v1.0", x="Auto Gestão", y="freq")
- Comparando distribuições em dois gráficos separados
- facet_grid()
- dentro dos parêntesis coloque o nome da variável que indica os subgrupos assim: linha~coluna
- se quiser os gráficos um embaixo do outro: linha~.
- se quiser os gráficos um ao lado do: .~coluna
ggplot(data=sennav1, aes(x=F1.Cons, fill = factor(SEXO))) +
geom_histogram(alpha =.4, binwidth=.5, color = "black") +
labs(title="SENNA v1.0", x="Auto Gestão", y="freq") +
facet_grid(SEXO~.)
- Muda a aparência geral do gráfica
ggplot(data=sennav1, aes(x=F1.Cons, fill = factor(SEXO))) +
geom_histogram(alpha =.4, binwidth=.5, color = "black") +
labs(title="SENNA v1.0", x="Auto Gestão", y="freq") +
facet_grid(SEXO~.) + theme_bw(base_family = "Avenir", base_size = 10)
- Gráfico densidade com tons de cinza
- theme_bw()
- scale_fill_grey(start = 0, end = .9)
ggplot(data=sennav1, aes(x=F1.Cons, fill = factor(ESCOLARIDADE))) +
geom_density(alpha =.4) +
labs(title="SENNA v1.0", x="Auto Gestão", y="freq", fill = "ano") +
theme_bw() + scale_fill_grey(start = 0, end = .9)
- Distribuição para diferentes subgrupos com Box plots
- note que agora dentro do aes(..) a variável y = F1.Cons e x = factor(ESCOLARIDADE)
- usamos fill = factor(ESCOLARIDADE) para pintar cada objeto com cores diferentes
ggplot(data=sennav1, aes(y=F1.Cons, x = factor(ESCOLARIDADE), fill = factor(ESCOLARIDADE))) +
geom_boxplot() +
labs(title="SENNA v1.0", x="Ano escolar", y="Auto Gestão", fill = "Ano") +
theme_bw() + scale_fill_grey(start = 0, end = .9)
- Correlação entre variáveis: gráfico de pontos scaterplot
- geom_point()
- scale_fill_grey(start = 0, end = .9)
ggplot(data=sennav1, aes(x=F1.Cons, y=m_notas)) +
geom_point() +
labs(title="SENNA v1.0", x="Auto Gestão", y="Média das Notas")
- Scaterplot com reta de gregressão
- geom_point()
- scale_fill_grey(start = 0, end = .9)
ggplot(data=sennav1, aes(x=F1.Cons, y=m_notas)) +
geom_point() + geom_smooth(method="lm") +
labs(title="SENNA v1.0", x="Auto Gestão", y="Média das Notas")
- Correlação entre variáveis para diferentes subgrupos
ggplot(data=sennav1, aes(x=F1.Cons, y=m_notas, color = factor(ESCOLARIDADE))) +
geom_point() +
labs(title="SENNA v1.0", x="Auto Gestão", y="Média das Notas", color= "Ano")
- Correlação entre variáveis para diferentes subgrupos adicionando retas de regressào
ggplot(data=sennav1, aes(x=F1.Cons, y=m_notas, color = factor(ESCOLARIDADE))) +
geom_point() + geom_smooth(method="lm", se=FALSE) +
labs(title="SENNA v1.0", x="Auto Gestão", y="Média das Notas", color= "Ano")
- Mudando a aparência do gráfico
- Adição da forma dos pontos
- Note que agora usei scale_color_grey()
ggplot(data=sennav1, aes(x=F1.Cons, y=m_notas, color = factor(ESCOLARIDADE), shape = factor(ESCOLARIDADE))) +
geom_point() + geom_smooth(method="lm", se=FALSE) +
labs(title="SENNA v1.0", x="Auto Gestão", y="Média das Notas", color= "Ano", shape = "Ano") +
theme_bw() + scale_color_grey(start = .2, end = .9)
- Descrevendo os dados tabelas de frequencia
table(sennav1$IDADE)
##
## 10 11 12 13 14 15
## 6 15 22 3 19 1
table(sennav1$IDADE, sennav1$SEXO)
##
## 0 1
## 10 3 3
## 11 6 9
## 12 13 9
## 13 3 0
## 14 8 11
## 15 0 1
table(sennav1$IDADE, sennav1$ESCOLARIDADE)
##
## 5 7 9
## 10 6 0 0
## 11 15 0 0
## 12 0 22 0
## 13 0 2 1
## 14 0 0 19
## 15 0 0 1
- Descrevendo os dados com estatísticas descritivas
- média, moda e desvio padrão
- assimetria e curtose
names(sennav1)
## [1] "SEXO" "IDADE" "Estado Civil"
## [4] "COR" "ESCOLARIDADE" "E. Pai"
## [7] "E. Mae" "RENDA" "TRABALHO"
## [10] "COM QUEM MORA" "QTD PESSOAS NA CASA" "TV"
## [13] "lavadoura" "Banheiro" "Automovel"
## [16] "Empreg" "Microondas" "Lav. Roupa"
## [19] "DVD" "Geladeira" "Freezer"
## [22] "PC" "Motocicleta" "F1.Cons"
## [25] "F2.Extr" "F3.EmSt" "F4.Agre"
## [28] "F5.Opns" "F6.NVLoc" "ID0"
## [31] "MenL.P" "F.L.P" "Men.His"
## [34] "F.His" "Men.Ge" "F.Ge"
## [37] "Men.Mat" "F.Mat" "Men.Ciê"
## [40] "F.Ciê" "Men.Edu.Fí" "F.Edu.Fí"
## [43] "Men.Art" "F.Artes" "Men.Ing"
## [46] "F.Ing" "Men.LeiteP.T" "F.LeiteP.T"
## [49] "Faltas" "s_faltas" "m_notas"
summary(sennav1[ , 24:29 ])
## F1.Cons F2.Extr F3.EmSt F4.Agre
## Min. :1.222 Min. :2.143 Min. :1.125 Min. :2.250
## 1st Qu.:2.958 1st Qu.:3.018 1st Qu.:2.803 1st Qu.:3.175
## Median :3.361 Median :3.371 Median :3.156 Median :3.500
## Mean :3.501 Mean :3.411 Mean :3.303 Mean :3.528
## 3rd Qu.:4.181 3rd Qu.:3.714 3rd Qu.:3.938 3rd Qu.:3.883
## Max. :5.000 Max. :5.000 Max. :4.900 Max. :4.833
## F5.Opns F6.NVLoc
## Min. :1.625 Min. :1.500
## 1st Qu.:2.887 1st Qu.:2.000
## Median :3.308 Median :2.275
## Mean :3.264 Mean :2.386
## 3rd Qu.:3.736 3rd Qu.:2.800
## Max. :4.500 Max. :4.375
summary(sennav1[ , 31:51 ])
## MenL.P F.L.P Men.His F.His
## Min. : 3.000 Min. : 0.000 Min. : 4.000 Min. :0.000
## 1st Qu.: 5.000 1st Qu.: 1.000 1st Qu.: 7.000 1st Qu.:0.000
## Median : 7.000 Median : 3.000 Median : 7.500 Median :2.000
## Mean : 6.715 Mean : 4.167 Mean : 7.592 Mean :2.333
## 3rd Qu.: 8.000 3rd Qu.: 6.000 3rd Qu.: 9.000 3rd Qu.:4.000
## Max. :10.000 Max. :18.000 Max. :10.000 Max. :9.000
## NA's :1 NA's :1
## Men.Ge F.Ge Men.Mat F.Mat
## Min. : 2.500 Min. : 0.00 Min. : 5.000 Min. : 0.000
## 1st Qu.: 7.000 1st Qu.: 0.00 1st Qu.: 7.000 1st Qu.: 0.000
## Median : 8.000 Median : 0.00 Median : 8.000 Median : 2.000
## Mean : 7.577 Mean : 1.47 Mean : 7.923 Mean : 3.545
## 3rd Qu.: 8.500 3rd Qu.: 2.00 3rd Qu.: 9.000 3rd Qu.: 5.000
## Max. :10.000 Max. :11.00 Max. :10.000 Max. :19.000
## NA's :1 NA's :1
## Men.Ciê F.Ciê Men.Edu.Fí F.Edu.Fí
## Min. : 4.500 Min. : 0 Min. : 4.000 Min. :0.0000
## 1st Qu.: 6.000 1st Qu.: 0 1st Qu.: 8.000 1st Qu.:0.0000
## Median : 7.000 Median : 1 Median : 8.000 Median :0.0000
## Mean : 7.192 Mean : 2 Mean : 8.338 Mean :0.8923
## 3rd Qu.: 8.500 3rd Qu.: 3 3rd Qu.: 9.000 3rd Qu.:2.0000
## Max. :10.000 Max. :10 Max. :10.000 Max. :4.0000
## NA's :1 NA's :1 NA's :1 NA's :1
## Men.Art F.Artes Men.Ing F.Ing
## Min. : 3.000 Min. :0.000 Min. : 3.000 Min. :0.000
## 1st Qu.: 6.000 1st Qu.:0.000 1st Qu.: 6.000 1st Qu.:0.000
## Median : 7.000 Median :1.000 Median : 7.000 Median :1.000
## Mean : 6.877 Mean :1.422 Mean : 7.038 Mean :1.133
## 3rd Qu.: 8.000 3rd Qu.:2.000 3rd Qu.: 8.000 3rd Qu.:2.000
## Max. :10.000 Max. :8.000 Max. :10.000 Max. :4.000
## NA's :1 NA's :21 NA's :1 NA's :21
## Men.LeiteP.T F.LeiteP.T Faltas s_faltas
## Min. :2.000 Min. :0.0 Min. : 0.00 Min. : 0.00
## 1st Qu.:5.000 1st Qu.:0.0 1st Qu.: 3.00 1st Qu.: 3.00
## Median :6.250 Median :2.0 Median :12.00 Median :12.00
## Mean :6.091 Mean :1.8 Mean :17.33 Mean :17.33
## 3rd Qu.:8.000 3rd Qu.:2.0 3rd Qu.:27.25 3rd Qu.:27.25
## Max. :9.000 Max. :6.0 Max. :72.00 Max. :72.00
## NA's :22 NA's :21
## m_notas
## Min. :4.667
## 1st Qu.:6.312
## Median :7.333
## Mean :7.325
## 3rd Qu.:8.111
## Max. :9.875
## NA's :1
library(psych)
##
## Attaching package: 'psych'
##
## The following object is masked from 'package:ggplot2':
##
## %+%
describe(sennav1[ , 24:29 ])
## vars n mean sd median trimmed mad min max range skew
## F1.Cons 1 66 3.50 0.85 3.36 3.51 0.86 1.22 5.00 3.78 -0.17
## F2.Extr 2 66 3.41 0.54 3.37 3.40 0.53 2.14 5.00 2.86 0.26
## F3.EmSt 3 66 3.30 0.80 3.16 3.32 1.07 1.12 4.90 3.78 -0.16
## F4.Agre 4 66 3.53 0.57 3.50 3.51 0.54 2.25 4.83 2.58 0.23
## F5.Opns 5 66 3.26 0.64 3.31 3.30 0.64 1.62 4.50 2.88 -0.49
## F6.NVLoc 6 66 2.39 0.58 2.27 2.34 0.44 1.50 4.38 2.88 0.93
## kurtosis se
## F1.Cons -0.27 0.11
## F2.Extr 0.07 0.07
## F3.EmSt -0.63 0.10
## F4.Agre -0.35 0.07
## F5.Opns 0.18 0.08
## F6.NVLoc 0.71 0.07
describeBy(sennav1[ , 24:29 ], group=sennav1$ESCOLARIDADE)
## group: 5
## vars n mean sd median trimmed mad min max range skew
## F1.Cons 1 21 4.07 0.83 4.44 4.16 0.82 2.11 5.00 2.89 -0.61
## F2.Extr 2 21 3.61 0.51 3.67 3.63 0.49 2.56 4.56 2.00 -0.25
## F3.EmSt 3 21 3.59 0.86 3.90 3.61 1.19 2.20 4.90 2.70 -0.29
## F4.Agre 4 21 3.74 0.46 3.60 3.71 0.44 3.00 4.70 1.70 0.48
## F5.Opns 5 21 3.37 0.79 3.38 3.45 0.74 1.62 4.50 2.88 -0.69
## F6.NVLoc 6 21 2.38 0.72 2.12 2.27 0.37 1.62 4.38 2.75 1.21
## kurtosis se
## F1.Cons -0.72 0.18
## F2.Extr -0.92 0.11
## F3.EmSt -1.41 0.19
## F4.Agre -0.78 0.10
## F5.Opns -0.24 0.17
## F6.NVLoc 0.79 0.16
## --------------------------------------------------------
## group: 7
## vars n mean sd median trimmed mad min max range skew
## F1.Cons 1 24 3.48 0.56 3.36 3.48 0.62 2.61 4.33 1.72 0.08
## F2.Extr 2 24 3.41 0.55 3.35 3.36 0.41 2.43 5.00 2.57 0.94
## F3.EmSt 3 24 3.38 0.66 3.38 3.37 0.74 2.38 4.56 2.19 0.11
## F4.Agre 4 24 3.49 0.59 3.50 3.46 0.62 2.50 4.75 2.25 0.36
## F5.Opns 5 24 3.35 0.44 3.31 3.35 0.57 2.46 4.23 1.77 -0.07
## F6.NVLoc 6 24 2.41 0.59 2.30 2.39 0.68 1.50 3.50 2.00 0.36
## kurtosis se
## F1.Cons -1.38 0.11
## F2.Extr 1.19 0.11
## F3.EmSt -1.26 0.13
## F4.Agre -0.59 0.12
## F5.Opns -0.77 0.09
## F6.NVLoc -1.16 0.12
## --------------------------------------------------------
## group: 9
## vars n mean sd median trimmed mad min max range skew
## F1.Cons 1 21 2.95 0.81 2.94 2.97 0.41 1.22 4.50 3.28 -0.19
## F2.Extr 2 21 3.21 0.51 3.21 3.22 0.42 2.14 4.07 1.93 -0.10
## F3.EmSt 3 21 2.93 0.76 3.00 2.96 0.83 1.12 4.06 2.94 -0.39
## F4.Agre 4 21 3.37 0.61 3.33 3.34 0.72 2.25 4.83 2.58 0.40
## F5.Opns 5 21 3.07 0.63 3.15 3.07 0.46 1.69 4.23 2.54 -0.22
## F6.NVLoc 6 21 2.36 0.42 2.30 2.35 0.44 1.60 3.10 1.50 0.34
## kurtosis se
## F1.Cons -0.13 0.18
## F2.Extr -0.81 0.11
## F3.EmSt -0.50 0.17
## F4.Agre -0.34 0.13
## F5.Opns -0.50 0.14
## F6.NVLoc -1.09 0.09
multi.hist(sennav1[ , 24:29 ], main = "SENNA v1.0")
pairs.panels(sennav1[ , c( 24:29, 50:51) ])
r <- cor(sennav1[ , c( 24:29, 50:51)] ,use="pairwise")
round(r, digits = 2)
## F1.Cons F2.Extr F3.EmSt F4.Agre F5.Opns F6.NVLoc s_faltas m_notas
## F1.Cons 1.00 0.15 0.73 0.40 0.48 -0.32 -0.40 0.48
## F2.Extr 0.15 1.00 0.13 0.39 0.24 0.22 -0.22 0.11
## F3.EmSt 0.73 0.13 1.00 0.38 0.24 -0.39 -0.22 0.29
## F4.Agre 0.40 0.39 0.38 1.00 0.41 -0.08 -0.30 0.45
## F5.Opns 0.48 0.24 0.24 0.41 1.00 0.19 -0.14 0.15
## F6.NVLoc -0.32 0.22 -0.39 -0.08 0.19 1.00 0.00 -0.25
## s_faltas -0.40 -0.22 -0.22 -0.30 -0.14 0.00 1.00 -0.47
## m_notas 0.48 0.11 0.29 0.45 0.15 -0.25 -0.47 1.00
cor.plot(cor(sennav1[ , c(24:29, 50:51)], use="pair"))