El presente documento tiene por objetivo realizar la construcción de una Base de Datos de egos y alteris (anidados) en formato long para análisis posteriores considerando ELSOC 2017 (Ola 2) -esto eventualmente puede ser extendido a ELSOC 2019- Términamos con la construcción de tablas de descriptivos y la construcción de vectores de “distancia sociodemográfica” (mismatch) de parámetros de relevancia evidenciados en el paper de Bargsted et al. (2020) para el caso chileno. Para el cálculo de esta medida, utilizaremos la base de datos longitudinal, ELSOC (ola 2), en formato R la cual puede ser descargada en el siguiente link.
Lo invitamos también a poder revisar el repositorio https://www.dataverse.harvard.edu/dataverse/coes_data_repository donde podrá encontrar disponible los datos de 2017, 2018 de la encuesta ELSOC en diversos formatos, así como también su cuestionario. En este link usted podrá también podrá encontrar las bases de datos corresponientes a otras encuestas realizadas por el centro. Para más información de COES o ELSOC, lo invitamos a revisar https://www.coes.cl/ y https://www.elsoc.cl/
Para el siguiente ejemplo usamos data egocentrada siguiendo el formato que se utiliza para manipulación de data con el paquete egor
::p_load(ggplot2,ggthemes,tidyverse,sjlabelled,sjPlot,vcd,texreg,ordinal,
pacman
nnet,MASS,mlogit,matrixStats,expss,sjlabelled,sjmisc,tidyverse,
survey,egor,haven,dplyr,stargazer,janitor,gridExtra,ggeffects,
haven,summarytools,skimr,weights,ggcorrplot,ggridges,panelr,
GLMMadaptive,survival,R.utils,questionr,car,corrplot,hrbrthemes, viridis,extrafont,JWileymisc,scales, naniar, data.table, memisc)
<-elsoc_2017 %>% dplyr:: rename(.egoID = idencuesta)
a<-elsoc_2019 %>% dplyr:: rename(.egoID = idencuesta) b
Creamos subset con data de cada uno de los alteris mencionados, manteniendo el ID de cada ego en el cual están anidados. Las columnas de cada uno de los subset deben tener los mismos nombres.
<-a %>%
alter_1::select(.egoID,
dplyralter_sexo=r13_sexo_01,
alter_edad=r13_edad_01,
alter_rel=r13_relacion_01,
alter_tiempo=r13_tiempo_01,
alter_barrio=r13_barrio_01,
alter_educ=r13_educ_01,
alter_relig=r13_relig_01,
alter_ideol=r13_ideol_01)
<-a %>%
alter_2::select(.egoID,
dplyralter_sexo=r13_sexo_02,
alter_edad=r13_edad_02,
alter_rel=r13_relacion_02,
alter_tiempo=r13_tiempo_02,
alter_barrio=r13_barrio_02,
alter_educ=r13_educ_02,
alter_relig=r13_relig_02,
alter_ideol=r13_ideol_02)
<-a %>%
alter_3::select(.egoID,
dplyralter_sexo=r13_sexo_03,
alter_edad=r13_edad_03,
alter_rel=r13_relacion_03,
alter_tiempo=r13_tiempo_03,
alter_barrio=r13_barrio_03,
alter_educ=r13_educ_03,
alter_relig=r13_relig_03,
alter_ideol=r13_ideol_03)
<- a %>%
alter_4::select(.egoID,
dplyralter_sexo=r13_sexo_04,
alter_edad=r13_edad_04,
alter_rel=r13_relacion_04,
alter_tiempo=r13_tiempo_04,
alter_barrio=r13_barrio_04,
alter_educ=r13_educ_04,
alter_relig=r13_relig_04,
alter_ideol=r13_ideol_04)
<-a %>%
alter_5::select(.egoID,
dplyralter_sexo=r13_sexo_05,
alter_edad=r13_edad_05,
alter_rel=r13_relacion_05,
alter_tiempo=r13_tiempo_05,
alter_barrio=r13_barrio_05,
alter_educ=r13_educ_05,
alter_relig=r13_relig_05,
alter_ideol=r13_ideol_05)
Creamos un vector adicional en cada subset de alteris con un número constante que identifica a que alter representa la data.
$n<-1
alter_1$n<-2
alter_2$n<-3
alter_3$n<-4
alter_4$n<-5 alter_5
Con la función rbind
agregamos la data hacia abajo en relación al orden establecido por el los vectores númericos creados anteriormente. Es necesario que todas las columnas (variables) tengan los mismos nombres. Posteriormente con la función arrange
, ordenamos la data en orden descendente en función del vector identificador de los egos (respondentes).
<-rbind(alter_1,alter_2,alter_3,alter_4,alter_5)
alteris<-arrange(alteris, .egoID) alteris
En el siguiente chunk creamos un vector identificador para cada uno de los alteris presentes en la data “alteris”. Lo identificamos como objeto tibble
y eliminamos el vector “n”.
<- rowid_to_column(alteris, var = ".altID")
alteris <- as_tibble(alteris) alteris
Recodificamos los valores de los atributos de los alteris.
$alter_educ <-factor(Recode(alteris$alter_educ ,"1=1;2:3=2;4=3;5=4;-999=NA"))
alteris$alter_relig<-factor(Recode(alteris$alter_relig,"1=1;2=2;3=3;4=4;5=5;-999=NA"))
alteris$alter_ideol<-factor(Recode(alteris$alter_ideol,"1=1;2=2;3=3;4=4;5=5;6=6;-999=NA"))
alteris$alter_edad <-factor(Recode(alteris$alter_edad ,"0:18=1;19:29=2;30:40=3;41:51=4;52:62=5;63:100=6"))
alteris$alter_sexo <-factor(Recode(alteris$alter_sexo ,"1=1;2=2"))
alteris#alteris<-na.omit(alteris)
Creamos un subset con la data de ego equivalente a la data de los alteris. Las nombramos de la misma manera.
<-a %>%
egos ::select(.egoID,
dplyrego_sexo=m0_sexo,
ego_edad=m0_edad,
ego_ideol=c15,
ego_educ=m01,
ego_relig=m38,
ego_ideol=c15)
<- as_tibble(egos) egos
Recodificamos las variables de la data de ego siguiendo el patrón de la data de alteris.
$ego_educ <-factor(Recode(egos$ego_educ,"1:3=1;4:5=2;6:7=3;8:10=4;-999:-888=NA"))
egos$ego_relig<-factor(Recode(egos$ego_relig,"1=1;2=2;9=3;7:8=4;3:6=5;-999:-888=NA"))
egos$ego_ideol<-factor(Recode(egos$ego_ideol,"9:10=1;6:8=2;5=3;2:4=4;0:1=5;11:12=6;-999:-888=NA"))
egos$ego_edad <-factor(Recode(egos$ego_edad,"18=1;19:29=2;30:40=3;41:51=4;52:62=5;63:100=6"))
egos$ego_sexo <-factor(Recode(egos$ego_sexo,"1=1;2=2")) egos
Con la función left_join
agregamos la data de alteris y egos hacia el lado, en función del id de ego.
<-left_join(alteris,egos, by=".egoID")
obs$case<-1
obs
=="-999"] <- NA
obs[obs=="-888"] <- NA obs[obs
Observamos la frecuencia de las categorias de los atributos de alteris.
<- freq(obs$alter_educ)
educ_alter show_html(educ_alter, digits= 0)
n | % | val% | |||||||
1 | 1362 | 11 | 18 | ||||||
2 | 3543 | 29 | 46 | ||||||
3 | 1042 | 8 | 14 | ||||||
4 | 1719 | 14 | 22 | ||||||
NA | 4699 | 38 | NA |
<- freq(obs$alter_relig)
relig_alter show_html(relig_alter, digits= 0)
n | % | val% | |||||||
1 | 4907 | 40 | 61 | ||||||
2 | 1407 | 11 | 17 | ||||||
3 | 1128 | 9 | 14 | ||||||
4 | 251 | 2 | 3 | ||||||
5 | 373 | 3 | 5 | ||||||
NA | 4299 | 35 | NA |
<- freq(obs$alter_ideol)
ideol_alter show_html(ideol_alter, digits= 0)
n | % | val% | |||||||
1 | 786 | 6 | 11 | ||||||
2 | 191 | 2 | 3 | ||||||
3 | 382 | 3 | 5 | ||||||
4 | 303 | 2 | 4 | ||||||
5 | 759 | 6 | 11 | ||||||
6 | 4644 | 38 | 66 | ||||||
NA | 5300 | 43 | NA |
<- freq(obs$alter_edad)
edad_alter show_html(edad_alter, digits= 0)
n | % | val% | |||||||
1 | 349 | 3 | 4 | ||||||
2 | 1477 | 12 | 18 | ||||||
3 | 1875 | 15 | 23 | ||||||
4 | 1713 | 14 | 21 | ||||||
5 | 1466 | 12 | 18 | ||||||
6 | 1186 | 10 | 15 | ||||||
NA | 4299 | 35 | NA |
<- freq(obs$alter_sexo)
sexo_alter show_html(sexo_alter, digits= 0)
n | % | val% | |||||||
1 | 3388 | 27 | 42 | ||||||
2 | 4678 | 38 | 58 | ||||||
NA | 4299 | 35 | NA |
Observamos la frecuencia de las categorias de los atributos sociodemográficos de ego.
<- freq(obs$ego_educ)
educ_ego show_html(educ_ego, digits= 0)
n | % | val% | |||||||
1 | 2985 | 24 | 24 | ||||||
2 | 5225 | 42 | 42 | ||||||
3 | 2010 | 16 | 16 | ||||||
4 | 2145 | 17 | 17 |
<- freq(obs$ego_relig)
relig_ego show_html(relig_ego, digits= 0)
n | % | val% | |||||||
1 | 6915 | 56 | 56 | ||||||
2 | 2495 | 20 | 20 | ||||||
3 | 1055 | 8 | 9 | ||||||
4 | 485 | 4 | 4 | ||||||
5 | 1380 | 11 | 11 | ||||||
NA | 35 | 0 | NA |
<- freq(obs$ego_ideol)
ideol_ego show_html(ideol_ego, digits= 0)
n | % | val% | |||||||
1 | 915 | 7 | 8 | ||||||
2 | 1090 | 9 | 9 | ||||||
3 | 2350 | 19 | 19 | ||||||
4 | 1380 | 11 | 11 | ||||||
5 | 1075 | 9 | 9 | ||||||
6 | 5400 | 44 | 44 | ||||||
NA | 155 | 1 | NA |
<- freq(obs$ego_edad)
edad_ego show_html(edad_ego, digits= 0)
n | % | val% | |||||||
1 | 10 | 0 | 0 | ||||||
2 | 1865 | 15 | 15 | ||||||
3 | 2530 | 20 | 20 | ||||||
4 | 2720 | 22 | 22 | ||||||
5 | 2870 | 23 | 23 | ||||||
6 | 2370 | 19 | 19 |
<- freq(obs$ego_sexo)
sexo_ego show_html(sexo_ego, digits= 0)
n | % | val% | |||||||
1 | 4755 | 38 | 38 | ||||||
2 | 7610 | 62 | 62 |
Creamos una tabla cruzada de las categorías educativas de Ego y alteris para observar su distribución.
<-sjPlot::tab_xtab(var.row = obs$ego_educ,
table_contvar.col = obs$alter_educ,
title = "Mixtura social por nivel educativo ELSOC 2017",
show.row.prc = TRUE)
table_cont
ego_educ | alter_educ | Total | |||
---|---|---|---|---|---|
1 | 2 | 3 | 4 | ||
1 |
570 35.3 % |
825 51.1 % |
89 5.5 % |
130 8.1 % |
1614 100 % |
2 |
622 19.2 % |
1881 58.1 % |
336 10.4 % |
397 12.3 % |
3236 100 % |
3 |
116 8.9 % |
481 36.9 % |
389 29.9 % |
316 24.3 % |
1302 100 % |
4 |
54 3.6 % |
356 23.5 % |
228 15.1 % |
876 57.9 % |
1514 100 % |
Total |
1362 17.8 % |
3543 46.2 % |
1042 13.6 % |
1719 22.4 % |
7666 100 % |
χ2=2319.426 · df=9 · Cramer’s V=0.318 · p=0.000 |
<-sjPlot::tab_xtab(var.row = obs$ego_relig,
table_cont2var.col = obs$alter_relig,
title = "Mixtura social por religión ELSOC 2017",
show.row.prc = TRUE)
table_cont2
ego_relig | alter_relig | Total | ||||
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
1 |
3541 80.6 % |
309 7 % |
367 8.4 % |
72 1.6 % |
106 2.4 % |
4395 100 % |
2 |
491 29.3 % |
903 53.9 % |
207 12.4 % |
20 1.2 % |
53 3.2 % |
1674 100 % |
3 |
251 38.9 % |
48 7.4 % |
291 45.1 % |
24 3.7 % |
31 4.8 % |
645 100 % |
4 |
166 44.7 % |
25 6.7 % |
71 19.1 % |
89 24 % |
20 5.4 % |
371 100 % |
5 |
454 46.8 % |
121 12.5 % |
188 19.4 % |
46 4.7 % |
162 16.7 % |
971 100 % |
Total |
4903 60.9 % |
1406 17.5 % |
1124 14 % |
251 3.1 % |
372 4.6 % |
8056 100 % |
χ2=3795.861 · df=16 · Cramer’s V=0.343 · p=0.000 |
<-sjPlot::tab_xtab(var.row = obs$ego_sexo,
table_cont3var.col = obs$alter_sexo,
title = "Mixtura social por sexo ELSOC 2017",
show.row.prc = TRUE)
table_cont3
ego_sexo | alter_sexo | Total | |
---|---|---|---|
1 | 2 | ||
1 |
1778 58.2 % |
1276 41.8 % |
3054 100 % |
2 |
1610 32.1 % |
3402 67.9 % |
5012 100 % |
Total |
3388 42 % |
4678 58 % |
8066 100 % |
χ2=529.419 · df=1 · φ=0.256 · p=0.000 |
<-sjPlot::tab_xtab(var.row = obs$ego_edad,
table_cont4var.col = obs$alter_edad,
title = "Mixtura social por edad ELSOC 2017",
show.row.prc = TRUE)
table_cont4
ego_edad | alter_edad | Total | |||||
---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | ||
1 |
2 28.6 % |
3 42.9 % |
0 0 % |
2 28.6 % |
0 0 % |
0 0 % |
7 100 % |
2 |
67 5.3 % |
584 46.3 % |
225 17.9 % |
160 12.7 % |
173 13.7 % |
51 4 % |
1260 100 % |
3 |
109 6.5 % |
252 15 % |
676 40.1 % |
318 18.9 % |
202 12 % |
127 7.5 % |
1684 100 % |
4 |
99 5.4 % |
282 15.5 % |
374 20.6 % |
553 30.4 % |
271 14.9 % |
240 13.2 % |
1819 100 % |
5 |
54 2.9 % |
266 14.3 % |
379 20.3 % |
364 19.5 % |
529 28.4 % |
272 14.6 % |
1864 100 % |
6 |
18 1.3 % |
90 6.3 % |
221 15.4 % |
316 22.1 % |
291 20.3 % |
496 34.6 % |
1432 100 % |
Total |
349 4.3 % |
1477 18.3 % |
1875 23.2 % |
1713 21.2 % |
1466 18.2 % |
1186 14.7 % |
8066 100 % |
χ2=1882.056 · df=25 · Cramer’s V=0.216 · Fisher’s p=0.000 |
<-sjPlot::tab_xtab(var.row = obs$ego_ideol,
table_cont5var.col = obs$alter_ideol,
title = "Mixtura social por ideol ELSOC 2017",
show.row.prc = TRUE)
table_cont5
ego_ideol | alter_ideol | Total | |||||
---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | ||
1 |
231 41.4 % |
14 2.5 % |
30 5.4 % |
20 3.6 % |
45 8.1 % |
218 39.1 % |
558 100 % |
2 |
157 22.6 % |
67 9.7 % |
59 8.5 % |
35 5 % |
45 6.5 % |
331 47.7 % |
694 100 % |
3 |
135 9.3 % |
48 3.3 % |
151 10.4 % |
69 4.8 % |
99 6.8 % |
945 65.3 % |
1447 100 % |
4 |
66 7.5 % |
19 2.2 % |
61 6.9 % |
97 11 % |
214 24.3 % |
425 48.2 % |
882 100 % |
5 |
55 8 % |
14 2 % |
25 3.6 % |
41 6 % |
252 36.7 % |
299 43.6 % |
686 100 % |
6 |
139 5.1 % |
28 1 % |
55 2 % |
40 1.5 % |
103 3.8 % |
2367 86.6 % |
2732 100 % |
Total |
783 11.2 % |
190 2.7 % |
381 5.4 % |
302 4.3 % |
758 10.8 % |
4585 65.5 % |
6999 100 % |
χ2=2204.021 · df=25 · Cramer’s V=0.251 · p=0.000 |
El siguiente código crea una tabla long para ser ploteada como un heatmap en ggplot
<-as.data.frame(prop.table(table(obs$ego_educ,obs$alter_educ)),margin=1)
tablecolnames(table)<-c("Ego_educ", "Alter_educ", "Prop")
#print(addmargins(table*100,1),3)
#table
<- ggplot(table,aes(Ego_educ, Alter_educ))+
ggeom_tile(aes(fill=Prop))+
scale_fill_gradient(low="white", high="black") +
theme_ipsum()+
scale_x_discrete(labels = c("Basica","Media","Técnica superior",
"Universitaria" ))+
scale_y_discrete(labels=c("Basica","Media","Técnica superior",
"Universitaria"))
<- g + theme( axis.ticks.y=element_blank(),
g legend.position = "left",
panel.grid.major.y=element_blank(),
plot.title = element_text(hjust = 0.5, size = 8),
axis.title = element_text(size=10),
axis.text.x = element_text(size = 8,angle = 90),
axis.text.y = element_text(size = 8))
print(g)
<-as.data.frame(prop.table(table(obs$ego_relig,obs$alter_relig)),margin=1)
table2colnames(table2)<-c("Ego_relig", "Alter_relig", "Prop")
#print(addmargins(table*100,1),3)
#table
<- ggplot(table2,aes(Ego_relig, Alter_relig))+
g2geom_tile(aes(fill=Prop))+
scale_fill_gradient(low="white", high="black") +
theme_ipsum()+
scale_x_discrete(labels = c("Catolico","Evangelico","Ninguno",
"Agnostico", "Otra" ))+
scale_y_discrete(labels=c("Catolico","Evangelico","Ninguno",
"Agnostico", "Otra"))
<- g2 + theme( axis.ticks.y=element_blank(),
g2 legend.position = "left",
panel.grid.major.y=element_blank(),
plot.title = element_text(hjust = 0.5, size = 8),
axis.title = element_text(size=10),
axis.text.x = element_text(size = 8,angle = 90),
axis.text.y = element_text(size = 8))
print (g2)
%>%
obs summarise(
mean.clo.esp = mean(alter_tiempo[alter_rel=="1"], na.rm=T),
mean.clo.hijo = mean(alter_tiempo[alter_rel=="2"], na.rm=T),
mean.clo.pari = mean(alter_tiempo[alter_rel=="3"], na.rm=T),
mean.clo.amig = mean(alter_tiempo[alter_rel=="4"], na.rm=T),
mean.clo.otro = mean(alter_tiempo[alter_rel=="5"], na.rm=T),
count.par.barr = sum((alter_rel=="3" & alter_barrio=="1"), na.rm=T))
## # A tibble: 1 x 6
## mean.clo.esp mean.clo.hijo mean.clo.pari mean.clo.amig mean.clo.otro
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4.50 4.92 4.88 4.08 3.68
## # ... with 1 more variable: count.par.barr <int>
Bargsted Valdés, M. A., Espinoza, V., & Plaza, A. (2020). Pautas de Homofilia en Chile. Papers. Revista de Sociología, 105(4), 583. https://doi.org/10.5565/rev/papers.2617
Smith, J. A., McPherson, M., & Smith-Lovin, L. (2014). Social Distance in the United States: Sex, Race, Religion, Age, and Education Homophily among Confidants, 1985 to 2004. American Sociological Review, 79(3), 432-456. https://doi.org/10.1177/0003122414531776