################################################# # # # Supplementary file for: # # # # Reconsidering the Relationship between # # Anti-Immigration Attitudes and Preferences # # for the AfD Using Implicit Attitudes Measures # # # # by Manuel Kleinert # # # # published in Politische Vierteljahresschrift # # # ################################################# #This files analyses the PAIED data set. It depends on previous #execution of the "prepare_PAIED_data.R" script file and loads the #resulted file "iat.Rdata" at the beginning. #The subsequent file is structured by the Tables and Graphs in the #main publication. library(tidyverse) library(summarytools) library(dplyr) library(broom) library(ggplot2) library(hrbrthemes) library(viridis) library(psych) library(corrplot) library(sjPlot) library(sjmisc) library(sjlabelled) library(misty) library(forestplot) library(lavaan) load(file = ".../iat.Rdata") #descriptives and further preparation#### #optional descriptives freq(iat$edu) freq(iat$work) freq(iat$sym_csu) descr(iat$time_sum) corr_matrix_iat <- cor(select(iat, -c("date","feedback","quota")), use = "complete.obs", method = "pearson") corrplot(corr_matrix_iat, method = 'number') #cronbach alpha as reported in the main text alpha(subset(iat, select = c(mig_eco, mig_cul, mig_cri, mig_com))) #CFA as reported in the online appendix mod_cfa <- "mig_ex_cfa =~ mig_eco + mig_cul + mig_cri + mig_com" fit_cfa <- cfa(mod_cfa, data=iat) summary(fit_cfa, standardized=T, fit.measures=T, rsquare=T) #generate standardized variables for comparison vars <- c("afd_ex","afd_im","mig_im","mig_ex") iat_scaled <- as.data.frame(lapply(iat[, vars], scale)) colnames(iat_scaled) <- c("afd_ex_s","afd_im_s","mig_ex_s","mig_im_s") iat <- cbind(iat, iat_scaled) iat_scaled <- cbind(iat_scaled, subset(iat, select = c("age", "gender", "edu", "work"))) iat_ex <- as.data.frame(subset(iat_scaled, select = c("afd_ex_s","mig_ex_s", "age", "gender", "edu", "work"))) colnames(iat_ex) <- c("afd","mig","age", "gender", "edu", "work") iat_ex$method <- "explicit" iat_im <- as.data.frame(subset(iat_scaled, select = c("afd_im_s","mig_im_s", "age", "gender", "edu", "work"))) colnames(iat_im) <- c("afd","mig","age", "gender", "edu", "work") iat_im$method <- "implicit" iat_exim <- rbind(iat_ex, iat_im) #Table 1, create subgroups as described #### iat$persID <- rownames(iat) iat_a <- iat iat_b <- iat iat_c <- iat iat_d <- iat #group A is AfD explicit, Mig explicit iat_a$group <- "a" iat_a$afd <- iat_a$afd_ex iat_a$mig <- iat_a$mig_ex #group B is AfD explicit, Mig implicit iat_b$group <- "b" iat_b$afd <- iat_b$afd_ex iat_b$mig <- iat_b$mig_im #group C is AfD implicit, mig explicit iat_c$group <- "c" iat_c$afd <- iat_c$afd_im iat_c$mig <- iat_c$mig_ex #group D is AfD implicit, mig implicit iat_d$group <- "d" iat_d$afd <- iat_d$afd_im iat_d$mig <- iat_d$mig_im #combine groups in one data set iat <- rbind(iat_a, iat_b, iat_c, iat_d) #create group dummy variables iat$group_a <- 0 iat$group_a[iat$group == "a"] <- 1 iat$group_b <- 0 iat$group_b[iat$group == "b"] <- 1 iat$group_c <- 0 iat$group_c[iat$group == "c"] <- 1 iat$group_d <- 0 iat$group_d[iat$group == "d"] <- 1 #Figure 1, descriptive density plots#### descr(iat$mig_im_s) descr(iat$mig_ex_s) descr(iat$afd_im_s) descr(iat$afd_ex_s) #plot density for implicit and explicit afd and mig p1 <- ggplot(data=iat_exim, aes(x=afd, group=method, fill=method)) + geom_density(adjust=1.5, alpha=.4) + xlab("AfD Sympathy") + ylab("Density") + scale_fill_discrete(name = "Method") + theme_ipsum() p1 p2 <- ggplot(data=iat_exim, aes(x=mig, group=method, fill=method)) + geom_density(adjust=1.5, alpha=.4) + xlab("Anti-immigration attitudes") + ylab("Density") + scale_fill_discrete(name = "Method") + theme_ipsum() p2 #Figure 2, generate forestplots for education#### afd_all_fp <- ci.mean(iat_exim$afd, group = iat_exim$method) mig_all_fp <- ci.mean(iat_exim$mig, group = iat_exim$method) afd_fp <- ci.mean(iat_exim$afd, group = iat_exim$edu, split = iat_exim$method) mig_fp <- ci.mean(iat_exim$mig, group = iat_exim$edu, split = iat_exim$method) afd_ex_fp <- afd_fp$result$explicit afd_im_fp <- afd_fp$result$implicit mig_ex_fp <- mig_fp$result$explicit mig_im_fp <- mig_fp$result$implicit #afd_ex_fp afd_ex_fp$pNA <- NULL afd_ex_fp$nNA <- NULL afd_ex_fp$variable <- NULL afd_ex_fp$sd <- round(afd_ex_fp$sd, digits = 2) afd_ex_fp$group[afd_ex_fp$group == 3] <- "1 - elementary or lower secondary" afd_ex_fp$group[afd_ex_fp$group == 4] <- "2 - medium secondary" afd_ex_fp$group[afd_ex_fp$group == 5] <- "3 - completed apprenticeship" afd_ex_fp$group[afd_ex_fp$group == 6] <- "4 - technical college entrance qualification" afd_ex_fp$group[afd_ex_fp$group == 7] <- "5 - upper secondary" afd_ex_fp$group[afd_ex_fp$group == 8] <- "6 - college/university degree" colnames(afd_ex_fp) <- c("group","n","mean","sd","lower","upper") afd_all_fp plot_afd_edu_ex <- afd_ex_fp |> forestplot(labeltext = c(group, n, sd), title = "AfD-Sympathy by Education - Explicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Education Level"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_afd_edu_ex.png", units = c("px"), width = 700, height = 400, pointsize = 14) plot(plot_afd_edu_ex) dev.off() #afd_im_fp afd_im_fp$pNA <- NULL afd_im_fp$nNA <- NULL afd_im_fp$variable <- NULL afd_im_fp$sd <- round(afd_im_fp$sd, digits = 2) afd_im_fp$group[afd_im_fp$group == 3] <- "1 - elementary or lower secondary" afd_im_fp$group[afd_im_fp$group == 4] <- "2 - medium secondary" afd_im_fp$group[afd_im_fp$group == 5] <- "3 - completed apprenticeship" afd_im_fp$group[afd_im_fp$group == 6] <- "4 - technical college entrance qualification" afd_im_fp$group[afd_im_fp$group == 7] <- "5 - upper secondary" afd_im_fp$group[afd_im_fp$group == 8] <- "6 - college/university degree" colnames(afd_im_fp) <- c("group","n","mean","sd","lower","upper") afd_all_fp plot_afd_edu_im <- afd_im_fp |> forestplot(labeltext = c(group, n, sd), title = " Implicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Education Level"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_afd_edu_im.png", units = c("px"), width = 700, height = 400, pointsize = 14) plot(plot_afd_edu_im) dev.off() #mig_ex_fp mig_ex_fp$pNA <- NULL mig_ex_fp$nNA <- NULL mig_ex_fp$variable <- NULL mig_ex_fp$sd <- round(mig_ex_fp$sd, digits = 2) mig_ex_fp$group[mig_ex_fp$group == 3] <- "1 - elementary or lower secondary" mig_ex_fp$group[mig_ex_fp$group == 4] <- "2 - medium secondary" mig_ex_fp$group[mig_ex_fp$group == 5] <- "3 - completed apprenticeship" mig_ex_fp$group[mig_ex_fp$group == 6] <- "4 - technical college entrance qualification" mig_ex_fp$group[mig_ex_fp$group == 7] <- "5 - upper secondary" mig_ex_fp$group[mig_ex_fp$group == 8] <- "6 - college/university degree" colnames(mig_ex_fp) <- c("group","n","mean","sd","lower","upper") mig_all_fp plot_mig_edu_ex <- mig_ex_fp |> forestplot(labeltext = c(group, n, sd), title = "Anti-immigration attitudes by Education - Explicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Education Level"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_mig_edu_ex.png", units = c("px"), width = 700, height = 400, pointsize = 14) plot(plot_mig_edu_ex) dev.off() #mig_im_fp mig_im_fp$pNA <- NULL mig_im_fp$nNA <- NULL mig_im_fp$variable <- NULL mig_im_fp$sd <- round(mig_im_fp$sd, digits = 2) mig_im_fp$group[mig_im_fp$group == 3] <- "1 - elementary or lower secondary" mig_im_fp$group[mig_im_fp$group == 4] <- "2 - medium secondary" mig_im_fp$group[mig_im_fp$group == 5] <- "3 - completed apprenticeship" mig_im_fp$group[mig_im_fp$group == 6] <- "4 - technical college entrance qualification" mig_im_fp$group[mig_im_fp$group == 7] <- "5 - upper secondary" mig_im_fp$group[mig_im_fp$group == 8] <- "6 - college/university degree" colnames(mig_im_fp) <- c("group","n","mean","sd","lower","upper") mig_all_fp plot_mig_edu_im <- mig_im_fp |> forestplot(labeltext = c(group, n, sd), title = c(" Implicit"), clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Education Level"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_mig_edu_im.png", units = c("px"), width = 700, height = 400, pointsize = 14) plot(plot_mig_edu_im) dev.off() #Figure 2, generate forestplots for age#### afd_all_fp <- ci.mean(iat_exim$afd, group = iat_exim$method) mig_all_fp <- ci.mean(iat_exim$mig, group = iat_exim$method) afd_fp <- ci.mean(iat_exim$afd, group = iat_exim$age, split = iat_exim$method) mig_fp <- ci.mean(iat_exim$mig, group = iat_exim$age, split = iat_exim$method) afd_ex_fp <- afd_fp$result$explicit afd_im_fp <- afd_fp$result$implicit mig_ex_fp <- mig_fp$result$explicit mig_im_fp <- mig_fp$result$implicit #afd_ex_fp afd_ex_fp$pNA <- NULL afd_ex_fp$nNA <- NULL afd_ex_fp$variable <- NULL afd_ex_fp$sd <- round(afd_ex_fp$sd, digits = 2) afd_ex_fp$group[afd_ex_fp$group == 2] <- "18-29 years" afd_ex_fp$group[afd_ex_fp$group == 3] <- "30-39 years" afd_ex_fp$group[afd_ex_fp$group == 4] <- "40-49 years" afd_ex_fp$group[afd_ex_fp$group == 5] <- "50-59 years" afd_ex_fp$group[afd_ex_fp$group == 6] <- "60-69 years" afd_ex_fp$group[afd_ex_fp$group == 7] <- "70 and older" colnames(afd_ex_fp) <- c("group","n","mean","sd","lower","upper") afd_all_fp plot_afd_age_ex <- afd_ex_fp |> forestplot(labeltext = c(group, n, sd), title = "AfD-Sympathy by Age Groups - Explicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Age Groups"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_afd_age_ex.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_afd_age_ex) dev.off() #afd_im_fp afd_im_fp$pNA <- NULL afd_im_fp$nNA <- NULL afd_im_fp$variable <- NULL afd_im_fp$sd <- round(afd_im_fp$sd, digits = 2) afd_im_fp$group[afd_im_fp$group == 2] <- "18-29 years" afd_im_fp$group[afd_im_fp$group == 3] <- "30-39 years" afd_im_fp$group[afd_im_fp$group == 4] <- "40-49 years" afd_im_fp$group[afd_im_fp$group == 5] <- "50-59 years" afd_im_fp$group[afd_im_fp$group == 6] <- "60-69 years" afd_im_fp$group[afd_im_fp$group == 7] <- "70 and older" colnames(afd_im_fp) <- c("group","n","mean","sd","lower","upper") afd_all_fp plot_afd_age_im <- afd_im_fp |> forestplot(labeltext = c(group, n, sd), title = " Implicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Age Groups"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_afd_age_im.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_afd_age_im) dev.off() #mig_ex_fp mig_ex_fp$pNA <- NULL mig_ex_fp$nNA <- NULL mig_ex_fp$variable <- NULL mig_ex_fp$sd <- round(mig_ex_fp$sd, digits = 2) mig_ex_fp$group[mig_ex_fp$group == 2] <- "18-29 years" mig_ex_fp$group[mig_ex_fp$group == 3] <- "30-39 years" mig_ex_fp$group[mig_ex_fp$group == 4] <- "40-49 years" mig_ex_fp$group[mig_ex_fp$group == 5] <- "50-59 years" mig_ex_fp$group[mig_ex_fp$group == 6] <- "60-69 years" mig_ex_fp$group[mig_ex_fp$group == 7] <- "70 and older" colnames(mig_ex_fp) <- c("group","n","mean","sd","lower","upper") mig_all_fp plot_mig_age_ex <- mig_ex_fp |> forestplot(labeltext = c(group, n, sd), title = "Anti-immigration attitudes by Age Groups - Explicit", clip = c(-.5, .5))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Age Groups"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_mig_age_ex.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_mig_age_ex) dev.off() #mig_im_fp mig_im_fp$pNA <- NULL mig_im_fp$nNA <- NULL mig_im_fp$variable <- NULL mig_im_fp$sd <- round(mig_im_fp$sd, digits = 2) mig_im_fp$group[mig_im_fp$group == 2] <- "18-29 years" mig_im_fp$group[mig_im_fp$group == 3] <- "30-39 years" mig_im_fp$group[mig_im_fp$group == 4] <- "40-49 years" mig_im_fp$group[mig_im_fp$group == 5] <- "50-59 years" mig_im_fp$group[mig_im_fp$group == 6] <- "60-69 years" mig_im_fp$group[mig_im_fp$group == 7] <- "70 and older" colnames(mig_im_fp) <- c("group","n","mean","sd","lower","upper") mig_all_fp plot_mig_age_im <- mig_im_fp |> forestplot(labeltext = c(group, n, sd), title = " Implicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Age Groups"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_mig_age_im.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_mig_age_im) dev.off() #Figure A2, generate forestplots for gender#### afd_all_fp <- ci.mean(iat_exim$afd, group = iat_exim$method) mig_all_fp <- ci.mean(iat_exim$mig, group = iat_exim$method) afd_fp <- ci.mean(iat_exim$afd, group = iat_exim$gender, split = iat_exim$method) mig_fp <- ci.mean(iat_exim$mig, group = iat_exim$gender, split = iat_exim$method) afd_ex_fp <- afd_fp$result$explicit afd_im_fp <- afd_fp$result$implicit mig_ex_fp <- mig_fp$result$explicit mig_im_fp <- mig_fp$result$implicit #afd_ex_fp afd_ex_fp$pNA <- NULL afd_ex_fp$nNA <- NULL afd_ex_fp$variable <- NULL afd_ex_fp$sd <- round(afd_ex_fp$sd, digits = 2) afd_ex_fp$group[afd_ex_fp$group == 1] <- "Male" afd_ex_fp$group[afd_ex_fp$group == 2] <- "Female" colnames(afd_ex_fp) <- c("group","n","mean","sd","lower","upper") afd_all_fp plot_afd_gender_ex <- afd_ex_fp |> forestplot(labeltext = c(group, n, sd), title = "AfD-Sympathy by Gender - Explicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Gender"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_afd_gender_ex.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_afd_gender_ex) dev.off() #afd_im_fp afd_im_fp$pNA <- NULL afd_im_fp$nNA <- NULL afd_im_fp$variable <- NULL afd_im_fp$sd <- round(afd_im_fp$sd, digits = 2) afd_im_fp$group[afd_im_fp$group == 1] <- "Male" afd_im_fp$group[afd_im_fp$group == 2] <- "Female" colnames(afd_im_fp) <- c("group","n","mean","sd","lower","upper") afd_all_fp plot_afd_gender_im <- afd_im_fp |> forestplot(labeltext = c(group, n, sd), title = " Implicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Gender"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_afd_gender_im.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_afd_gender_im) dev.off() #mig_ex_fp mig_ex_fp$pNA <- NULL mig_ex_fp$nNA <- NULL mig_ex_fp$variable <- NULL mig_ex_fp$sd <- round(mig_ex_fp$sd, digits = 2) mig_ex_fp$group[mig_ex_fp$group == 1] <- "Male" mig_ex_fp$group[mig_ex_fp$group == 2] <- "Female" colnames(mig_ex_fp) <- c("group","n","mean","sd","lower","upper") mig_all_fp plot_mig_gender_ex <- mig_ex_fp |> forestplot(labeltext = c(group, n, sd), title = "Anti-immigration attitudes by Gender - Explicit", clip = c(-.5, .5))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Gender"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_mig_gender_ex.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_mig_gender_ex) dev.off() #mig_im_fp mig_im_fp$pNA <- NULL mig_im_fp$nNA <- NULL mig_im_fp$variable <- NULL mig_im_fp$sd <- round(mig_im_fp$sd, digits = 2) mig_im_fp$group[mig_im_fp$group == 1] <- "Male" mig_im_fp$group[mig_im_fp$group == 2] <- "Female" colnames(mig_im_fp) <- c("group","n","mean","sd","lower","upper") mig_all_fp plot_mig_gender_im <- mig_im_fp |> forestplot(labeltext = c(group, n, sd), title = " Implicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("Gender"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_mig_gender_im.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_mig_gender_im) dev.off() #Figure A2, generate forestplots for working status#### afd_all_fp <- ci.mean(iat_exim$afd, group = iat_exim$method) mig_all_fp <- ci.mean(iat_exim$mig, group = iat_exim$method) afd_fp <- ci.mean(iat_exim$afd, group = iat_exim$work, split = iat_exim$method) mig_fp <- ci.mean(iat_exim$mig, group = iat_exim$work, split = iat_exim$method) afd_ex_fp <- afd_fp$result$explicit afd_im_fp <- afd_fp$result$implicit mig_ex_fp <- mig_fp$result$explicit mig_im_fp <- mig_fp$result$implicit #afd_ex_fp afd_ex_fp$pNA <- NULL afd_ex_fp$nNA <- NULL afd_ex_fp$variable <- NULL afd_ex_fp$sd <- round(afd_ex_fp$sd, digits = 2) afd_ex_fp$group[afd_ex_fp$group == 0] <- "Not working" afd_ex_fp$group[afd_ex_fp$group == 1] <- "Working" colnames(afd_ex_fp) <- c("group","n","mean","sd","lower","upper") afd_all_fp plot_afd_work_ex <- afd_ex_fp |> forestplot(labeltext = c(group, n, sd), title = "AfD-Sympathy by working status - Explicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("work"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_afd_work_ex.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_afd_work_ex) dev.off() #afd_im_fp afd_im_fp$pNA <- NULL afd_im_fp$nNA <- NULL afd_im_fp$variable <- NULL afd_im_fp$sd <- round(afd_im_fp$sd, digits = 2) afd_im_fp$group[afd_im_fp$group == 0] <- "Not working" afd_im_fp$group[afd_im_fp$group == 1] <- "Working" colnames(afd_im_fp) <- c("group","n","mean","sd","lower","upper") afd_all_fp plot_afd_work_im <- afd_im_fp |> forestplot(labeltext = c(group, n, sd), title = " Implicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("work"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_afd_work_im.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_afd_work_im) dev.off() #mig_ex_fp mig_ex_fp$pNA <- NULL mig_ex_fp$nNA <- NULL mig_ex_fp$variable <- NULL mig_ex_fp$sd <- round(mig_ex_fp$sd, digits = 2) mig_ex_fp$group[mig_ex_fp$group == 0] <- "Not working" mig_ex_fp$group[mig_ex_fp$group == 1] <- "Working" colnames(mig_ex_fp) <- c("group","n","mean","sd","lower","upper") mig_all_fp plot_mig_work_ex <- mig_ex_fp |> forestplot(labeltext = c(group, n, sd), title = "Anti-immigration attitudes by working status - Explicit", clip = c(-.5, .5))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("work"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_mig_work_ex.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_mig_work_ex) dev.off() #mig_im_fp mig_im_fp$pNA <- NULL mig_im_fp$nNA <- NULL mig_im_fp$variable <- NULL mig_im_fp$sd <- round(mig_im_fp$sd, digits = 2) mig_im_fp$group[mig_im_fp$group == 0] <- "Not working" mig_im_fp$group[mig_im_fp$group == 1] <- "Working" colnames(mig_im_fp) <- c("group","n","mean","sd","lower","upper") mig_all_fp plot_mig_work_im <- mig_im_fp |> forestplot(labeltext = c(group, n, sd), title = " Implicit", clip = c(-1, 1))|> fp_set_style(box = "darkblue", line = "darkblue", summary = "darkblue") |> fp_add_header(group = c("work"), n = c("N"), sd = c("SD"))|> fp_add_lines("steelblue") |> fp_append_row(mean = 0, lower = -0.1, upper = 0.1, group = "Overall", n = "369", sd = "1.0", is.summary = TRUE) |> fp_set_zebra_style("#EFEFEF") png("plot_mig_work_im.png", units = c("px"), width = 600, height = 400, pointsize = 14) plot(plot_mig_work_im) dev.off() #Table 2, multivariate analysis by group#### iat_a <- subset(iat_a, select = c("afd", "mig","age","gender","edu","work")) iat_b <- subset(iat_b, select = c("afd", "mig","age","gender","edu","work")) iat_c <- subset(iat_c, select = c("afd", "mig","age","gender","edu","work")) iat_d <- subset(iat_d, select = c("afd", "mig","age","gender","edu","work")) iat_a_scaled <- as.data.frame(lapply(iat_a, scale)) iat_b_scaled <- as.data.frame(lapply(iat_b, scale)) iat_c_scaled <- as.data.frame(lapply(iat_c, scale)) iat_d_scaled <- as.data.frame(lapply(iat_d, scale)) mod_a <- lm(afd ~ mig + age + gender + edu + work, data = iat_a_scaled) summary(mod_a) mod_b <- lm(afd ~ mig + age + gender + edu + work, data = iat_b_scaled) summary(mod_b) mod_c <- lm(afd ~ mig + age + gender + edu + work, data = iat_c_scaled) summary(mod_c) mod_d <- lm(afd ~ mig + age + gender + edu + work, data = iat_d_scaled) summary(mod_d) #Table 3, multi-group analysis#### iat_a_scaled$group <- c("A") iat_b_scaled$group <- c("B") iat_c_scaled$group <- c("C") iat_d_scaled$group <- c("D") iat_a_scaled$group_b <- 0 iat_a_scaled$group_c <- 0 iat_a_scaled$group_d <- 0 iat_b_scaled$group_b <- 1 iat_b_scaled$group_c <- 0 iat_b_scaled$group_d <- 0 iat_c_scaled$group_b <- 0 iat_c_scaled$group_c <- 1 iat_c_scaled$group_d <- 0 iat_d_scaled$group_b <- 0 iat_d_scaled$group_c <- 0 iat_d_scaled$group_d <- 1 iat_scaled <- rbind(iat_a_scaled,iat_b_scaled, iat_c_scaled, iat_d_scaled) mod_final <- lm(afd ~ mig + group_b + group_c + group_d + mig:group_b + mig:group_c + mig:group_d + age + gender + edu + work, data = iat_scaled) summary(mod_final) descr(iat_scaled$afd) #generate model tables library(sjPlot) plot_models(mod_a, mod_b, mod_c, mod_d) plot_model(mod_final, title = "Combined Model", type = c("std"), colors = c("bw"), axis.lim = c(-.6, .6), axis.labels= c("AIA * Group D","AIA * Group C","AIA * Group B", "Work status", "Education level", "Female","Age", "Group D", "Group C", "Group B", "Anti-immigration Attitudes (AIA)")) tab_model(mod_a, mod_b, mod_c, mod_d, show.est = FALSE, show.ci = FALSE, show.se = TRUE, show.std = TRUE, collapse.se = TRUE) tab_model(mod_final, show.est = TRUE, show.ci = FALSE, show.se = TRUE, show.std = TRUE, collapse.se = T) #Figure 3, multiverse analysis#### library(specr) #there is no option in specr to include all possible combinations of covariates #work-around: creating combinations of all covariates as model specifications age <- function(formula, data) { lm(paste(formula, c("+ age")), data = data)} gender <- function(formula, data) { lm(paste(formula, c("+ gender")), data = data)} edu <- function(formula, data) { lm(paste(formula, c("+ edu")), data = data)} work <- function(formula, data) { lm(paste(formula, c("+ work")), data = data)} age_gender <- function(formula, data) { lm(paste(formula, c("+ age + gender")), data = data)} age_edu <- function(formula, data) { lm(paste(formula, c("+ age + edu")), data = data)} age_work <- function(formula, data) { lm(paste(formula, c("+ age + work")), data = data)} gender_edu <- function(formula, data) { lm(paste(formula, c("+ gender + edu")), data = data)} gender_work <- function(formula, data) { lm(paste(formula, c("+ gender + work")), data = data)} edu_work <- function(formula, data) { lm(paste(formula, c("+ edu + work")), data = data)} age_gender_edu <- function(formula, data) { lm(paste(formula, c("+ age + gender + edu")), data = data)} age_gender_work <- function(formula, data) { lm(paste(formula, c("+ age + gender + work")), data = data)} age_edu_work <- function(formula, data) { lm(paste(formula, c("+ age + edu + work")), data = data)} gender_edu_work <- function(formula, data) { lm(paste(formula, c("+ gender + edu + work")), data = data)} all_covariates <- function(formula, data) { lm(paste(formula, c("+ age + gender + edu + work")), data = data)} no_covariates <- function(formula, data) { lm(paste(formula, c("")), data = data)} covariates <- c("age","gender","edu","work", "age_gender","age_edu","age_work", "gender_edu","gender_work","edu_work", "age_gender_edu","age_gender_work","age_edu_work", "gender_edu_work", "all_covariates","no_covariates") specr_results <- run_specs(df = iat_scaled, y = c("afd"), x = c("mig"), model = covariates, subsets = list(group = unique(iat_scaled$group))) #drop the pooled data set of all groups from the curve specr_results <- specr_results[specr_results$subsets != "all",] plot_specs(specr_results, choices = c("model", "subsets")) #Table 4, Figure 4, generalized sensitivty analysis#### library(sensemakr) migXgroup_b_sens <- sensemakr(model = mod_final, treatment = "mig:group_b", benchmark_covariates = "edu", kd = 10) migXgroup_c_sens <- sensemakr(model = mod_final, treatment = "mig:group_c", benchmark_covariates = "edu", kd = 10) migXgroup_d_sens <- sensemakr(model = mod_final, treatment = "mig:group_d", benchmark_covariates = "edu", kd = 10) ovb_minimal_reporting(migXgroup_b_sens, format = "html") png("migXgroup_b_sens_abs.png", units = c("px"), width = 710, height = 700, pointsize = 25) plot(migXgroup_b_sens) dev.off() png("migXgroup_b_sens_tvalue.png", units = c("px"), width = 710, height = 700, pointsize = 25) plot(migXgroup_b_sens, sensitivity.of = "t-value") dev.off() ovb_minimal_reporting(migXgroup_c_sens, format = "html") png("migXgroup_c_sens_abs.png", units = c("px"), width = 710, height = 700, pointsize = 25) plot(migXgroup_c_sens) dev.off() png("migXgroup_c_sens_tvalue.png", units = c("px"), width = 710, height = 700, pointsize = 25) plot(migXgroup_c_sens, sensitivity.of = "t-value") dev.off() ovb_minimal_reporting(migXgroup_d_sens, format = "html") png("migXgroup_d_sens_abs.png", units = c("px"), width = 710, height = 700, pointsize = 25) plot(migXgroup_d_sens) dev.off() png("migXgroup_d_sens_tvalue.png", units = c("px"), width = 710, height = 700, pointsize = 25) plot(migXgroup_d_sens, sensitivity.of = "t-value") dev.off()