En el presente documento realizamos el calculo del índice EI de homofilia utilizando el paquete Egor diseñado para el entorno R (Krenz et al., 2020). Optamos por utilizar este paquete por que facilita algunos procesos de calculo y, por lo tanto, reduce lineas de código. Además, cuenta con el respaldo de haber sido diseñado por el prestigioso grupo de trabajo enfocado en el análisis de redes sociales, “Statnet” de la universidad de Washington http://statnet.org/.

Para atributos categóricos de los alter de la red ego, además de la proporción de alter similares a ego, una medida generalmente usada ha sido el índice EI (Krackhardt & Stern, 1988, Perry et al., 2018). Esta medida se define como el número de alter diferentes de ego (lazos externos E) menos el número de alter iguales a ego (lazos internos I), dividido por el número de alter. Esta es una medida “reversa” de homofilia toa vez que una medida alta de este índice índica mayor heterofilia. Además, debido a que es una transformación lineal de la medida de proporción de lazos homofilicos, su correlación es un perfecto -.1

$$ EI = {\frac {E - I}{E + I}}$$

A continuación, desarrollamos el trabajo de código. Todo el análisis es realizado con datos de la encuesta ELSOC COES, considerando las olas 2 y 4.

librerías

pacman::p_load(ggplot2,ggthemes,tidyverse,sjlabelled,sjPlot,vcd,texreg,ordinal,
               nnet,MASS,mlogit,matrixStats,expss,sjlabelled,sjmisc,tidyverse,
               survey,egor,haven,car,dplyr,stargazer,janitor,gridExtra,ggeffects,
               haven,summarytools,skimr,weights,ggcorrplot,ggridges,panelr)

Cargamos data

load("ELSOC_W02_v2.10_R.RData") # Ola 2 (2017)
load("ELSOC_W04_v1.00_R.RData") # Ola 4 (2019)

Renombrar ID

a<-elsoc_2017 %>% rename(.egoID = idencuesta)
b<-elsoc_2019 %>% rename(.egoID = idencuesta)

definir NA

a[a=="-999"] <- NA
a[a=="-888"] <- NA

b[b=="-999"] <- NA
b[b=="-888"] <- NA

Subset

2017

a1<-a %>%
dplyr::select(.egoID,r13_sexo_01, r13_sexo_02, r13_sexo_03, r13_sexo_04, r13_sexo_05,
              r13_edad_01, r13_edad_02, r13_edad_03, r13_edad_04, r13_edad_05,
              r13_relacion_01, r13_relacion_02, r13_relacion_03, r13_relacion_04,
              r13_relacion_05,
              r13_tiempo_01, r13_tiempo_02, r13_tiempo_03, r13_tiempo_04, r13_tiempo_05,
              r13_barrio_01, r13_barrio_02, r13_barrio_03, r13_barrio_04, r13_barrio_05,
              r13_educ_01, r13_educ_02, r13_educ_03, r13_educ_04, r13_educ_05,
              r13_relig_01, r13_relig_02, r13_relig_03, r13_relig_04, r13_relig_05,
              r13_ideol_01, r13_ideol_02, r13_ideol_03, r13_ideol_04, r13_ideol_05,
              r13_contacto_01, r13_contacto_02, r13_contacto_03, r13_contacto_04,
              r13_contacto_05)

2019

b1<-b%>%
dplyr::select(.egoID,r13_sexo_01, r13_sexo_02, r13_sexo_03, r13_sexo_04, r13_sexo_05,
              r13_edad_01, r13_edad_02, r13_edad_03, r13_edad_04, r13_edad_05,
              r13_relacion_01, r13_relacion_02, r13_relacion_03, r13_relacion_04, r13_relacion_05,
              r13_tiempo_01, r13_tiempo_02, r13_tiempo_03, r13_tiempo_04, r13_tiempo_05,
              r13_barrio_01, r13_barrio_02, r13_barrio_03, r13_barrio_04, r13_barrio_05,
              r13_educ_01, r13_educ_02, r13_educ_03, r13_educ_04, r13_educ_05,
              r13_relig_01, r13_relig_02, r13_relig_03, r13_relig_04, r13_relig_05,
              r13_ideol_01, r13_ideol_02, r13_ideol_03, r13_ideol_04, r13_ideol_05)

Crear data frame alteris para 2017=a1

alter_1<-a1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_01, edad=r13_edad_01, rel=r13_relacion_01,
                      tiempo=r13_tiempo_01,barrio=r13_barrio_01, educ=r13_educ_01, 
                      relig=r13_relig_01, ideol=r13_ideol_01)
#View(alter_1)
alter_2<-a1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_02, edad=r13_edad_02, rel=r13_relacion_02,
                      tiempo=r13_tiempo_02,barrio=r13_barrio_02, educ=r13_educ_02, 
                      relig=r13_relig_02, ideol=r13_ideol_02)

alter_3<-a1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_03, edad=r13_edad_03, rel=r13_relacion_03,
                      tiempo=r13_tiempo_03,barrio=r13_barrio_03, educ=r13_educ_03, 
                      relig=r13_relig_03, ideol=r13_ideol_03)

alter_4<-a1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_04, edad=r13_edad_04, rel=r13_relacion_04,
                      tiempo=r13_tiempo_04, barrio=r13_barrio_04, educ=r13_educ_04, 
                      relig=r13_relig_04, ideol=r13_ideol_04)

alter_5<-a1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_05, edad=r13_edad_05, rel=r13_relacion_05,
                      tiempo=r13_tiempo_05, barrio=r13_barrio_05, educ=r13_educ_05, 
                      relig=r13_relig_05, ideol=r13_ideol_05)

setear

alter_1$n<-1
alter_2$n<-2
alter_3$n<-3
alter_4$n<-4
alter_5$n<-5

Crear base long

alteris<-rbind(alter_1,alter_2,alter_3,alter_4,alter_5)
alteris<-arrange(alteris, .egoID)

Crear vector alter id

alteris <- rowid_to_column(alteris, var = ".altID")
alteris <- as_tibble(alteris)
alteris$n <- NULL

Recod atributos de alteris

alteris$educ <-factor(Recode(alteris$educ,"1=1;2:3=2;4=3;5=4;-999=NA"))
alteris$relig<-factor(Recode(alteris$relig,"1=1;2=2;3=3;4=4;5=5;-999=NA"))
alteris$ideol<-factor(Recode(alteris$ideol,"1=1;2=2;3=3;4=4;5=5;6=6;-999=NA"))
alteris$edad <-factor(Recode(alteris$edad,"0:18=1;19:29=2;30:40=3;41:51=4;52:62=5;63:100=6"))
alteris$sexo <-factor(Recode(alteris$sexo,"1=1;2=2"))

alteris<-na.omit(alteris)

Data Frame Ego’s

egos <-a %>%
       dplyr::select(.egoID, sexo=m0_sexo, edad=m0_edad, ideol=c15, educ=m01, 
                     relig=m38, ideol=c15)

egos <- as_tibble(egos)

Recod data Ego’s

egos$educ <-factor(Recode(egos$educ,"1:3=1;4:5=2;6:7=3;8:10=4;-999:-888=NA"))
egos$relig<-factor(Recode(egos$relig,"1=1;2=2;9=3;7:8=4;3:6=5;-999:-888=NA"))
egos$ideol<-factor(Recode(egos$ideol,"9:10=1;6:8=2;5=3;2:4=4;0:1=5;11:12=6;-999:-888=NA"))
egos$edad <-factor(Recode(egos$edad,"18=1;19:29=2;30:40=3;41:51=4;52:62=5;63:100=6"))
egos$sexo <-factor(Recode(egos$sexo,"1=1;2=2"))

Crear objeto Egor

a_ego<-egor(alters=alteris,
            egos=egos,
            ID.vars=list(ego = ".egoID",
                         alter = ".altID"))

summary(a_ego)
a_ego

Composición

composition() calcula la composición proporcional o absoluta de alteris para un atributo/variable dado. En este caso usamos la proporcional.

comp_sexo  <- composition(a_ego, "sexo",  absolute = FALSE)
comp_edad  <- composition(a_ego, "edad",  absolute = FALSE)
comp_educ  <- composition(a_ego, "educ",  absolute = FALSE)
comp_relig <- composition(a_ego, "relig", absolute = FALSE)
comp_ideol <- composition(a_ego, "ideol", absolute = FALSE)

EI

La función comp_ei () de Egor calcula los valores del índice EI (Krackhardt & Stern, 1988) como una medida para la homofilia/heterofilia ego-alter.

ei_sexo <-comp_ei(a_ego, "sexo" ,  "sexo")
#hist(ei_sexo$ei)
ei_edad <-comp_ei(a_ego, "edad" ,  "edad")
#hist(ei_edad$ei)
ei_educ <-comp_ei(a_ego, "educ" ,  "educ")
#hist(ei_educ$ei)
ei_relig<-comp_ei(a_ego, "relig", "relig")
#hist(ei_relig$ei)
ei_ideol<-comp_ei(a_ego, "ideol", "ideol")
#hist(ei_ideol$ei)

Renombrar

ei_sexo  <- rename(ei_sexo, ei_sexo = ei)
ei_edad  <- rename(ei_edad, ei_edad = ei)
ei_educ  <- rename(ei_educ, ei_educ = ei)
ei_relig <- rename(ei_relig, ei_relig = ei)
ei_ideol <- rename(ei_ideol, ei_ideol = ei)

Definir nagturaleza de vector ID

ei_sexo$.egoID <-as.numeric(ei_sexo$.egoID)
ei_edad$.egoID <-as.numeric(ei_edad$.egoID)
ei_educ$.egoID <-as.numeric(ei_educ$.egoID)
ei_relig$.egoID<-as.numeric(ei_relig$.egoID)
ei_ideol$.egoID<-as.numeric(ei_ideol$.egoID)

Agregar variables calculadas al data frame elsoc 2017

# Selección de variables
a<-dplyr::select(a, .egoID, ponderador01, m0_sexo, 
                 m0_edad, m01, r14, c08_01, c08_02, c08_03, c08_04)

# Join
a<-left_join(a,ei_sexo, by = ".egoID")
a<-left_join(a,ei_edad, by = ".egoID")
a<-left_join(a,ei_educ, by = ".egoID")
a<-left_join(a,ei_relig, by = ".egoID")
a<-left_join(a,ei_ideol, by = ".egoID")

Crear data frame alteris para 2019=b1

alter_1b<-b1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_01, edad=r13_edad_01, rel=r13_relacion_01,
                      tiempo=r13_tiempo_01,barrio=r13_barrio_01, educ=r13_educ_01, 
                      relig=r13_relig_01, ideol=r13_ideol_01)
#View(alter_1)
alter_2b<-b1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_02, edad=r13_edad_02, rel=r13_relacion_02,
                      tiempo=r13_tiempo_02,barrio=r13_barrio_02, educ=r13_educ_02, 
                      relig=r13_relig_02, ideol=r13_ideol_02)

alter_3b<-b1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_03, edad=r13_edad_03, rel=r13_relacion_03,
                      tiempo=r13_tiempo_03,barrio=r13_barrio_03, educ=r13_educ_03, 
                      relig=r13_relig_03, ideol=r13_ideol_03)

alter_4b<-b1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_04, edad=r13_edad_04, rel=r13_relacion_04,
                      tiempo=r13_tiempo_04, barrio=r13_barrio_04, educ=r13_educ_04, 
                      relig=r13_relig_04, ideol=r13_ideol_04)

alter_5b<-b1 %>%
        dplyr::select(.egoID, sexo=r13_sexo_05, edad=r13_edad_05, rel=r13_relacion_05,
                      tiempo=r13_tiempo_05, barrio=r13_barrio_05, educ=r13_educ_05, 
                      relig=r13_relig_05, ideol=r13_ideol_05)

setear

alter_1b$n<-1
alter_2b$n<-2
alter_3b$n<-3
alter_4b$n<-4
alter_5b$n<-5

Crear base long

alterisb<-rbind(alter_1b,alter_2b,alter_3b,alter_4b,alter_5b)
alterisb<-arrange(alterisb, .egoID)

Crear vector alter id

alterisb   <- rowid_to_column(alterisb, var = ".altID")
alterisb   <- as_tibble(alterisb)
alterisb$n <- NULL

Recod alteris

alterisb$educ <-factor(Recode(alterisb$educ,"1=1;2:3=2;4=3;5=4;-999=NA"))
alterisb$relig<-factor(Recode(alterisb$relig,"1=1;2=2;3=3;4=4;5=5;-999=NA"))
alterisb$ideol<-factor(Recode(alterisb$ideol,"1=1;2=2;3=3;4=4;5=5;6=6;-999=NA"))
alterisb$edad <-factor(Recode(alterisb$edad,"0:18=1;19:29=2;30:40=3;41:51=4;52:62=5;63:100=6"))
alterisb$sexo <-factor(Recode(alterisb$sexo,"1=1;2=2"))

alterisb<-na.omit(alterisb)

Data Frame Ego’s

egosb <-b %>%
       dplyr::select(.egoID, sexo=m0_sexo, edad=m0_edad, ideol=c15, educ=m01, 
                     relig=m38, ideol=c15)

egosb <- as_tibble(egosb)

Recod data Ego’s

egosb$educ <-factor(Recode(egosb$educ,"1:3=1;4:5=2;6:7=3;8:10=4;-999:-888=NA"))
egosb$relig<-factor(Recode(egosb$relig,"1=1;2=2;9=3;7:8=4;3:6=5;-999:-888=NA"))
egosb$ideol<-factor(Recode(egosb$ideol,"9:10=1;6:8=2;5=3;2:4=4;0:1=5;11:12=6;-999:-888=NA"))
egosb$edad <-factor(Recode(egosb$edad,"18=1;19:29=2;30:40=3;41:51=4;52:62=5;63:100=6"))
egosb$sexo <-factor(Recode(egosb$sexo,"1=1;2=2"))

Crear objeto Egor

a_egob<-egor(alters=alterisb,
             egos=egosb,
             ID.vars=list(ego = ".egoID",
                         alter = ".altID"))

summary(a_egob)
a_egob

Composición

La función composition() de Egor calcula la composición proporcional o absoluta de alteris para un atributo/variable dado. En este caso usamos la proporcional.

comp_sexo_b  <- composition(a_egob, "sexo",  absolute = FALSE)
comp_edad_b  <- composition(a_egob, "edad",  absolute = FALSE)
comp_educ_b  <- composition(a_egob, "educ",  absolute = FALSE)
comp_relig_b <- composition(a_egob, "relig", absolute = FALSE)
comp_ideol_b <- composition(a_egob, "ideol", absolute = FALSE)

EI

comp_ei () calcula los valores del índice EI (Krackhardt & Stern, 1988) como una medida para la homofilia/heterofilia ego-alter.

ei_sexo_b <-comp_ei(a_ego, "sexo" ,  "sexo")
#hist(ei_sexo$ei)
ei_edad_b <-comp_ei(a_ego, "edad" ,  "edad")
#hist(ei_edad$ei)
ei_educ_b <-comp_ei(a_ego, "educ" ,  "educ")
#hist(ei_educ$ei)
ei_relig_b<-comp_ei(a_ego, "relig", "relig")
#hist(ei_relig$ei)
ei_ideol_b<-comp_ei(a_ego, "ideol", "ideol")
#hist(ei_ideol$ei)

Renombrar variable

ei_sexo_b  <- rename(ei_sexo_b,   ei_sexo=ei) 
ei_edad_b  <- rename(ei_edad_b,   ei_edad=ei)
ei_educ_b  <- rename(ei_educ_b,   ei_educ=ei)
ei_relig_b <- rename(ei_relig_b, ei_relig=ei)
ei_ideol_b <- rename(ei_ideol_b, ei_ideol=ei)

Definir nagturaleza de vector ID

ei_sexo_b$.egoID <-as.numeric(ei_sexo_b$.egoID)
ei_edad_b$.egoID <-as.numeric(ei_edad_b$.egoID)
ei_educ_b$.egoID <-as.numeric(ei_educ_b$.egoID)
ei_relig_b$.egoID<-as.numeric(ei_relig_b$.egoID)
ei_ideol_b$.egoID<-as.numeric(ei_ideol_b$.egoID)

Selecionar vaariables

b<-dplyr::select(b, .egoID, ponderador01, m0_sexo, 
                 m0_edad, m01, r14, c08_01, c08_02, c08_03, c08_04)

## Join
b<-left_join(b,ei_sexo_b, by = ".egoID")
b<-left_join(b,ei_edad_b, by = ".egoID")
b<-left_join(b,ei_educ_b, by = ".egoID")
b<-left_join(b,ei_relig_b, by = ".egoID")
b<-left_join(b,ei_ideol_b, by = ".egoID")

Crear base long

a$ola<-1
b$ola<-2

elsoc_long<-rbind(a,b, make.row.names=FALSE)
elsoc_long<-arrange(elsoc_long, .egoID)
elsoc_long<-as_tibble(elsoc_long)
elsoc_long<-elsoc_long %>% rename(id = .egoID)
elsoc_long<-panel_data(elsoc_long, id = id, wave = ola)

Descriptivos elsoc long

summary(elsoc_long, by.wave = TRUE, by.id = FALSE)

plot ei sexo

elsoc_long %>% 
  ggplot(aes(x = ei_sexo), na.rm=T) + 
  geom_bar() + 
  facet_grid(~ola)  + 
  theme_minimal()

E-I sexo

plot ei educ

elsoc_long %>% 
  ggplot(aes(x = ei_educ), na.rm=T) + 
  geom_bar() + 
  facet_grid(~ola)  + 
  theme_minimal()

E-I educación

plot ei edad

elsoc_long %>% 
  ggplot(aes(x = ei_edad), na.rm=T) + 
  geom_bar() + 
  facet_grid(~ola)  + 
  theme_minimal()

E-I edad

plot ei ideol

elsoc_long %>%
  ggplot(aes(x = ei_ideol), na.rm=T) + 
  geom_bar() + 
  facet_grid(~ola)  + 
  theme_minimal()                                                                                           

E-I ideología

plot ei relig

elsoc_long %>% 
  ggplot(aes(x = ei_relig), na.rm=T) + 
  geom_bar() + 
  facet_grid(~ola)  + 
  theme_minimal()                                                                                           

EI religión

Anexo

Bivariados

ttes ei sexo

t<-wtd.t.test(x=elsoc_long$ei_sexo[elsoc_long$ola=="1"],
              y=elsoc_long$ei_sexo[elsoc_long$ola=="2"],
              weight= elsoc_long$ponderador01[elsoc_long$ola=="1"],
              weighty=elsoc_long$ponderador01[elsoc_long$ola=="2"],
              samedata=FALSE,alternative="two.tailed")
t

ttes ei edad

t<-wtd.t.test(x=elsoc_long$ei_edad[elsoc_long$ola=="1"],
              y=elsoc_long$ei_edad[elsoc_long$ola=="2"],
              weight= elsoc_long$ponderador01[elsoc_long$ola=="1"],
              weighty=elsoc_long$ponderador01[elsoc_long$ola=="2"],
              samedata=FALSE,alternative="two.tailed")
t

ttes ei educ

t<-wtd.t.test(x=elsoc_long$ei_educ[elsoc_long$ola=="1"],
              y=elsoc_long$ei_educ[elsoc_long$ola=="2"],
              weight= elsoc_long$ponderador01[elsoc_long$ola=="1"],
              weighty=elsoc_long$ponderador01[elsoc_long$ola=="2"],
              samedata=FALSE,alternative="two.tailed")
t

ttes ei ideol

t<-wtd.t.test(x=elsoc_long$ei_ideol[elsoc_long$ola=="1"],
              y=elsoc_long$ei_ideol[elsoc_long$ola=="2"],
              weight= elsoc_long$ponderador01[elsoc_long$ola=="1"],
              weighty=elsoc_long$ponderador01[elsoc_long$ola=="2"],
              samedata=FALSE,alternative="two.tailed")
t

ttes ei relig

t<-wtd.t.test(x=elsoc_long$ei_relig[elsoc_long$ola=="1"],
              y=elsoc_long$ei_relig[elsoc_long$ola=="2"],
              weight= elsoc_long$ponderador01[elsoc_long$ola=="1"],
              weighty=elsoc_long$ponderador01[elsoc_long$ola=="2"],
              samedata=FALSE,alternative="two.tailed")
t

Bibliografía

  • Krackhardt, D., & Stern, R. N. (1988). Informal networks and organizational crises: An experimental simulation. Social Psychology Quarterly, 123–140.

  • Krenz, T., Krivitsky, P. N., Vacca, R., Bojanowski, M., Gamper, M., Herz, A., & McCarty, C. (2020). egor: Import and Analyse Ego-Centered Network Data (0.20.06) [Computer software]. https://CRAN.R-project.org/package=egor

  • Perry, B. L., Pescosolido, B. A., & Borgatti, S. P. (2018). Egocentric network analysis: Foundations, methods, and models. Cambridge University Press.