forked from RLadiesCuerna/meetup_mayo_2022
-
Notifications
You must be signed in to change notification settings - Fork 0
/
2_Datos_cualitativos.R
204 lines (104 loc) · 4.85 KB
/
2_Datos_cualitativos.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
### CARGUEMOS LOS PAQUETES QUE USAREMOS
library(ggplot2)
library(MASS)
library(dplyr)
### A. TABLAS DE FRECUENCIAS Y DE CONTINGENCIAS
## Trabajaremos con varias columnas del data frame survey (del paquete `MASS`)
# Sex (Sexo biologico)
# W.Hnd (Cual es tu mano dominante)
# Clap (¡Aplaude! ¿Qué mano tienes arriba?)
# A.1 Veamos los datos (con su opcion favorita)
View(survey)
head(survey)
# A.2 Obtengamos las frecuencias de estas variables
table(survey$Sex)
table(survey$W.Hnd)
table(survey$Clap)
# A.3 Tambien podemos observar los valores como fracciones
prop.table(table(survey$Clap))
prop.table(table(survey$W.Hnd))
# A.4 Ahora hagamos una tabla que relacione las frecuencias de dos variables
hand_sex<-table(survey$W.Hnd,survey$Sex)
clap_hand<-table(survey$Clap,survey$W.Hnd)
# A.5 ¿Como se obtienen los totales (marginales y global) para estas tablas?
addmargins(hand_sex)
addmargins(clap_hand)
# A.6 ¿Cómo se convierten a proporciones estas tablas?
# A.6.a Aqui vemos las proporciones respecto al total de observaciones
prop.table(clap_hand)*100
# A.6.a Y podemos observar las proporciones respecto al total de las columnas
prop.table(clap_hand,2)*100
# A.7 Tambien podemos crear tablas de tres o mas dimensiones
table(survey$Clap, survey$W.Hnd, survey$Sex)
### B. GRAFICAS PARA DATOS CUALITATIVOS
# B.1 Podemos representar la tabla de contingencias como grafica de mosaico
mosaicplot(t(clap_hand), # Tabla de contingencias a graficar
main= "Mano dominante y aplauso",
xlab="Mano dominante",
ylab="Mano arriba en aplauso",
col=c(2,3,4,5), #Colores para categorias
cex.axis=1.2, # Aumentar tamaño de etiquetas
)
# B.2 Y podemos crear graficas de barras a partir de los datos originales
dat <- filter(survey, !is.na(W.Hnd),!is.na(Sex),!is.na(Clap))
ggplot(dat, aes(x=W.Hnd,fill=Sex)) + geom_bar(position="dodge")
ggplot(dat, aes(x=Clap, fill=W.Hnd)) + geom_bar(position="dodge")
### C. GRAFICAS PARA DATOS ORDINALES
## Ahora trabajaremos con las siguientes columnnas del dataset survey (del paquete MASS)
# Sex (Sexo biologico)
# Smoke (¿Qué tanto fumas?)
# C.1 Smoke es una variable cualitativa ordinal, pero sus niveles están en desorden
#Esto afecta el orden en que se tabulan y grafican los datos
class(survey)
levels(survey$Smoke)
# C.2 Ordenaremos los niveles de Smoke
Smoke_l<-c("Never","Occas","Regul","Heavy")
survey$Smoke<-factor(survey$Smoke, ordered = TRUE, levels= Smoke_l)
# C.3 Generemos tablas de frecuencias y de frecuencias acumuladas
tot<-table(survey$Smoke)
acu<-cumsum(tot)
# C.4 Generamos un factor para unirlo a las tablas de frecuencias
Smoke <- factor(Smoke_l, levels = Smoke_l)
# C.5 Y generamos un `data frame` con las frecuencias y el factor
tot_acu<-data.frame(tot=as.numeric(tot), acu=as.numeric(acu), Smoke)
# C.6 Grafica de las frecuencias total y acumulada para Smoke
ggplot(tot_acu, aes(x=Smoke)) +
geom_col(aes(y=tot)) +
geom_point(aes(y=acu)) +
geom_line(aes(y=acu), group=1)
######### EJERCICIOS Y TRUCOS ADICIONALES ###################################
#___Como crear una tabla de frecuencias con xtabs___#
# Las tablas generadas por `xtabs` se usan como entrada de
# Muchos calculos estadisticos y de algebra lineal
xtabs(~survey$Clap + survey$W.Hnd)
#___Tablas de 3 dimensiones con ftable___#
# `ftable` genera vistas mas compactas
# de las tablas de 3 o mas dimensiones
ftable(survey$Clap, survey$W.Hnd, survey$Sex)
#___Tablas de mosaico con el paquete `vcd`___#
#Una segunda forma de obtener graficas de mosaico es usando el paquete `vcd`
#Este paquete utiliza las tablas de contigencias generadas por `xtab`
#(puede que requieras instalar a `vcd`)
library(vcd)
clap_hand_x<-xtabs(~survey$Clap + survey$W.Hnd)
mosaic(clap_hand_x, shade=TRUE, legend=TRUE)
#Ademas con `vcd` podemos hacer graficas sobre la asociacion de variables
assoc(clap_hand_x, shade=TRUE, legend=TRUE)
#___Gráficas de Pie___#
#Gráfica de la proporción de diestros y zurdos con la función pie
pie(table(survey$W.Hnd))
#Con ggplot2
#Construir un data frame de conteos
df_clap_hand<-data.frame(table(survey$Clap, survey$W.Hnd))
colnames(df_clap_hand)<-c("Clap","W.Hnd","Freq")
#Graficar
ggplot(df_clap_hand, aes(x=1,y=Freq, fill=Clap)) +
geom_col(position="fill") +
coord_polar(theta = "y") + #Convertir a pie
facet_wrap(~ W.Hnd) + #Un pie para diestros y otro para zurdos
theme(axis.title = element_blank(), #Quitar elementos no necesarios
axis.text = element_blank(), #Quitar elementos no necesarios
axis.ticks = element_blank(), #Quitar elementos no necesarios
panel.grid.major = element_blank(), #Quitar elementos no necesarios
panel.grid.minor = element_blank(), #Quitar elementos no necesarios
panel.border = element_blank()) #Quitar elementos no necesarios