pacman::p_load(ggplot2,
ggthemes,
tidyverse,
sjlabelled,
sjPlot,
car,
vcd,
texreg,
ordinal,
nnet,
MASS,
mlogit,
matrixStats,
expss,
sjlabelled,
sjmisc,
tidyverse,
weights,
survey,
viridis,
plotly)This document develops a data workflow to build a long-format database with the COES survey from waves w2 and w4. We also analyze panel data with the within-between model (Bell & Jones, 2014; Bell et al., 2019), which is well suited for hierarchical data structures, including repeated cross-sectional and panel data.
Our goal is to explore potential relationships between homophily indicators and selected measures of civic behavior. The data analysis relies on the panelr package for R, which builds on lme4. We favor panelr because it streamlines procedures and code while delivering the same results as lme4.
For categorical attributes of alters in the ego network, beyond the proportion of alters similar to ego, a commonly used measure is the EI index (Krackhardt & Stern, 1988; Perry et al., 2018). It is defined as the number of alters different from ego (external ties E) minus the number of alters similar to ego (internal ties I), divided by the total number of alters. This is a “reverse” measure of homophily because higher values indicate greater heterophily. Since it is a linear transformation of the proportion of homophilous ties, its correlation with that proportion is a perfect −1.
\[EI = \frac{E - I}{E + I}\]
The following sections walk through the code. All analyses use data from the ELSOC COES survey, waves 2 and 4. The datasets and documentation can be downloaded from this link.
Load libraries and datasets
Load data
load("../../../dat/ELSOC/ELSOC_W02_v3.00_R.RData")
load("../../../dat/ELSOC/ELSOC_W04_v2.01_R.RData")Subset 2017
# Build 2019 dataset
ego2017 <- elsoc_2017 %>%
dplyr::select(idencuesta,
sexo=m0_sexo,
sexoalter01=r13_sexo_01,
sexoalter02=r13_sexo_02,
sexoalter03=r13_sexo_03,
sexoalter04=r13_sexo_04,
sexoalter05=r13_sexo_05,
edad=m0_edad,
edadalter01=r13_edad_01,
edadalter02=r13_edad_02,
edadalter03=r13_edad_03,
edadalter04=r13_edad_04,
edadalter05=r13_edad_05,
relig=m38,
religalter01=r13_relig_01,
religalter02=r13_relig_02,
religalter03=r13_relig_03,
religalter04=r13_relig_04,
religalter05=r13_relig_05,
educ=m01,
educalter01=r13_educ_01,
educalter02=r13_educ_02,
educalter03=r13_educ_03,
educalter04=r13_educ_04,
educalter05=r13_educ_05,
ideol=c15,
ideolalter01=r13_ideol_01,
ideolalter02=r13_ideol_02,
ideolalter03=r13_ideol_03,
ideolalter04=r13_ideol_04,
ideolalter05=r13_ideol_05,
c08_01,
c08_02,
c08_03,
c08_04,
ponderador01) Inspect dataset
ego2017 <- data.frame(ego2017)
#head(ego2017)
dim(ego2017)[1] 2473 36
# Define missing values
ego2017[ego2017=="-999"] <- NA
ego2017[ego2017=="-888"] <- NARecode 2017 variables
Sex
sexolab<-c("man","woman")
ego2017$sexo_h<-factor(Recode(ego2017$sexo,"1=1;2=2;-888=NA;-999=NA"),labels=sexolab)
ego2017$alterSexo1<-factor(Recode(ego2017$sexoalter01,"1=1;2=2;-888=NA;-999=NA"),labels=sexolab)
ego2017$alterSexo2<-factor(Recode(ego2017$sexoalter02,"1=1;2=2;-888=NA;-999=NA"),labels=sexolab)
ego2017$alterSexo3<-factor(Recode(ego2017$sexoalter03,"1=1;2=2;-888=NA;-999=NA"),labels=sexolab)
ego2017$alterSexo4<-factor(Recode(ego2017$sexoalter04,"1=1;2=2;-888=NA;-999=NA"),labels=sexolab)
ego2017$alterSexo5<-factor(Recode(ego2017$sexoalter05,"1=1;2=2;-888=NA;-999=NA"),labels=sexolab)
with(ego2017, summary(cbind(alterSexo1,alterSexo2,alterSexo3,alterSexo4,alterSexo5))) alterSexo1 alterSexo2 alterSexo3 alterSexo4
Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1.000
Median :2.000 Median :2.000 Median :2.000 Median :2.000
Mean :1.617 Mean :1.583 Mean :1.552 Mean :1.546
3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.000
Max. :2.000 Max. :2.000 Max. :2.000 Max. :2.000
NA's :1 NA's :372 NA's :864 NA's :1370
alterSexo5
Min. :1.000
1st Qu.:1.000
Median :2.000
Mean :1.557
3rd Qu.:2.000
Max. :2.000
NA's :1692
Age
edadlab <- c("18-24", "25-34", "35-44", "45-54", "55-64", ">65")
ego2017$edadR<-factor(Recode(ego2017$edad,"lo:24=1;25:34=2;35:44=3;45:54=4;55:64=5;65:hi=6"),labels=edadlab)
ego2017$alterAge1<-factor(Recode(ego2017$edadalter01,"lo:24=1;25:34=2;35:44=3;45:54=4;55:64=5;65:hi=6"),labels=edadlab)
ego2017$alterAge2<-factor(Recode(ego2017$edadalter02,"lo:24=1;25:34=2;35:44=3;45:54=4;55:64=5;65:hi=6"),labels=edadlab)
ego2017$alterAge3<-factor(Recode(ego2017$edadalter03,"lo:24=1;25:34=2;35:44=3;45:54=4;55:64=5;65:hi=6"),labels=edadlab)
ego2017$alterAge4<-factor(Recode(ego2017$edadalter04,"lo:24=1;25:34=2;35:44=3;45:54=4;55:64=5;65:hi=6"),labels=edadlab)
ego2017$alterAge5<-factor(Recode(ego2017$edadalter05,"lo:24=1;25:34=2;35:44=3;45:54=4;55:64=5;65:hi=6"),labels=edadlab)
with(ego2017, summary(cbind(alterAge1,alterAge2,alterAge3,alterAge4,alterAge5))) alterAge1 alterAge2 alterAge3 alterAge4 alterAge5
Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.00
1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.00
Median :4.000 Median :3.000 Median :3.000 Median :3.000 Median :3.00
Mean :3.607 Mean :3.376 Mean :3.328 Mean :3.312 Mean :3.37
3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.00
Max. :6.000 Max. :6.000 Max. :6.000 Max. :6.000 Max. :6.00
NA's :1 NA's :372 NA's :864 NA's :1370 NA's :1692
Religion
rellab = c("Catholic","Evangelical","Other religion","non-religious")
ego2017$religid<-factor(Recode(ego2017$relig,"1=1;2=2;3:6=3;7:9=4;-999:-888=4"),labels=rellab)
ego2017$alterRelig1<-factor(Recode(ego2017$religalter01,"1=1;2=2;3:4=4;5=3;-999:-888=4"),labels=rellab)
ego2017$alterRelig2<-factor(Recode(ego2017$religalter02,"1=1;2=2;3:4=4;5=3;-999:-888=4"),labels=rellab)
ego2017$alterRelig3<-factor(Recode(ego2017$religalter03,"1=1;2=2;3:4=4;5=3;-999:-888=4"),labels=rellab)
ego2017$alterRelig4<-factor(Recode(ego2017$religalter04,"1=1;2=2;3:4=4;5=3;-999:-888=4"),labels=rellab)
ego2017$alterRelig5<-factor(Recode(ego2017$religalter05,"1=1;2=2;3:4=4;5=3;-999:-888=4"),labels=rellab)
with(ego2017, summary(cbind(alterRelig1,alterRelig2,alterRelig3,alterRelig4,alterRelig5))) alterRelig1 alterRelig2 alterRelig3 alterRelig4
Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1.000
Median :1.000 Median :1.000 Median :1.000 Median :1.000
Mean :1.747 Mean :1.762 Mean :1.836 Mean :1.784
3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.000
Max. :4.000 Max. :4.000 Max. :4.000 Max. :4.000
NA's :1 NA's :372 NA's :864 NA's :1370
alterRelig5
Min. :1.000
1st Qu.:1.000
Median :1.000
Mean :1.809
3rd Qu.:2.000
Max. :4.000
NA's :1692
Education
edulab = c("Primary", "Secondary", "Technical higher", "University higher")
ego2017$educaF<-factor(Recode(ego2017$educ,"1:3=1;4:5=2;6:7=3;8:10=4;-888=NA;-999=NA"),labels=edulab)
ego2017$alterEduca1<-factor(Recode(ego2017$educalter01,"1=1;2:3=2;4=3;5=4;-888=NA;-999=NA"),labels=edulab)
ego2017$alterEduca2<-factor(Recode(ego2017$educalter02,"1=1;2:3=2;4=3;5=4;-888=NA;-999=NA"),labels=edulab)
ego2017$alterEduca3<-factor(Recode(ego2017$educalter03,"1=1;2:3=2;4=3;5=4;-888=NA;-999=NA"),labels=edulab)
ego2017$alterEduca4<-factor(Recode(ego2017$educalter04,"1=1;2:3=2;4=3;5=4;-888=NA;-999=NA"),labels=edulab)
ego2017$alterEduca5<-factor(Recode(ego2017$educalter05,"1=1;2:3=2;4=3;5=4;-888=NA;-999=NA"),labels=edulab)
with(ego2017, summary(cbind(alterEduca1,alterEduca2,alterEduca3,alterEduca4,alterEduca5))) alterEduca1 alterEduca2 alterEduca3 alterEduca4
Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.000
Median :2.000 Median :2.000 Median :2.000 Median :2.000
Mean :2.344 Mean :2.394 Mean :2.438 Mean :2.489
3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:4.000
Max. :4.000 Max. :4.000 Max. :4.000 Max. :4.000
NA's :142 NA's :481 NA's :940 NA's :1412
alterEduca5
Min. :1.000
1st Qu.:2.000
Median :2.000
Mean :2.454
3rd Qu.:3.000
Max. :4.000
NA's :1724
Political position
pollab <- c("Left", "Center", "Right", "Independent/None", "NA")
ego2017$izqderR<-factor(Recode(ego2017$ideol,"0:3=1;4:6=2;7:10=3;11:12=4;NA=5"),labels=pollab)
ego2017$alterPospol1=factor(Recode(ego2017$ideolalter01,"1:2=3;3=2;4:5=1;6=4;NA=5"),labels=pollab)
ego2017$alterPospol2=factor(Recode(ego2017$ideolalter02,"1:2=3;3=2;4:5=1;6=4;NA=5"),labels=pollab)
ego2017$alterPospol3=factor(Recode(ego2017$ideolalter03,"1:2=3;3=2;4:5=1;6=4;NA=5"),labels=pollab)
ego2017$alterPospol4=factor(Recode(ego2017$ideolalter04,"1:2=3;3=2;4:5=1;6=4;NA=5"),labels=pollab)
ego2017$alterPospol5=factor(Recode(ego2017$ideolalter05,"1:2=3;3=2;4:5=1;6=4;NA=5"),labels=pollab)
with(ego2017,summary(cbind(alterPospol1,alterPospol2,alterPospol3,alterPospol4,alterPospol5))) alterPospol1 alterPospol2 alterPospol3 alterPospol4 alterPospol5
Min. :1.00 Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
1st Qu.:3.00 1st Qu.:3.000 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:4.000
Median :4.00 Median :4.000 Median :4.000 Median :5.000 Median :5.000
Mean :3.58 Mean :3.747 Mean :4.013 Mean :4.318 Mean :4.493
3rd Qu.:4.00 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000
Max. :5.00 Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
Network size
ego2017$tamred = as.numeric(!is.na(ego2017$sexoalter01)) +
as.numeric(!is.na(ego2017$sexoalter02)) +
as.numeric(!is.na(ego2017$sexoalter03)) +
as.numeric(!is.na(ego2017$sexoalter04)) +
as.numeric(!is.na(ego2017$sexoalter05))
print(prop.table(table(ego2017$tamred)), 2)
0 1 2 3 4 5
0.0004 0.1500 0.1989 0.2046 0.1302 0.3158
ego2017$tamred[ego2017$tamred==0] <- NA
table(ego2017$tamred)
1 2 3 4 5
371 492 506 322 781
Plot tamred
Alter political position by ego network size
ego2017$alterPospol1t<-Recode(ego2017$alterPospol1,"1:2=3;3=2;4:5=1;6:5=4")
ego2017$alterPospol2t<-Recode(ego2017$alterPospol2,"1:2=3;3=2;4:5=1;6:5=4")
ego2017$alterPospol3t<-Recode(ego2017$alterPospol3,"1:2=3;3=2;4:5=1;6:5=4")
ego2017$alterPospol4t<-Recode(ego2017$alterPospol4,"1:2=3;3=2;4:5=1;6:5=4")
ego2017$alterPospol5t<-Recode(ego2017$alterPospol5,"1:2=3;3=2;4:5=1;6:5=4")
Tpospol1=with(ego2017,table(tamred,alterPospol1t), na.rm=T)
Tpospol2=with(ego2017,table(tamred,alterPospol2t), na.rm=T)
Tpospol3=with(ego2017,table(tamred,alterPospol3t), na.rm=T)
Tpospol4=with(ego2017,table(tamred,alterPospol4t), na.rm=T)
Tpospol5=with(ego2017,table(tamred,alterPospol5t), na.rm=T)
Hpospol=Tpospol1+Tpospol2+Tpospol3+Tpospol4+Tpospol5
Hpospol=round(Hpospol, 0)
dimnames(Hpospol)=list(tamred= c("1", "2", "3", "4","5"),
alter = c("Left", "Center", "Right", "Independent/None", "NA"))
hom_tam<-as.data.frame(round(prop.table(Hpospol,1),2))# First create the ggplot
p1 <- hom_tam %>%
drop_na() %>%
ggplot(aes(x = tamred, y = Freq, fill = alter,
text = paste("Network size:", tamred,
"<br>Political position:", alter,
"<br>Proportion:", scales::percent(Freq, accuracy = 0.1)))) +
geom_bar(position = 'dodge', stat = 'identity') +
labs(title = "Alter political position",
x = "Network size",
y = "") +
scale_fill_viridis_d(alpha = 1, begin = 0, end = 1, direction = 1, option = "F") +
scale_y_continuous(limits = c(0, 1)) +
theme_light()
# Convert to plotly
ggplotly(p1, tooltip = "text")Homophily by political position
library(car)
#rec
ego2017$izqderRx<-Recode(ego2017$ideol,"0:3=1;3:6=2;7:10=3;11:12=4;-999:-888=NA")
ego2017$alterPospol1x=Recode(ego2017$ideolalter01,"1:2=3;3=2;4:5=1;6=4;-999:-888=NA")
ego2017$alterPospol2x=Recode(ego2017$ideolalter02,"1:2=3;3=2;4:5=1;6=4;-999:-888=NA")
ego2017$alterPospol3x=Recode(ego2017$ideolalter03,"1:2=3;3=2;4:5=1;6=4;-999:-888=NA")
ego2017$alterPospol4x=Recode(ego2017$ideolalter04,"1:2=3;3=2;4:5=1;6=4;-999:-888=NA")
ego2017$alterPospol5x=Recode(ego2017$ideolalter05,"1:2=3;3=2;4:5=1;6=4;-999:-888=NA")
Tpospol1=with(ego2017,table(izqderRx,alterPospol1x))
Tpospol2=with(ego2017,table(izqderRx,alterPospol2x))
Tpospol3=with(ego2017,table(izqderRx,alterPospol3x))
Tpospol4=with(ego2017,table(izqderRx,alterPospol4x))
Tpospol5=with(ego2017,table(izqderRx,alterPospol5x))
Hpospol=Tpospol1+Tpospol2+Tpospol3+Tpospol4+Tpospol5
Hpospol=round(Hpospol, 0)
dimnames(Hpospol)=list(ego=c("Left", "Center", "Right", "Independent/None"),
alter=c("Left", "Center", "Right", "Independent/None"))
round(prop.table(Hpospol,1),2) alter
ego Left Center Right Independent/None
Left 0.41 0.04 0.10 0.45
Center 0.14 0.10 0.14 0.61
Right 0.12 0.07 0.39 0.42
Independent/None 0.05 0.02 0.06 0.87
qq3<-as.data.frame(round(prop.table(Hpospol,1),2))# First create the ggplot
p2 <- qq3 %>%
ggplot(aes(x = ego, y = Freq, fill = alter,
text = paste("Ego:", ego,
"<br>Alter:", alter,
"<br>Proportion:", scales::percent(Freq, accuracy = 0.1)))) +
geom_bar(position = 'dodge', stat = 'identity') +
labs(title = "Political dyads",
x = "Ego political position",
y = "") +
scale_fill_viridis_d(alpha = 1, begin = 0, end = 1, direction = 1, option = "F") +
scale_y_continuous(limits = c(0, 1)) +
theme_light()
# Convert to plotly
ggplotly(p2, tooltip = "text")Calculating E-I homophily by political position (ELSOC 2017)
Krackhardt and Stern’s (1988) E-I Index
We classify alters as external (categories different from the ego’s) or internal (same category as the ego). Values of −1 imply perfect homophily, whereas values of +1 indicate perfect heterophily.
EI political position
ego2017$pospol_alt1_clasif<-ifelse(ego2017$izqderR==ego2017$alterPospol1,"External", "Internal")
ego2017$pospol_alt2_clasif<-ifelse(ego2017$izqderR==ego2017$alterPospol2,"External", "Internal")
ego2017$pospol_alt3_clasif<-ifelse(ego2017$izqderR==ego2017$alterPospol3,"External", "Internal")
ego2017$pospol_alt4_clasif<-ifelse(ego2017$izqderR==ego2017$alterPospol4,"External", "Internal")
ego2017$pospol_alt5_clasif<-ifelse(ego2017$izqderR==ego2017$alterPospol5,"External", "Internal")
# Add information about the tie types
ego2017$pospol_external<-count_row_if(criterion = "External",
ego2017$pospol_alt1_clasif,
ego2017$pospol_alt2_clasif,
ego2017$pospol_alt3_clasif,
ego2017$pospol_alt4_clasif,
ego2017$pospol_alt5_clasif)
ego2017$pospol_internal<-count_row_if(criterion = "Internal",
ego2017$pospol_alt1_clasif,
ego2017$pospol_alt2_clasif,
ego2017$pospol_alt3_clasif,
ego2017$pospol_alt4_clasif,
ego2017$pospol_alt5_clasif)
# Finally, calculate the EI indicator
ego2017$EI_index_pospol<-(ego2017$pospol_external-ego2017$pospol_internal)/
(ego2017$pospol_external+ego2017$pospol_internal)
summary(ego2017$EI_index_pospol) Min. 1st Qu. Median Mean 3rd Qu. Max.
-1.000 -1.000 -0.600 -0.423 -0.200 1.000
EI religion
ego2017$alterRelig1_clasif<-ifelse(ego2017$religid==ego2017$alterRelig1,"External","Internal")
ego2017$alterRelig2_clasif<-ifelse(ego2017$religid==ego2017$alterRelig2,"External","Internal")
ego2017$alterRelig3_clasif<-ifelse(ego2017$religid==ego2017$alterRelig3,"External","Internal")
ego2017$alterRelig4_clasif<-ifelse(ego2017$religid==ego2017$alterRelig4,"External","Internal")
ego2017$alterRelig5_clasif<-ifelse(ego2017$religid==ego2017$alterRelig5,"External","Internal")
# Add information about the tie types
ego2017$relig_external<-count_row_if(criterion = "External",
ego2017$alterRelig1_clasif,
ego2017$alterRelig2_clasif,
ego2017$alterRelig3_clasif,
ego2017$alterRelig4_clasif,
ego2017$alterRelig5_clasif)
ego2017$relig_internal<-count_row_if(criterion = "Internal",
ego2017$alterRelig1_clasif,
ego2017$alterRelig2_clasif,
ego2017$alterRelig3_clasif,
ego2017$alterRelig4_clasif,
ego2017$alterRelig5_clasif)
# Finally, calculate the EI indicator
ego2017$EI_index_relig<-(ego2017$relig_external-ego2017$relig_internal)/
(ego2017$relig_external+ego2017$relig_internal)
summary(ego2017$EI_index_relig) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-1.0000 -0.3333 0.6000 0.2776 1.0000 1.0000 8
EI education
ego2017$alterEduca1_clasif<-ifelse(ego2017$educaF==ego2017$alterEduca1,"External","Internal")
ego2017$alterEduca2_clasif<-ifelse(ego2017$educaF==ego2017$alterEduca2,"External","Internal")
ego2017$alterEduca3_clasif<-ifelse(ego2017$educaF==ego2017$alterEduca3,"External","Internal")
ego2017$alterEduca4_clasif<-ifelse(ego2017$educaF==ego2017$alterEduca4,"External","Internal")
ego2017$alterEduca5_clasif<-ifelse(ego2017$educaF==ego2017$alterEduca5,"External","Internal")
# Add information about the tie types
ego2017$educ_external<-count_row_if(criterion = "External",
ego2017$alterEduca1_clasif,
ego2017$alterEduca2_clasif,
ego2017$alterEduca3_clasif,
ego2017$alterEduca4_clasif,
ego2017$alterEduca5_clasif)
ego2017$educ_internal<-count_row_if(criterion = "Internal",
ego2017$alterEduca1_clasif,
ego2017$alterEduca2_clasif,
ego2017$alterEduca3_clasif,
ego2017$alterEduca4_clasif,
ego2017$alterEduca5_clasif)
# Finally, calculate the EI indicator
ego2017$EI_index_educ<-(ego2017$educ_external-ego2017$educ_internal)/
(ego2017$educ_external+ego2017$educ_internal)
summary(ego2017$EI_index_educ) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-1.00000 -1.00000 0.00000 -0.03621 0.60000 1.00000 59
EI sex
ego2017$alterSexo1_clasif<-ifelse(ego2017$sexo_h==ego2017$alterSexo1,"External","Internal")
ego2017$alterSexo2_clasif<-ifelse(ego2017$sexo_h==ego2017$alterSexo2,"External","Internal")
ego2017$alterSexo3_clasif<-ifelse(ego2017$sexo_h==ego2017$alterSexo3,"External","Internal")
ego2017$alterSexo4_clasif<-ifelse(ego2017$sexo_h==ego2017$alterSexo4,"External","Internal")
ego2017$alterSexo5_clasif<-ifelse(ego2017$sexo_h==ego2017$alterSexo5,"External","Internal")
# Add information about the tie types
ego2017$sexo_external<-count_row_if(criterion = "External",
ego2017$alterSexo1_clasif,
ego2017$alterSexo2_clasif,
ego2017$alterSexo3_clasif,
ego2017$alterSexo4_clasif,
ego2017$alterSexo5_clasif)
ego2017$sexo_internal<-count_row_if(criterion = "Internal",
ego2017$alterSexo1_clasif,
ego2017$alterSexo2_clasif,
ego2017$alterSexo3_clasif,
ego2017$alterSexo4_clasif,
ego2017$alterSexo5_clasif)
# Finally, calculate the EI indicator
ego2017$EI_index_sexo<-(ego2017$sexo_external-ego2017$sexo_internal)/
(ego2017$sexo_external+ego2017$sexo_internal)
summary(ego2017$EI_index_sexo) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-1.0000 -0.2000 0.3333 0.2583 1.0000 1.0000 1
EI age
ego2017$alterAge1_clasif<-ifelse(ego2017$edadR==ego2017$alterAge1,"External","Internal")
ego2017$alterAge2_clasif<-ifelse(ego2017$edadR==ego2017$alterAge2,"External","Internal")
ego2017$alterAge3_clasif<-ifelse(ego2017$edadR==ego2017$alterAge3,"External","Internal")
ego2017$alterAge4_clasif<-ifelse(ego2017$edadR==ego2017$alterAge4,"External","Internal")
ego2017$alterAge5_clasif<-ifelse(ego2017$edadR==ego2017$alterAge5,"External","Internal")
# Add information about the tie types
ego2017$age_external<-count_row_if(criterion = "External",
ego2017$alterAge1_clasif,
ego2017$alterAge2_clasif,
ego2017$alterAge3_clasif,
ego2017$alterAge4_clasif,
ego2017$alterAge5_clasif)
ego2017$age_internal<-count_row_if(criterion = "Internal",
ego2017$alterAge1_clasif,
ego2017$alterAge2_clasif,
ego2017$alterAge3_clasif,
ego2017$alterAge4_clasif,
ego2017$alterAge5_clasif)
# Finally, calculate the EI indicator
ego2017$EI_index_age<-(abs(ego2017$age_external-ego2017$age_internal)/
(ego2017$age_external+ego2017$age_internal))
summary(ego2017$EI_index_age) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.0000 0.3333 0.6000 0.6177 1.0000 1.0000 1
# Verifica que la variable existe
names(ego2017) # Should display EI_index_pospol in the list [1] "idencuesta" "sexo" "sexoalter01"
[4] "sexoalter02" "sexoalter03" "sexoalter04"
[7] "sexoalter05" "edad" "edadalter01"
[10] "edadalter02" "edadalter03" "edadalter04"
[13] "edadalter05" "relig" "religalter01"
[16] "religalter02" "religalter03" "religalter04"
[19] "religalter05" "educ" "educalter01"
[22] "educalter02" "educalter03" "educalter04"
[25] "educalter05" "ideol" "ideolalter01"
[28] "ideolalter02" "ideolalter03" "ideolalter04"
[31] "ideolalter05" "c08_01" "c08_02"
[34] "c08_03" "c08_04" "ponderador01"
[37] "sexo_h" "alterSexo1" "alterSexo2"
[40] "alterSexo3" "alterSexo4" "alterSexo5"
[43] "edadR" "alterAge1" "alterAge2"
[46] "alterAge3" "alterAge4" "alterAge5"
[49] "religid" "alterRelig1" "alterRelig2"
[52] "alterRelig3" "alterRelig4" "alterRelig5"
[55] "educaF" "alterEduca1" "alterEduca2"
[58] "alterEduca3" "alterEduca4" "alterEduca5"
[61] "izqderR" "alterPospol1" "alterPospol2"
[64] "alterPospol3" "alterPospol4" "alterPospol5"
[67] "tamred" "alterPospol1t" "alterPospol2t"
[70] "alterPospol3t" "alterPospol4t" "alterPospol5t"
[73] "izqderRx" "alterPospol1x" "alterPospol2x"
[76] "alterPospol3x" "alterPospol4x" "alterPospol5x"
[79] "pospol_alt1_clasif" "pospol_alt2_clasif" "pospol_alt3_clasif"
[82] "pospol_alt4_clasif" "pospol_alt5_clasif" "pospol_external"
[85] "pospol_internal" "EI_index_pospol" "alterRelig1_clasif"
[88] "alterRelig2_clasif" "alterRelig3_clasif" "alterRelig4_clasif"
[91] "alterRelig5_clasif" "relig_external" "relig_internal"
[94] "EI_index_relig" "alterEduca1_clasif" "alterEduca2_clasif"
[97] "alterEduca3_clasif" "alterEduca4_clasif" "alterEduca5_clasif"
[100] "educ_external" "educ_internal" "EI_index_educ"
[103] "alterSexo1_clasif" "alterSexo2_clasif" "alterSexo3_clasif"
[106] "alterSexo4_clasif" "alterSexo5_clasif" "sexo_external"
[109] "sexo_internal" "EI_index_sexo" "alterAge1_clasif"
[112] "alterAge2_clasif" "alterAge3_clasif" "alterAge4_clasif"
[115] "alterAge5_clasif" "age_external" "age_internal"
[118] "EI_index_age"
summary(ego2017$EI_index_pospol) # Should display the statistical summary Min. 1st Qu. Median Mean 3rd Qu. Max.
-1.000 -1.000 -0.600 -0.423 -0.200 1.000
# Revised plot with viridis
p3 <- ggplot(data = ego2017,
aes(x = EI_index_pospol)) +
geom_histogram(aes(y = after_stat(count),
fill = after_stat(count), # Add fill within aes()
text = paste("E-I index:", round(x, 3),
"<br>Frequency:", after_stat(count))),
binwidth = 0.1) +
scale_fill_viridis_c(alpha = 1, # Use scale_fill_viridis_c() for continuous data
begin = 0,
end = 1,
direction = 1,
option = "F",
guide = FALSE) + # Remove the legend
labs(title = "Political homophily in personal networks",
subtitle = "E-I homophily (Krackhardt & Stern, 1988)",
caption = "Source: ELSOC COES 2017",
x = "",
y = "") +
theme_light()
# Convert to plotly
ggplotly(p3, tooltip = "text")References
- Krackhardt, D., & Stern, R. N. (1988). Informal networks and organizational crises: An experimental simulation. Social Psychology Quarterly, 123–140.