#--- #title: "Artistic Activism Study 2" #author: "blinded for review" #version: 2024-12-06 #--- rm(list=ls()) ####Preparations#### setwd("…/study2") library(dplyr) library(tidyr) library(psych) library(lavaan) library(effectsize) library(apaTables) library(ggplot2) library(jtools) library(sjPlot) library(effsize) library(lm.beta) library(car) ###Read & prepare data### export <- read.csv ("data_activism_study2.csv", header = TRUE, sep = ",") ###Rename Variables### ds <- export %>% rename( CASE = CASE, group = RD01, gender = SD01, gender.cat = PI02_01, yearofbirth = SD02_01, education = SD03, art.interest = CA01, mc.art.ob1 = MC01_01, mc.art.ob2 = MC01_03, mc.art.ob3 = MC01_04, mc.art.sb1 = MC02_01, mc.art.sb2 = MC02_02, mc.art.sb3 = MC02_04, extreme = DV01_01, immoral = DV01_02, emotion = DV01_03, identification = DV01_04, supportprotest = DV01_05, supportcause = DV01_06, extreme1 = DV02_05, extreme2r = DV02_06, extreme3 = DV02_07, extreme4 = DV02_08, extreme5 = DV02_09, immoral1r = DV02_10, immoral2r = DV02_12, immoral3r = DV02_13, immoral4r = DV02_14, identification1 = DV02_01, identification2 = DV02_02, emotion1 = DV02_03, emotion2 = DV02_04, support1r = DV02_11, support2 = DV02_15, support3 = DV02_16, support4 = DV02_17, support5 = DV02_18, clim.concern01 = CE01_07, clim.concern02 = CE01_08, clim.concern03 = CE01_09, clim.urgency = CE01_11, clim.acknow01 = CE01_12, clim.acknow02 = CE01_13, clim.acknow03 = CE01_14, clim.know = CE01_15, piks01 = CP01_01, piks02 = CP01_02, piks03 = CP01_03, piks04 = CP01_04, piks05 = CP01_05, left.right = CP02, social.art1 = CA02_01, social.art2 = CA02_02, social.art3 = CA02_03, social.art4 = CA02_04, social.art5 = CA02_05, social.art6 = CA02_06, social.art7 = CA02_07, social.art8 = CA02_08, social.art9 = CA02_09, social.art10 = CA02_11, social.art11 = CA02_12, social.art12 = CA02_13, social.art13 = CA02_15, social.art14 = CA02_16, party.ident.CDUCSU = CP03_01, party.ident.gruene = CP03_02, party.ident.SPD = CP03_03, party.ident.AfD = CP03_04, party.ident.Linke = CP03_05, party.ident.FDP = CP03_06, party.ident.other.party = CP03_07, ) rm(export) ###Recode/restructure variables### ds$group.dummy <- as.numeric(ds$group-1) ds$group <- as.factor(ds$group) ds$group<- as.factor(dplyr::recode(ds$group, '1'='Non-Artistic', '2'='Artistic')) ds$age <- 2022-ds$yearofbirth ds$gender <- as.factor(ds$gender) ds$gender.cat <- as.factor(ifelse(ds$gender.cat == 2, 0, ds$gender.cat)) ds$gender.dummy <- as.numeric(ds$gender.cat) ds$education.cat <- as.factor(ifelse((ds$education<=4 | ds$education == 7), 'else', 'upp/sec')) ds$education.dummy <- as.numeric(ds$education.cat) ds$education <- as.factor(ds$education) ###Recode invers items### ds$support1 <- 7-ds$support1r ds$extreme2 <- 7-ds$extreme2r ds$immoral1 <- 7-ds$immoral1r ds$immoral2 <- 7-ds$immoral2r ds$immoral3 <- 7-ds$immoral3r ds$immoral4 <- 7-ds$immoral4r ####Sample Descriptives/Sociodemographics#### ##group sizes table(ds$group) ##gender table(ds$gender) round(prop.table(table(ds$gender)),3)*100 table(ds$gender.cat) round(prop.table(table(ds$gender.cat)),3)*100 ##age describe(ds$age) ##education table(ds$education) round(prop.table(table(ds$education)),3)*100 table(ds$education.cat) round(prop.table(table(ds$education.cat)),3)*100 ####Measures#### #####Manipulation Check##### ######perc. art objective###### psych::alpha(subset(ds, select = c(mc.art.ob1, mc.art.ob2, mc.art.ob3))) ds$mc.art.ob <- rowMeans(subset(ds, select = c(mc.art.ob1, mc.art.ob2, mc.art.ob3))) ###### perc. art subjective ##### psych::alpha(subset(ds, select = c(mc.art.sb1, mc.art.sb2, mc.art.sb3))) ds$mc.art.sb <- rowMeans(subset(ds, select = c(mc.art.sb1, mc.art.sb2, mc.art.sb3))) #####DVs##### ######extreme###### psych::alpha(subset(ds, select = c(extreme1, extreme2, extreme3, extreme4, extreme5))) ds$extreme.scale <- rowMeans(subset(ds, select = c(extreme1, extreme2, extreme3, extreme4, extreme5))) ######immoral###### psych::alpha(subset(ds, select = c(immoral1, immoral2, immoral3, immoral4))) ds$immoral.scale <- rowMeans(subset(ds, select = c(immoral1, immoral2, immoral3, immoral4))) ######emotion###### psych::alpha(subset(ds, select = c(emotion1, emotion2))) ds$emotion.scale <- rowMeans(subset(ds, select = c(emotion1, emotion2))) ######identification###### psych::alpha(subset(ds, select = c(identification1, identification2))) ds$identification.scale <- rowMeans(subset(ds, select = c(identification1, identification2))) ######support###### psych::alpha(subset(ds, select = c(support1, support2, support3, support4, support5))) ds$support.scale <- rowMeans(subset(ds, select = c(support1, support2, support3, support4, support5))) #####Controls##### ###### political interest ###### psych::alpha(subset(ds, select = c(piks01, piks02, piks03, piks04, piks05))) ds$piks <- rowMeans(subset(ds, select = c(piks01, piks02, piks03, piks04, piks05))) ######climate typology###### psych::alpha(subset(ds, select = c(clim.concern01, clim.concern02, clim.concern03, clim.acknow01, clim.acknow02, clim.acknow03, clim.urgency, clim.know))) ds$climate <- rowMeans(subset(ds, select = c(clim.concern01, clim.concern02, clim.concern03, clim.acknow01, clim.acknow02, clim.acknow03, clim.urgency, clim.know))) ######beliefs about art in society###### #factor analysis factor.social.art <- subset(ds, select = c(social.art1, social.art2, social.art3, social.art4, social.art5, social.art6, social.art7, social.art8, social.art9, social.art10, social.art11, social.art12, social.art13, social.art14)) scree(factor.social.art, pc=FALSE) factor <- fa(factor.social.art, nfactors = 2, rotate = "varimax") print(factor$loadings, cutoff = 0.0) print(factor$loadings, cutoff = 0.5) #stylistic-emotional beliefs psych::alpha(subset(ds, select = c(social.art1, social.art2, social.art3, social.art6, social.art7))) ds$se.beliefs <- rowMeans(subset(ds, select = c(social.art1, social.art2, social.art3, social.art6, social.art7))) #political-interventionist beliefs psych::alpha(subset(ds, select = c(social.art9, social.art10, social.art11, social.art12, social.art13, social.art14))) ds$pi.beliefs <- rowMeans(subset(ds, select = c(social.art9, social.art10, social.art11, social.art12, social.art13, social.art14))) #####General Descriptives##### ######Means###### describe(ds$mc.art.ob) describe(ds$mc.art.sb) describe(ds$extreme.scale) describe(ds$immoral.scale) describe(ds$emotion.scale) describe(ds$identification.scale) describe(ds$support.scale) describe(ds$extreme) describe(ds$immoral) describe(ds$emotion) describe(ds$identification) describe(ds$supportprotest) describe(ds$supportcause) describe(ds$piks) describe(ds$left.right) describe(ds$climate) describe(ds$art.interest) describe(ds$se.beliefs) describe(ds$pi.beliefs) ######Intercorrelations###### ds %>% select(mc.art.ob, mc.art.sb, extreme.scale, immoral.scale, emotion.scale, identification.scale, support.scale, supportcause, piks, left.right, climate, art.interest, se.beliefs, pi.beliefs) %>% corr.test() #with all variables (for supplementary - version a) ds %>% select(mc.art.ob, mc.art.sb, extreme.scale, immoral.scale, emotion.scale, identification.scale, support.scale, extreme, immoral, emotion, identification, supportprotest, supportcause, piks, left.right, climate, art.interest, se.beliefs, pi.beliefs ) %>% corr.test() #with all variables (for supplementary - version b) tablecorrs.full <- apa.cor.table(subset(ds, select = c(mc.art.ob, mc.art.sb, extreme.scale, immoral.scale, emotion.scale, identification.scale, support.scale, extreme, immoral, emotion, identification, supportprotest, supportcause, piks, left.right, climate, art.interest, se.beliefs, pi.beliefs)), table.number=1, show.conf.interval = FALSE, show.sig.stars = TRUE, landscape = TRUE, filename="table_fullcorrelations.rtf" ) tablecorrs.full #only DVs ds %>% select(extreme.scale, immoral.scale, emotion.scale, identification.scale, support.scale, supportcause, extreme, immoral, emotion, identification, supportprotest, supportcause) %>% corr.test() #with party identification (for supplementary) ds %>% select(immoral.scale, emotion.scale, identification.scale, support.scale, supportcause, party.ident.CDUCSU, party.ident.gruene, party.ident.SPD, party.ident.AfD, party.ident.Linke, party.ident.FDP) %>% corr.test() ####Analyses#### #####Preliminary (differences between groups/controls?)##### ######gender###### table(ds$gender,ds$group) chisq.test(ds$gender,ds$group) table(ds$gender.cat,ds$group) round(prop.table(table(ds$group, ds$gender.cat), margin = 1), 2) chisq.test(ds$gender.cat,ds$group) ######education###### table(ds$education, ds$group) chisq.test(ds$education,ds$group) table(ds$education.cat, ds$group) round(prop.table(table(ds$education.cat, ds$group), margin = 1), 2) chisq.test(ds$education.cat,ds$group) ######age###### describe(ds$age) describeBy(ds$age, ds$group) leveneTest(ds$age, ds$group) t.test(ds$age~ds$group, var.equal = TRUE, alternative = "two.sided") ######PIKS###### describe(ds$piks) describeBy(ds$piks, ds$group) leveneTest(ds$piks, ds$group) t.test(ds$piks~ds$group, var.equal = TRUE, alternative = "two.sided") ######orientation###### describe(ds$left.right) describeBy(ds$left.right, ds$group) leveneTest(ds$left.right, ds$group) t.test(ds$left.right~ds$group, var.equal = TRUE, alternative = "two.sided") ######climate-type###### describe(ds$climate) describeBy(ds$climate, ds$group) leveneTest(ds$climate, ds$group) t.test(ds$climate~ds$group, var.equal = TRUE, alternative = "two.sided") ######general interest in art###### describe(ds$art.interest) describeBy(ds$art.interest, ds$group) leveneTest(ds$art.interest, ds$group) t.test(ds$art.interest~ds$group, var.equal = TRUE, alternative = "two.sided") ######stylistic-emotional art beliefs###### describe(ds$se.beliefs) describeBy(ds$se.beliefs, ds$group) leveneTest(ds$se.beliefs, ds$group) t.test(ds$se.beliefs~ds$group, var.equal = TRUE, alternative = "two.sided") ######political-interventionist art beliefs###### describe(ds$pi.beliefs) describeBy(ds$pi.beliefs, ds$group) leveneTest(ds$pi.beliefs, ds$group) t.test(ds$pi.beliefs~ds$group, var.equal = TRUE, alternative = "two.sided") #####Manipulation Check##### #obj. man-check art describe(ds$mc.art.ob) describeBy(ds$mc.art.ob,ds$group) leveneTest(ds$mc.art.ob, ds$group) t.test(ds$mc.art.ob~ds$group, var.equal = FALSE, alternative = "two.sided") cohen.d(ds$mc.art.ob, ds$group) #sub man check art describe(ds$mc.art.sb) describeBy(ds$mc.art.sb,ds$group) leveneTest(ds$mc.art.sb, ds$group) t.test(ds$mc.art.sb~ds$group, var.equal = FALSE, alternative = "two.sided") cohen.d(ds$mc.art.sb, ds$group) #####Analysis H1##### ######MANOVA (scales)###### manova.h1.scales <- manova(cbind(extreme.scale, immoral.scale, emotion.scale, identification.scale, support.scale) ~ group, data = ds) summary(manova.h1.scales) summary(aov(manova.h1.scales)) eta_squared(manova.h1.scales, partial = TRUE, alternative = "two.sided", ci = 0.95) ######MANOVA (oneitem)###### manova.h1.oneitem <- manova(cbind(extreme, immoral, emotion, identification, supportprotest, supportcause) ~ group, data = ds) summary(manova.h1.oneitem) summary(aov(manova.h1.oneitem)) eta_squared(manova.h1.oneitem, partial = TRUE, alternative = "two.sided", ci = 0.95) ######all mean values into table###### means.h1 <- ds %>% group_by(group) %>% summarize(across(c(extreme.scale, immoral.scale, emotion.scale, identification.scale, support.scale, extreme, immoral, emotion, identification, supportprotest, supportcause), list(mean = ~round(mean(.), 2), sd = ~round(sd(.), 2)))) %>% pivot_longer(cols = -group, names_to = c("variable", ".value"), names_sep = "_") %>% pivot_wider(names_from = group, values_from = c("mean", "sd"), names_sep = "_") print(means.h1) ######single t-tests###### leveneTest(ds$extreme.scale, ds$group) ttest.extreme.scale <- t.test(ds$extreme.scale ~ ds$group, var.equal = FALSE, alternative = "two.sided") d.extreme.scale <- cohen.d(ds$extreme.scale, ds$group) leveneTest(ds$immoral.scale, ds$group) ttest.immoral.scale <- t.test(ds$immoral.scale ~ ds$group, var.equal = TRUE, alternative = "two.sided") d.immoral.scale <- cohen.d(ds$immoral.scale, ds$group) leveneTest(ds$emotion.scale, ds$group) ttest.emotion.scale <- t.test(ds$emotion.scale ~ ds$group, var.equal = TRUE, alternative = "two.sided") d.emotion.scale <- cohen.d(ds$emotion.scale, ds$group) leveneTest(ds$identification.scale, ds$group) ttest.identification.scale <- t.test(ds$identification.scale ~ ds$group, var.equal = FALSE, alternative = "two.sided") d.identification.scale <- cohen.d(ds$identification.scale, ds$group) leveneTest(ds$support.scale, ds$group) ttest.support.scale <- t.test(ds$support.scale ~ ds$group, var.equal = TRUE, alternative = "two.sided") d.support.scale <- cohen.d(ds$support.scale, ds$group) leveneTest(ds$extreme, ds$group) ttest.extreme <- t.test(ds$extreme ~ ds$group, var.equal = FALSE, alternative = "two.sided") d.extreme <- cohen.d(ds$extreme, ds$group) leveneTest(ds$immoral, ds$group) ttest.immoral <- t.test(ds$immoral ~ ds$group, var.equal = TRUE, alternative = "two.sided") d.immoral <- cohen.d(ds$immoral, ds$group) leveneTest(ds$emotion, ds$group) ttest.emotion <- t.test(ds$emotion ~ ds$group, var.equal = TRUE, alternative = "two.sided") d.emotion <- cohen.d(ds$emotion, ds$group) leveneTest(ds$identification, ds$group) ttest.identification <- t.test(ds$identification ~ ds$group, var.equal = FALSE, alternative = "two.sided") d.identification <- cohen.d(ds$identification, ds$group) leveneTest(ds$supportprotest, ds$group) ttest.supportprotest <- t.test(ds$supportprotest ~ ds$group, var.equal = TRUE, alternative = "two.sided") d.supportprotest <- cohen.d(ds$supportprotest, ds$group) leveneTest(ds$supportcause, ds$group) ttest.supportcause <- t.test(ds$supportcause ~ ds$group, var.equal = FALSE, alternative = "two.sided") d.supportcause <- cohen.d(ds$supportcause, ds$group) ######store test results into means-table###### means.h1 <- data.frame( cbind( means.h1, as_tibble( rbind( c( round(ttest.extreme.scale$statistic, 2), round(ttest.extreme.scale$p.value, 3), round(d.extreme.scale$estimate, 2) ), c( round(ttest.immoral.scale$statistic, 2), round(ttest.immoral.scale$p.value, 3), round(d.immoral.scale$estimate, 2) ), c( round(ttest.emotion.scale$statistic, 2), round(ttest.emotion.scale$p.value, 3), round(d.emotion.scale$estimate, 2) ), c( round(ttest.identification.scale$statistic, 2), round(ttest.identification.scale$p.value, 3), round(d.identification.scale$estimate, 2) ), c( round(ttest.support.scale$statistic, 2), round(ttest.support.scale$p.value, 3), round(d.support.scale$estimate, 2) ), c( round(ttest.extreme$statistic, 2), round(ttest.extreme$p.value, 3), round(d.extreme$estimate, 2) ), c( round(ttest.immoral$statistic, 2), round(ttest.immoral$p.value, 3), round(d.immoral$estimate, 2) ), c( round(ttest.emotion$statistic, 2), round(ttest.emotion$p.value, 3), round(d.emotion$estimate, 2) ), c( round(ttest.identification$statistic, 2), round(ttest.identification$p.value, 3), round(d.identification$estimate, 2) ), c( round(ttest.supportprotest$statistic, 2), round(ttest.supportprotest$p.value, 3), round(d.supportprotest$estimate, 2) ), c( round(ttest.supportcause$statistic, 2), round(ttest.supportcause$p.value, 3), round(d.supportcause$estimate, 2) ) ) ) ) ) %>% rename(p = V2, cohD = V3) ######print and export table with all mean values (for figure)###### print(means.h1) write.csv(means.h1, "means.h1.csv", row.names=FALSE) ######Alternative Figure: violin plots###### library(ggplot2) library(ggpubr) # List of variables variables <- c("mc.art.ob", "mc.art.sb", "extreme.scale", "immoral.scale", "emotion.scale", "identification.scale", "support.scale") # Create an empty list to store the plots plots_list <- list() # Vector of corresponding labels for the Y-axis y_axis_labels <- c("Obj. perc. art", "Sub. perc. art", "Extreme", "Immoral", "Emotion", "Identification", "Support") # Loop through each variable for (i in seq_along(variables)) { variable <- variables[i] label <- y_axis_labels[i] # Create the plot for the current variable current_plot <- ggplot(ds, aes(x = group, y = .data[[variable]], fill = group)) + geom_violin(trim = TRUE, scale = "width") + stat_summary( fun.data = "mean_cl_normal", geom = "pointrange", position = position_dodge(width = 0.9), size = 0.1, colour = "white" ) + scale_y_continuous(breaks = 1:6, limits = c(1, 6)) + scale_fill_manual(values = c("Artistic" = "grey30", "Non-Artistic" = "grey55")) + theme_light(base_size = 12) + theme(legend.position = "none") + coord_cartesian(ylim = c(1, 6)) + labs(y = variable, x = " ") + ylab(label) # Set Y-axis label for the current variable # Store plot in the list plots_list <- c(plots_list, list(current_plot)) } # Arrange the plots using ggarrange figure <- ggarrange(plotlist = plots_list, ncol = 2, nrow = 4) # Print the final plot print(figure) # Export the final plot ggsave("figure2.pdf", figure, height = 19.5, width = 13.5, units = "cm") #######control - scales####### manova.control.scale <- manova(cbind(extreme.scale, immoral.scale, emotion.scale, identification.scale, support.scale) ~ group+ gender.cat + age + education.cat + piks + left.right + climate + art.interest + se.beliefs + pi.beliefs, data = ds) summary(manova.control.scale) #summary(aov(manova.control.scale)) eta_squared(manova.control.scale) ######control - oneitem###### manova.control.oneitem <- manova(cbind(extreme, immoral, emotion, identification, supportprotest, supportcause) ~ group+ gender.cat + age + education.cat + piks + left.right + climate + art.interest + se.beliefs + pi.beliefs, data = ds) summary(manova.control.oneitem) #summary(aov(manova.control.oneitem)) eta_squared(manova.control.oneitem) #####Analysis H2 (no relevant effects through extreme)##### ######Mediation: scales###### mediate(cbind(immoral.scale, emotion.scale, identification.scale, support.scale) ~ group.dummy + (extreme.scale), data = ds, n.iter = 10000) %>% print(short = FALSE) ######Mediation: one-item###### mediate(cbind(immoral, emotion, identification, supportprotest, supportcause) ~ group.dummy + (extreme), data = ds, n.iter = 10000) %>% print(short = FALSE) #####Analysis H3a#### ######Moderation: scales###### manova.h3a.s <- manova(cbind(extreme.scale, immoral.scale, emotion.scale, identification.scale, support.scale) ~ group*mc.art.sb, data = ds) summary.manova.h3a.s <-summary(manova.h3a.s) summary.manova.h3a.s eta2.manova.h3a.s <- eta_squared(manova.h3a.s) eta2.manova.h3a.s summary.aov.h3a.s <- summary.aov(manova.h3a.s) summary.aov.h3a.s summary.eta.h3a.s <- lapply(summary.aov.h3a.s, effectsize::eta_squared) summary.eta.h3a.s ######Moderation: one-items###### manova.h3a.i <- manova(cbind(extreme, immoral, emotion, identification, supportprotest, supportcause) ~ group*mc.art.sb, data = ds) summary.manova.h3a.i <-summary(manova.h3a.i) summary.manova.h3a.i eta2.manova.h3a.i <- eta_squared(manova.h3a.i) eta2.manova.h3a.i summary.aov.h3a.i <- summary.aov(manova.h3a.i) summary.aov.h3a.i summary.eta.h3a.i <- lapply(summary.aov.h3a.i, effectsize::eta_squared) summary.eta.h3a.i #####Analysis H3b (no relevant effects through extreme)##### ######Mediation: scales###### mediate(cbind(immoral.scale, emotion.scale, identification.scale, support.scale) ~ group.dummy*mc.art.sb + (extreme), data = ds, n.iter = 10000) %>% print(short = FALSE) ######Mediation: one-item###### mediate(cbind(immoral, emotion, identification, supportprotest, supportcause) ~ group.dummy*mc.art.sb + (extreme), data = ds, n.iter = 10000) %>% print(short = FALSE)